A cross-platform, safe, pure-Rust graphics API.
This report summarizes scanner evidence for gfx-rs/wgpu, a Rust project with 18,245 GitHub stars. SynthScan examined 405,921 lines of code across 1197 source files, recording 2215 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 5.4 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 2196 finding(s).
Are imports declared and package/API names verified? 4 finding(s).
Are wrappers, guards, and repeated structures necessary? 17 finding(s).
Which changes need focused human review? 2215 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2215 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | wgpu-core-remote/src/hub.rs | 101 | /// All the resources tracked by a [`crate::global::Global`]. | COMMENT |
| LOW | wgpu-core-remote/src/registry.rs | 1 | use crate::{ | COMMENT |
| LOW | wgpu-core-remote/src/global/device.rs | 81 | }; | COMMENT |
| LOW | wgpu-core-remote/src/global/device.rs | 101 | /// `unsigned long` value, but we can't construct a | COMMENT |
| LOW | wgpu-core-remote/src/global/device.rs | 701 | &self, | COMMENT |
| LOW | wgpu-hal/Cargo.toml | 41 | ] } | COMMENT |
| LOW | wgpu-hal/Cargo.toml | 61 | # enables the `vulkan` feature in `wgpu-core-deps-linux-android-bsd` which in turn enables the | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1 | //! A cross-platform unsafe graphics abstraction. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 21 | //! graphics system. If you need safety, the [`wgpu-core`] crate provides a | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 41 | //! unlike `wgpu-core`, which refers to objects by ID. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 61 | //! do any mutating work. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 81 | //! Vulkan bindings. It's also available on macOS, if you install [MoltenVK]. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 101 | //! | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 121 | //! available on the system. For example, [`vulkan::Api::Instance::init`][Ii] | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 141 | //! - [`Api::Surface`] implements the [`Surface`] trait, which represents a | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 161 | //! applications, like web browsers, where the API is available to untrusted | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 181 | //! A desire for "defense in depth" may suggest performing additional validation | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 201 | //! tracing/replay functionality, which is only available in `wgpu-core`. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 241 | extern crate alloc; | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 341 | #[cfg(all(any(gles, vulkan, metal, dx12), not(webgl)))] | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 581 | COMMENT | |
| LOW | wgpu-hal/src/lib.rs | 661 | /// | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 721 | unsafe fn configure( | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 741 | /// `self`. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 761 | /// [`SurfaceTexture`] to [`self.discard_texture`], so that it can be reused | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 781 | /// | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 801 | /// After this call, the texture underlying [`SurfaceTexture`] may be | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 841 | /// Returns the HDR / luminance characteristics of the display backing | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 861 | unsafe fn get_presentation_timestamp(&self) -> wgt::PresentationTimestamp; | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 881 | /// On Vulkan a `Device` corresponds to a logical device ([`VkDevice`]). Other | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 901 | /// which you can use to build [`CommandBuffer`]s holding commands to be | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 921 | /// [`CommandBuffer`]: Api::CommandBuffer | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 941 | /// Creates a new buffer. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 961 | /// Free `buffer` and any GPU resources it owns. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 981 | /// | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1001 | /// - If this function returns `Ok(mapping)` and `mapping.is_coherent` is | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1021 | /// [`MAP_READ`]: wgt::BufferUses::MAP_READ | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1041 | /// | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1201 | /// | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1221 | /// [`Fence`]: Api::Fence | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1281 | } | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1301 | /// submission's commands all complete execution before any of the second | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1321 | /// from a [`CommandEncoder`][ce] that was constructed from the | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1341 | /// typically by calling [`Surface::configure`]. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1361 | signal_fence: (&<Self::A as Api>::Fence, FenceValue), | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1381 | /// ordering between rendering and display. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1401 | unsafe fn wait_for_idle(&self) -> Result<(), DeviceError>; | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1421 | /// - Call methods like `copy_buffer_to_buffer`, `begin_render_pass`, | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1441 | /// - The `CommandEncoder` must be in the states described above to | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1461 | /// | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1481 | /// Return a fresh [`CommandBuffer`] holding the recorded commands. | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1501 | COMMENT | |
| LOW | wgpu-hal/src/lib.rs | 1601 | /// - If `layout` contains `n` bind group layouts, then any previously set | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1621 | /// bindings [with dynamic offsets][hdo] in the relevant bind group | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1681 | /// | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1701 | /// | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1721 | /// [`end_render_pass`]: CommandEncoder::end_render_pass | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1741 | /// size. On some backends, the binding size is ignored. This means that | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1841 | /// - [`begin_query`](CommandEncoder::begin_query) | COMMENT |
| LOW | wgpu-hal/src/lib.rs | 1881 | &mut self, | COMMENT |
| 2093 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | naga/src/front/wgsl/parse/lexer.rs | 1267 | /// D(𝐡) = ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | naga/src/front/wgsl/parse/lexer.rs | 1272 | Token::DocComment("/// D(𝐡) = ───────────────────────────────────────────────────"), | CODE |
| MEDIUM | wgpu/Cargo.toml | 47 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM | wgpu/Cargo.toml | 107 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM | wgpu/Cargo.toml | 124 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM | wgpu/Cargo.toml | 136 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM | wgpu/Cargo.toml | 150 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | wgpu-core/Cargo.toml | 49 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | wgpu-core/Cargo.toml | 59 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | wgpu-core/Cargo.toml | 66 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | wgpu-core/Cargo.toml | 72 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM | wgpu-core/Cargo.toml | 91 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM | wgpu-core/Cargo.toml | 103 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | wgpu-core/Cargo.toml | 120 | # -------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | wgpu-core/Cargo.toml | 130 | # -------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | wgpu-hal/src/dx12/device_creation.rs | 72 | // Step 1: Get ID3D12SDKConfiguration1 via D3D12GetInterface | COMMENT |
| LOW⚡ | wgpu-hal/src/dx12/device_creation.rs | 77 | // Step 2: Create device factory with the specified SDK version and path | COMMENT |
| LOW | .agents/skills/cts-triage/SKILL.md | 10 | ## Step 0: Divide Into Manageable Chunks | COMMENT |
| LOW⚡ | .agents/skills/cts-triage/SKILL.md | 24 | ## Step 1: Get Overall Statistics | COMMENT |
| LOW⚡ | .agents/skills/cts-triage/SKILL.md | 34 | ## Step 2: Identify Test Subcategories | COMMENT |
| LOW⚡ | .agents/skills/cts-triage/SKILL.md | 42 | ## Step 3: Run Each Subcategory | COMMENT |
| LOW | .agents/skills/cts-triage/SKILL.md | 56 | ## Step 4: Analyze Failure Patterns | COMMENT |
| LOW | .agents/skills/cts-triage/SKILL.md | 69 | ## Step 5: Examine Specific Failures | COMMENT |
| LOW | .agents/skills/cts-triage/SKILL.md | 84 | ## Step 6: Check CTS Test Source | COMMENT |
| LOW | .agents/skills/cts-triage/SKILL.md | 99 | ## Step 7: Categorize Issues | COMMENT |
| LOW | .agents/skills/cts-triage/SKILL.md | 126 | ## Step 8: Identify Root Causes | COMMENT |
| LOW | .agents/skills/cts-triage/SKILL.md | 152 | ## Step 9: Implement Fixes | COMMENT |
| LOW | .agents/skills/cts-triage/SKILL.md | 163 | ## Step 10: Document Findings | COMMENT |
| LOW | .agents/skills/cts-triage/SKILL.md | 217 | ## Step 11: Update CTS Result Lists | COMMENT |
| LOW | .agents/skills/cts-triage/SKILL.md | 244 | ## Step 12: Verify and Build | COMMENT |
| LOW | .claude/skills/cts-triage/SKILL.md | 10 | ## Step 0: Divide Into Manageable Chunks | COMMENT |
| LOW⚡ | .claude/skills/cts-triage/SKILL.md | 24 | ## Step 1: Get Overall Statistics | COMMENT |
| LOW⚡ | .claude/skills/cts-triage/SKILL.md | 34 | ## Step 2: Identify Test Subcategories | COMMENT |
| LOW⚡ | .claude/skills/cts-triage/SKILL.md | 42 | ## Step 3: Run Each Subcategory | COMMENT |
| LOW | .claude/skills/cts-triage/SKILL.md | 56 | ## Step 4: Analyze Failure Patterns | COMMENT |
| LOW | .claude/skills/cts-triage/SKILL.md | 69 | ## Step 5: Examine Specific Failures | COMMENT |
| LOW | .claude/skills/cts-triage/SKILL.md | 84 | ## Step 6: Check CTS Test Source | COMMENT |
| LOW | .claude/skills/cts-triage/SKILL.md | 99 | ## Step 7: Categorize Issues | COMMENT |
| LOW | .claude/skills/cts-triage/SKILL.md | 126 | ## Step 8: Identify Root Causes | COMMENT |
| LOW | .claude/skills/cts-triage/SKILL.md | 152 | ## Step 9: Implement Fixes | COMMENT |
| LOW | .claude/skills/cts-triage/SKILL.md | 163 | ## Step 10: Document Findings | COMMENT |
| LOW | .claude/skills/cts-triage/SKILL.md | 217 | ## Step 11: Update CTS Result Lists | COMMENT |
| LOW | .claude/skills/cts-triage/SKILL.md | 244 | ## Step 12: Verify and Build | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | wgpu-hal/src/metal/command.rs | 1356 | while self.state.stage_infos.ms.work_group_memory_sizes.len() | CODE |
| CRITICAL | wgpu-hal/src/metal/command.rs | 1359 | self.state.stage_infos.ms.work_group_memory_sizes.push(0); | CODE |
| CRITICAL | wgpu-core/src/command/render.rs | 3290 | if state.pass.base.device.indirect_validation.is_some() | CODE |
| CRITICAL | wgpu-core/src/command/render.rs | 3547 | let bundle = state.pass.base.tracker.bundles.insert_single(bundle); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | wgpu-hal/Cargo.toml | 50 | # The interaction of features between wgpu-core and wgpu-hal is a bit nuanced to get | COMMENT |
| MEDIUM | wgpu-hal/src/auxil/dyn_lib.rs | 25 | _ => crate::DeviceError::Unexpected, // could be unreachable!() but we prefer to be more robust | CODE |
| MEDIUM | naga/src/proc/index.rs | 79 | /// Some graphics hardware provides "robust buffer access", a feature that | COMMENT |
| MEDIUM | naga/src/proc/overloads/mod.rs | 165 | /// Essentially, if any one of the arguments is not a constant expression, | COMMENT |
| MEDIUM | wgpu/Cargo.toml | 137 | #! The following features facilitate integration with third-party supporting libraries. | COMMENT |
| MEDIUM | …u/src/documentation/extensions/cooperative_matrices.rs | 459 | ## Notes and best practices | COMMENT |
| MEDIUM⚡ | wgpu-core/Cargo.toml | 121 | #! The following features facilitate integration with third-party supporting libraries. | COMMENT |
| MEDIUM | wgpu-core/src/pipeline_cache.rs | 169 | /// We assume that your cache storage system will be relatively robust, and so | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | wgpu-hal/src/dx12/device_creation.rs | 72 | // Step 1: Get ID3D12SDKConfiguration1 via D3D12GetInterface | COMMENT |
| LOW⚡ | wgpu-hal/src/dx12/device_creation.rs | 77 | // Step 2: Create device factory with the specified SDK version and path | COMMENT |
| LOW | wgpu-hal/src/vulkan/sampler.rs | 122 | // We need to check if we can create more samplers. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | naga/src/proc/constant_evaluator.rs | 453 | /// Example usage: | COMMENT |
| LOW | naga/src/front/glsl/mod.rs | 143 | /// # Example usage | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cts_runner/src/bootstrap.js | 295 | function DOMExceptionOperationError(msg) { | CODE |
| LOW | cts_runner/src/bootstrap.js | 307 | function DOMExceptionInvalidCharacterError(msg) { | CODE |