{"record":{"id":"904b557c9cb5a3bb","repo":"bevyengine/bevy","slug":"allocation-didn-t-exist-or-was-already-prepared","errorCode":null,"errorMessage":"Allocation didn't exist or was already prepared","messagePattern":"Allocation didn't exist or was already prepared","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/bevy_render/src/material_bind_groups.rs","lineNumber":2487,"sourceCode":"    /// [`Self::allocate_unprepared`]. Such bind groups will defer being\n    /// prepared until the next time this method is called.\n    fn prepare_bind_groups(\n        &mut self,\n        render_device: &RenderDevice,\n        pipeline_cache: &PipelineCache,\n        fallback_buffer: &FallbackBuffer,\n        shader_buffer_assets: &RenderAssets<GpuShaderBuffer>,\n        changed_shader_buffers: &RenderChangedShaderBuffers,\n    ) {\n        self.invalidate_bind_group_for_changed_shader_buffers_if_needed(changed_shader_buffers);\n\n        for bind_group_index in mem::take(&mut self.to_prepare) {\n            let Some(MaterialNonBindlessAllocatedBindGroup::Unprepared {\n                bind_group: unprepared_bind_group,\n                layout: bind_group_layout,\n            }) = mem::take(&mut self.bind_groups[*bind_group_index as usize])\n            else {\n                panic!(\"Allocation didn't exist or was already prepared\");\n            };\n\n            // Pack any `Data` into uniform buffers.\n            let mut uniform_buffers = vec![];\n            for (index, binding) in unprepared_bind_group.binding_resources.iter() {\n                let UnpreparedBindingResource::Data(ref data_range) = *binding else {\n                    continue;\n                };\n                let label = format!(\"material uniform data {}\", *index);\n                let uniform_buffer = render_device.create_buffer_with_data(&BufferInitDescriptor {\n                    label: Some(&label),\n                    contents: &unprepared_bind_group.data_buffer\n                        [(data_range.start as usize)..(data_range.end as usize)],\n                    usage: BufferUsages::COPY_DST | BufferUsages::UNIFORM,\n                });\n                uniform_buffers.push(uniform_buffer);\n            }\n","sourceCodeStart":2469,"sourceCodeEnd":2505,"githubUrl":"https://github.com/bevyengine/bevy/blob/396ca727080776bd313bb892423b7d94e03b81b4/crates/bevy_render/src/material_bind_groups.rs#L2469-L2505","documentation":"Panic in MaterialBindGroupAllocator::prepare_bind_groups: an unprepared bind group listed in to_prepare had no pending allocation entry (already prepared or never allocated). Indicates allocator state bookkeeping corruption; normally unreachable.","triggerScenarios":"Thrown at crates/bevy_render/src/material_bind_groups.rs:2487 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Report as a Bevy engine bug with a reproducing project","Avoid custom sequences that prepare the same material bind group twice"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"396ca727080776bd313bb892423b7d94e03b81b4","analyzedAt":"2026-08-20T16:12:39.808Z","contentChangedAt":"2026-08-20T16:12:39.808Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}