{"record":{"id":"63b8dda660ad7eb7","repo":"gfx-rs/wgpu","slug":"only-bufferusages-copy-src-may-be-used-when-featu","errorCode":null,"errorMessage":"Only BufferUsages::COPY_SRC may be used when Features::MAPPABLE_PRIMARY_BUFFERS is not enabled. Specified buffer usages: {buffer_usages:?}","messagePattern":"Only BufferUsages::COPY_SRC may be used when Features::MAPPABLE_PRIMARY_BUFFERS is not enabled\\. Specified buffer usages: (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"wgpu/src/util/belt.rs","lineNumber":105,"sourceCode":"    /// - If enabled: any usage is valid.\n    /// - If disabled: only [`COPY_SRC`](BufferUsages::COPY_SRC) can be used.\n    #[track_caller]\n    pub fn new_with_buffer_usages(\n        device: Device,\n        chunk_size: BufferAddress,\n        mut buffer_usages: BufferUsages,\n    ) -> Self {\n        let (sender, receiver) = mpsc::channel();\n\n        // make sure anything other than MAP_WRITE | COPY_SRC is only allowed with MAPPABLE_PRIMARY_BUFFERS.\n        let extra_usages =\n            buffer_usages.difference(BufferUsages::MAP_WRITE | BufferUsages::COPY_SRC);\n        if !extra_usages.is_empty()\n            && !device\n                .features()\n                .contains(Features::MAPPABLE_PRIMARY_BUFFERS)\n        {\n            panic!(\"Only BufferUsages::COPY_SRC may be used when Features::MAPPABLE_PRIMARY_BUFFERS is not enabled. Specified buffer usages: {buffer_usages:?}\");\n        }\n        // always set MAP_WRITE\n        buffer_usages.insert(BufferUsages::MAP_WRITE);\n\n        StagingBelt {\n            device,\n            chunk_size,\n            buffer_usages,\n            active_chunks: Vec::new(),\n            closed_chunks: Vec::new(),\n            free_chunks: Vec::new(),\n            sender: Exclusive::new(sender),\n            receiver: Exclusive::new(receiver),\n        }\n    }\n\n    /// Allocate a staging belt slice of `size` to be copied into the `target` buffer\n    /// at the specified offset.","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/gfx-rs/wgpu/blob/3e11ff59bf3f9795d285ecc045014089640d7248/wgpu/src/util/belt.rs#L87-L123","documentation":"Panic in Upload Belt/InitEncoder construction (new_with_buffer_usages): the requested buffer_usages contain bits beyond MAP_WRITE | COPY_SRC while Features::MAPPABLE_PRIMARY_BUFFERS is disabled on the device. The faulty input is buffer_usages.","triggerScenarios":"Thrown at wgpu/src/util/belt.rs:105 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Request Features::MAPPABLE_PRIMARY_BUFFERS on the device if extra usages are required","Restrict belt buffer usages to MAP_WRITE | COPY_SRC when the feature is off"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3e11ff59bf3f9795d285ecc045014089640d7248","analyzedAt":"2026-09-03T01:43:21.459Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T07:17:11.731Z"}