core: manual buffer sync with sync-rows, reuse unchanged buffers and pipelines across activations

Also lets the screenshot suite point at another reference directory and settle longer.

Amp-Thread-ID: https://ampcode.com/threads/T-01a0b2dd-db32-712d-99ce-12ce4a86d979
Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
This commit is contained in:
Amp
2026-09-18 05:53:44 +00:00
co-authored by heaust
parent 49c80a209e
commit 31d3ae21ff
15 changed files with 185 additions and 48 deletions
+16 -12
View File
@@ -26,12 +26,7 @@ impl Store {
pub fn switch(&mut self, id: &str, gpu: &Wgpu, data: &RenderData) -> Result<(), String> {
let graph = self.graphs.get(id).ok_or("GRAPH_UNKNOWN")?.clone();
let mut resources = GpuResources::activate(
&graph,
gpu,
data,
self.active.as_ref().map(|active| &active.resources),
)?;
let mut resources = GpuResources::activate(&graph, gpu, data, self.active.as_ref())?;
for (name, levels) in &self.texture_sources {
for (mip_level, image) in levels {
if resources.needs_upload(name, *mip_level) {
@@ -72,6 +67,20 @@ impl Store {
}
}
pub fn sync_rows(
&self,
name: &str,
first: u32,
count: u32,
gpu: &Wgpu,
data: &RenderData,
) -> Result<(), String> {
match &self.active {
Some(active) => active.resources.sync_rows(name, first, count, gpu, data),
None => Ok(()),
}
}
pub fn active_mut(&mut self) -> Option<&mut Loadout> {
self.active.as_mut()
}
@@ -104,12 +113,7 @@ impl Store {
return Ok(());
};
let graph = active.graph.clone();
let mut resources = GpuResources::activate(
&graph,
gpu,
data,
self.active.as_ref().map(|active| &active.resources),
)?;
let mut resources = GpuResources::activate(&graph, gpu, data, self.active.as_ref())?;
for (name, levels) in &self.texture_sources {
for (mip_level, image) in levels {
if resources.needs_upload(name, *mip_level) {