Compare commits

...
Author SHA1 Message Date
Tanish Manku e7b5b14898 GPU memory on top of #5234: memory_budget takes the card's memory (vram) and the GPU Memory value; the document's pixels are charged unless the card's own memory is known; a set GPU Memory is capped at the card's share; benches use video_memory 2026-10-15 21:18:28 -07:00
Tanish Manku ea8f55f8f9 GPU memory: typed discrete check; the status and budget follow a GPU Memory change at once (measure_fit); perf rows P60/P61 for whole-document edits among 150 full-canvas layers under the app's budget 2026-10-15 21:06:55 -07:00
Tanish Manku 93c8e49954 GPU memory: a graphics card's own memory isn't charged for the document; GPU Memory preference; GPU Memory Full in the status bar
Many layers hit a cliff: past what the GPU memory budget leaves for layer pages, every edit
that redraws the whole document (opacity, visibility, a nudge) goes to the CPU compositor.
Measured on 3000x2000 full-canvas layers (RTX 5090, 31 GB RAM, Memory Usage 8 GB): 150
layers took 2.6 s per such edit, 300 layers 6 s. The budget was Memory Usage minus the
document's pixels and History, which is right where the GPU shares system memory, but a
discrete card's memory doesn't hold the document, so 150 layers of 6 MP (3.6 GB) squeezed
the budget below what they needed.

- Automatic budget: discrete adapters are no longer charged for the document's pixels
  (integrated and software adapters still are). 150 layers: 2.6 s -> 25 ms.
- Preferences › Performance › GPU Memory (MB, 0 = Automatic; performance.gpuMemoryMb) sets
  the budget outright. 300 layers with 12 GB: 6 s -> 45-72 ms.
- The status bar shows "GPU Memory Full" while the active document's layers don't fit
  (both status bar styles); hovering gives the numbers, clicking opens Preferences ›
  Performance. Its Graphics rows show the budget and what the layers need. The slow CPU
  redraw notice gives the numbers and points at GPU Memory.
- Headless: the preference is a normal pref (prefs.set), and ui.state's perf.timings
  reports gpuLayerFit {doc, needed, budget} next to gpuBudgetMb.

Next (owner-approved plan): after #5370, read the card's real limit from the driver
(wgpu memory budget thresholds) and shrink on out-of-memory; then redraw the visible
area on the GPU first when layers still don't fit.
2026-10-15 21:06:49 -07:00
32 changed files with 491 additions and 61 deletions

No files matched your search

+6
View File
@@ -538,6 +538,10 @@ pub struct Performance {
pub low_latency_drawing: bool,
/// Linux display server (applies at next launch; see [`LinuxDisplayServer`]).
pub linux_display_server: LinuxDisplayServer,
/// GPU memory the canvas compositor may hold for layer pages and effect maps, in MB; 0 is
/// automatic (a graphics card's own memory isn't charged for the document's pixels, memory
/// shared with the system is). Layers that don't fit redraw the whole document on the CPU.
pub gpu_memory_mb: u32,
/// Memory budget of the layer-effect cache, in MB.
pub effect_cache_mb: u32,
pub legacy_compositing: bool,
@@ -569,6 +573,7 @@ impl Default for Performance {
low_resolution_previews: true,
low_latency_drawing: false,
linux_display_server: LinuxDisplayServer::Auto,
gpu_memory_mb: 0,
effect_cache_mb: 768,
legacy_compositing: false,
}
@@ -1107,6 +1112,7 @@ pub fn range(path: &str) -> Option<(f64, f64)> {
"interface.notificationDurationSeconds" => (1.0, 120.0),
"export.jpegQuality" | "export.webpQuality" => (1.0, 100.0),
"performance.memoryUsageMb" => (256.0, 1_048_576.0),
"performance.gpuMemoryMb" => (0.0, 1_048_576.0),
"performance.historyStates" => (1.0, 1000.0),
"performance.cacheLevels" => (1.0, 8.0),
"performance.cacheTileSize" => (256.0, 16384.0),
+5
View File
@@ -794,6 +794,11 @@ impl Compositor {
total
}
/// The GPU memory resident layer pages may hold (bytes; see [`Compositor::set_memory_budget`]).
pub fn resident_budget(&self) -> u64 {
self.resident_budget
}
/// Whether a render of `region` keeps every layer page it needs within the budget; when it
/// doesn't, each render re-uploads what was evicted.
pub fn fits_budget(&self, doc: &Document, region: Rect) -> bool {
+1 -1
View File
@@ -201,7 +201,7 @@ fn main() {
.sum();
let ram = photocraft_ui_egui::gpu_canvas::physical_memory();
let vram = g.video_memory();
let budget = photocraft_ui_egui::gpu_canvas::memory_budget(allowance, pixels, ram, vram);
let budget = photocraft_ui_egui::gpu_canvas::memory_budget(allowance, pixels, ram, vram, 0);
g.set_memory_budget(budget);
println!(
"RAM {} MB, VRAM {} MB, document pixels {} MB, Memory Usage {} MB -> GPU budget {} MB",
+66 -1
View File
@@ -242,6 +242,8 @@ struct Sizes {
big_layer: (u32, u32),
/// Layers in the "150-layer document".
many_layers: usize,
/// The full-canvas layers document (L3): size and layer count.
full_layers: (u32, u32, usize),
/// The 16-bit document (15000 × 10000).
huge16: (u32, u32),
/// The 32-bit document with 20 layers.
@@ -258,6 +260,7 @@ const FULL: Sizes = Sizes {
layered: (5472, 3648),
big_layer: (4243, 2828),
many_layers: 150,
full_layers: (3000, 2000, 150),
huge16: (15000, 10000),
float32: (4000, 3000),
ten_mp: (3872, 2592),
@@ -269,6 +272,7 @@ const QUICK: Sizes = Sizes {
layered: (1600, 1066),
big_layer: (1200, 800),
many_layers: 40,
full_layers: (800, 600, 20),
huge16: (2400, 1600),
float32: (1200, 900),
ten_mp: (1200, 800),
@@ -357,9 +361,10 @@ fn main() {
// A panic in one group (a crash the scenario found) is reported against the row that was
// running, and the other groups still run.
type Group = fn(&mut Bench, &Sizes);
let groups: [(&str, Group); 5] = [
let groups: [(&str, Group); 6] = [
("layered", layered_scenarios),
("many layers", many_layer_scenarios),
("full-canvas layers", full_canvas_layer_scenarios),
("bit depths", depth_scenarios),
("long operations", job_scenarios),
("algorithms", algorithm_scenarios),
@@ -539,6 +544,66 @@ fn layered_scenarios(b: &mut Bench, sz: &Sizes) {
}
/// #209: arrow-key nudge in the 150-layer document; #1771: a new layer there.
/// Layers overhaul L3: edits that redraw the whole document (a layer's opacity, hiding it) with
/// many full-canvas layers, under the app's own GPU memory budget (Memory Usage at its default,
/// the adapter's kind; `gpu_canvas::memory_budget`). Past what the budget holds, each one went to
/// the CPU compositor (2.6 s at 150 layers of 6 MP on a discrete card).
fn full_canvas_layer_scenarios(b: &mut Bench, sz: &Sizes) {
let opacity = "opacity of a layer among many full-canvas layers + refresh";
let hide = "hide a layer among many full-canvas layers + refresh";
if !b.wanted(opacity) && !b.wanted(hide) {
return;
}
b.current = Some(opacity.to_string());
let (w, h, n) = sz.full_layers;
let mut s = Session::new();
let built = (|| -> Res<u64> {
exec(&mut s, "file.new", json!({"width": w, "height": h, "background": "white"}))?;
let mut mid = 0;
for i in 0..n as u32 {
exec(&mut s, "layer.new.layer", json!({"name": format!("full {i}")}))?;
exec(&mut s, "edit.fill", json!({"color": format!("#{:02x}{:02x}80", (i * 37) % 256, (i * 91) % 256), "opacity": 3}))?;
if i % 7 == 3 {
exec(&mut s, "layer.layerStyle.dropShadow", json!({"distance": 6, "size": 8}))?;
}
if i as usize == n / 2 {
mid = active_layer(&s)?;
}
}
Ok(mid)
})();
let mid = match built {
Ok(v) => v,
Err(e) => {
b.errors.push((opacity.to_string(), e));
return;
}
};
if let (Some((g, _)), Some(st)) = (&b.gpu, s.active()) {
let pixels = st.history.pixel_bytes(&st.doc) as u64;
let allowance = u64::from(photocraft_engine::prefs::Performance::default().memory_usage_mb) << 20;
g.set_memory_budget(photocraft_ui_egui::gpu_canvas::memory_budget(
allowance,
pixels,
photocraft_ui_egui::gpu_canvas::physical_memory(),
g.video_memory(),
0,
));
}
let _ = b.refresh(&s, true);
let reps = b.reps;
b.time(opacity, &mut s, reps, true, |b, s, i| {
let t = Instant::now();
exec(s, "layer.setProps", json!({"layer": mid, "opacity": if i % 2 == 0 { 0.5 } else { 1.0 }}))?;
Ok(ms(t) + b.refresh(s, false)?)
});
b.time(hide, &mut s, reps, true, |b, s, i| {
let t = Instant::now();
exec(s, "layer.setProps", json!({"layer": mid, "visible": i % 2 == 1}))?;
Ok(ms(t) + b.refresh(s, false)?)
});
}
fn many_layer_scenarios(b: &mut Bench, sz: &Sizes) {
// Row names stay stable across modes: the layer count is in the mode, not the key.
let name = "nudge 1 px in the many-layer document + refresh".to_string();
+25 -8
View File
@@ -1615,7 +1615,13 @@ fn ensure_gpu(app: &mut PhotocraftApp, ctx: &egui::Context, idx: usize, visible:
grid: None,
});
let present = cache.on_gpu && gpu.has(id.0, size);
if present && cache.revision == revision && cache.preview_key == preview_key {
let current = cache.revision == revision && cache.preview_key == preview_key;
// GPU Memory or Memory Usage changed with nothing to redraw: the new budget, and whether the
// layers fit it, show at once (the status bar's GPU Memory Full).
if present && app.perf.gpu_budget_allowance != budget_allowance(app) {
gpu_budget(app, &gpu, idx, false, visible);
}
if present && current {
// An adjustment preview composited where the view was: catch up where it moved to.
if let Some(r) = crate::adjust_preview::uncovered(app, id, raw_key, visible) {
let r = gpu.refresh(id.0, &doc, Some(r), display.as_deref());
@@ -1633,6 +1639,7 @@ fn ensure_gpu(app: &mut PhotocraftApp, ctx: &egui::Context, idx: usize, visible:
gpu_budget(app, &gpu, idx, partial, visible);
let defer = crate::background_redraw::enabled(app);
let r = gpu.refresh_with(id.0, &doc, if partial { damage } else { None }, display.as_deref(), defer);
app.perf.gpu_layer_fit = gpu.layer_fit();
if r.kind == "lost" || r.kind == crate::gpu_canvas::REFRESH_OVER_BUDGET {
// The device is gone (`gpu_status` then drops the GPU canvas) or the canvas is over the
// texture budget: draw this frame on the CPU path.
@@ -1673,22 +1680,32 @@ fn ensure_gpu(app: &mut PhotocraftApp, ctx: &egui::Context, idx: usize, visible:
true
}
/// Point the wgpu compositor at what the view shows, and size its memory budget from Memory
/// Usage, the document's pixels and History, physical memory and the GPU's own: on full refreshes
/// (pixels counted once per structural change, not per brush dab) and whenever the preference
/// changes.
/// Point the wgpu compositor at what the view shows, and size its memory budget from GPU Memory,
/// or Memory Usage, the document's pixels and History (charged where the GPU shares the system's
/// memory), physical memory and the GPU's own: on full refreshes (pixels counted once per
/// structural change, not per brush dab) and whenever either preference changes.
fn gpu_budget(app: &mut PhotocraftApp, gpu: &crate::gpu_canvas::GpuCanvas, idx: usize, partial: bool, visible: DRect) {
gpu.set_focus(Some(visible));
let allowance = u64::from(app.session.prefs().performance.memory_usage_mb).saturating_mul(1 << 20);
if partial && app.perf.gpu_budget_allowance == allowance && gpu.memory_budget().is_some() {
let allowance = budget_allowance(app);
let changed = app.perf.gpu_budget_allowance != allowance;
if partial && !changed && gpu.memory_budget().is_some() {
return;
}
let Some(st) = app.session.documents().get(idx) else { return };
let pixels = st.memory_bytes() as u64;
let budget = crate::gpu_canvas::memory_budget(allowance, pixels, crate::gpu_canvas::physical_memory(), gpu.video_memory());
let budget = crate::gpu_canvas::memory_budget(allowance.0, pixels, crate::gpu_canvas::physical_memory(), gpu.video_memory(), allowance.1);
gpu.set_memory_budget(budget);
app.perf.gpu_budget_mb = budget >> 20;
app.perf.gpu_budget_allowance = allowance;
if changed && let Some(fit) = gpu.measure_fit(&st.doc) {
app.perf.gpu_layer_fit = Some(fit);
}
}
/// Memory Usage and GPU Memory (Preferences › Performance), in bytes.
fn budget_allowance(app: &PhotocraftApp) -> (u64, u64) {
let performance = &app.session.prefs().performance;
(u64::from(performance.memory_usage_mb).saturating_mul(1 << 20), u64::from(performance.gpu_memory_mb).saturating_mul(1 << 20))
}
/// Live preview for an open filter dialog: run the filter on the proxy and upload it. With
+51
View File
@@ -183,6 +183,24 @@ pub fn status_bar_pro(app: &mut PhotocraftApp, ui: &mut egui::Ui) {
status_message(app, ui, &t);
}
/// The active document's layers don't fit the GPU memory budget (`perf.gpuLayerFit`): edits that
/// redraw the whole document do it on the CPU, so say so in the status bar until they fit again.
/// Clicking it opens Preferences › Performance, where GPU Memory raises the budget.
pub fn gpu_memory_status(app: &mut PhotocraftApp, ui: &mut egui::Ui) {
let Some(doc) = app.session.active().map(|st| st.doc.id.0) else { return };
let Some(fit) = app.perf.gpu_layer_fit.filter(|f| f.doc == doc && !f.fits()) else { return };
let t = Tokens::get(ui.ctx());
let resp = ui
.add(egui::Label::new(RichText::new(tl!("GPU Memory Full")).color(t.warning).size(12.0)).sense(Sense::click()))
.on_hover_text(crate::i18n::fmt(
tl!("The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory."),
&[("needed", &fmt_bytes(fit.needed)), ("budget", &fmt_bytes(fit.budget))],
));
if resp.clicked() {
crate::shortcut_dispatch::dispatch(app, ui.ctx(), "edit.preferences.performance");
}
}
/// The latest status message after a separator, in the warning colour when it is an error.
fn status_message(app: &PhotocraftApp, ui: &mut egui::Ui, t: &Tokens) {
if app.ui.status.is_empty() {
@@ -293,6 +311,39 @@ mod tests {
assert_eq!(status_info_text_with_units(&d, "dimensions", "", "", &units), "722.7 pt x 451.7 pt (240 ppi)");
}
/// L3: layers over the GPU memory budget show "GPU Memory Full" in the status bar, for that
/// document only, and clicking it opens Preferences › Performance (GPU Memory).
#[test]
fn status_bar_says_when_layers_dont_fit_gpu_memory() {
use egui_kittest::{Harness, kittest::Queryable};
for theme in [crate::theme::ThemeKind::Pro, crate::theme::ThemeKind::Studio] {
let mut h = Harness::builder().with_size(vec2(1200.0, 700.0)).with_max_steps(64).build_eframe(move |cc| {
PhotocraftApp::setup_context(&cc.egui_ctx, theme);
let mut app = PhotocraftApp::new(photocraft_engine::Session::new(), crate::Services::default());
app.ui.theme = theme;
app
});
h.state_mut().run("file.new", json!({"width": 800, "height": 600})).unwrap();
h.state_mut().sync_views();
h.run_steps(4);
let doc = h.state().session.active().unwrap().doc.id.0;
assert!(h.query_by_label("GPU Memory Full").is_none(), "{theme:?}: nothing measured yet");
let over = crate::gpu_canvas::LayerFit { doc, needed: 3 << 30, budget: 2 << 30 };
h.state_mut().perf.gpu_layer_fit = Some(crate::gpu_canvas::LayerFit { doc: doc + 1, ..over });
h.run_steps(2);
assert!(h.query_by_label("GPU Memory Full").is_none(), "{theme:?}: another document's layers");
h.state_mut().perf.gpu_layer_fit = Some(crate::gpu_canvas::LayerFit { budget: 4 << 30, ..over });
h.run_steps(2);
assert!(h.query_by_label("GPU Memory Full").is_none(), "{theme:?}: they fit");
h.state_mut().perf.gpu_layer_fit = Some(over);
h.run_steps(2);
h.get_by_label("GPU Memory Full").click();
h.run_steps(4);
let open = h.state().ui.dialogs.iter().any(|d| d.fields.get("section") == Some(&json!("performance")));
assert!(open, "{theme:?}: Preferences › Performance opens");
}
}
#[test]
fn status_bar_updates_dimensions_after_a_ruler_preference_change() {
use egui_kittest::{Harness, kittest::Queryable};
+93 -25
View File
@@ -303,6 +303,28 @@ impl GpuCanvas {
Some((c.resident_bytes(), c.fx_cache_bytes().saturating_add(usize::try_from(c.composite_cache_bytes()).unwrap_or(usize::MAX))))
}
/// Whether `doc`'s layers fit the budget as it now stands, measured without a refresh (a GPU
/// Memory change shows in the status bar at once). `None` before the compositor exists.
pub fn measure_fit(&self, doc: &photocraft_doc::Document) -> Option<LayerFit> {
let mut r = self.rs.renderer.write();
let res = r.callback_resources.get_mut::<Resources>()?;
let budget = res.compositor_budget;
let comp = res.compositor.as_mut()?;
if let Some(b) = budget {
comp.set_memory_budget(b);
}
let fit = LayerFit { doc: doc.id.0, needed: comp.working_set(doc, doc.bounds()), budget: comp.resident_budget() };
res.layer_fit = Some(fit);
Some(fit)
}
/// Whether the layers of the last full (or large) refresh fit the GPU memory budget, and by
/// how much (`None` before the first one).
pub fn layer_fit(&self) -> Option<LayerFit> {
let r = self.rs.renderer.read();
r.callback_resources.get::<Resources>()?.layer_fit
}
/// Set the checkerboard and gamut warning colours.
pub fn set_style(&self, style: CanvasStyle) {
let mut r = self.rs.renderer.write();
@@ -471,9 +493,13 @@ impl GpuCanvas {
// compositor does it (in the background on desktop). So does a large damage rect, such
// as hiding a big layer (#4024); small edits in the view stay on the GPU.
let large = region.width() as u64 * region.height() as u64 >= DEFER_PX;
if (region == doc.bounds() || large) && !comp.fits_budget(doc, region) {
res.compositor = Some(comp);
return Err(photocraft_gpu::Unsupported(OVER_BUDGET.into()));
if region == doc.bounds() || large {
let fit = LayerFit { doc: doc.id.0, needed: comp.working_set(doc, region), budget: comp.resident_budget() };
res.layer_fit = Some(fit);
if !fit.fits() {
res.compositor = Some(comp);
return Err(photocraft_gpu::Unsupported(OVER_BUDGET.into()));
}
}
if fresh {
let Some(tex) = DocTextures::new(device, res, size, self.tile, format) else {
@@ -926,9 +952,13 @@ pub struct Perf {
/// GPU memory the compositor may hold for layer pages and effect maps (MB; see
/// [`memory_budget`]).
pub gpu_budget_mb: u64,
/// The Memory Usage allowance (bytes) `gpu_budget_mb` was computed from.
/// The Memory Usage allowance and the GPU Memory preference (bytes) `gpu_budget_mb` was
/// computed from.
#[serde(skip)]
pub gpu_budget_allowance: u64,
pub gpu_budget_allowance: (u64, u64),
/// The layer pages the last full refresh needed against the part of the budget they may
/// hold; when they don't fit, edits that redraw the whole document do it on the CPU.
pub gpu_layer_fit: Option<LayerFit>,
/// Last command run through the app and its duration (ms).
pub last_command: String,
pub command_ms: f64,
@@ -1212,22 +1242,45 @@ fn texel_to_f32(format: wgpu::TextureFormat, b: &[u8]) -> [f32; 4] {
// ---------------------------------------------------------------------------------------------
// GPU resources
/// The GPU memory a refresh's layer pages need against what they may hold (bytes).
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LayerFit {
/// The document refreshed.
pub doc: u64,
pub needed: u64,
pub budget: u64,
}
impl LayerFit {
pub fn fits(&self) -> bool {
self.needed <= self.budget
}
}
/// Floor of the compositor's memory budget: enough for a viewport's pages of a dozen layers.
pub const MIN_GPU_BUDGET: u64 = 512 << 20;
/// Why a full refresh whose layer pages don't fit [`memory_budget`] goes to the CPU compositor.
pub const OVER_BUDGET: &str = "layers exceed the GPU memory budget; full refresh on the CPU";
/// GPU memory the wgpu compositor may hold for layer pages and effect maps: what Memory Usage
/// (`allowance`, Preferences › Performance) leaves after the document's pixels and History
/// (`pixels`), at most a quarter of physical memory (`ram`; 16 GB assumed when unknown) and
/// [`vram_share`] of a discrete GPU's own memory (`vram`, from [`video_memory`]), and at least
/// [`MIN_GPU_BUDGET`]. On unified-memory machines these textures share RAM with the document, so
/// a huge document keeps its layers on the GPU only as far as memory allows; the rest is
/// uploaded per refresh as the view needs it.
pub fn memory_budget(allowance: u64, pixels: u64, ram: Option<u64>, vram: Option<u64>) -> u64 {
/// GPU memory the wgpu compositor may hold for layer pages and effect maps.
///
/// `fixed` (Preferences › Performance › GPU Memory, bytes) sets it when it isn't 0, within
/// [`vram_share`] of a discrete GPU's own memory (`vram`, from [`video_memory`]). Otherwise it is
/// Memory Usage (`allowance`) within a quarter of physical memory (`ram`; 16 GB assumed when
/// unknown) and the VRAM share. The document's pixels and History (`pixels`) come off Memory Usage
/// unless the card's own memory is known: a discrete card doesn't hold them, while integrated and
/// software adapters (and a card whose memory can't be read) share the system's. Never below
/// [`MIN_GPU_BUDGET`]. Layers beyond it redraw full refreshes on the CPU ([`OVER_BUDGET`]).
pub fn memory_budget(allowance: u64, pixels: u64, ram: Option<u64>, vram: Option<u64>, fixed: u64) -> u64 {
let card = vram.map_or(u64::MAX, vram_share);
if fixed > 0 {
return fixed.min(card).max(MIN_GPU_BUDGET);
}
let ram = ram.unwrap_or(16 << 30);
allowance.saturating_sub(pixels).min(ram / 4).min(vram.map_or(u64::MAX, vram_share)).max(MIN_GPU_BUDGET)
let charged = if vram.is_some() { 0 } else { pixels };
allowance.saturating_sub(charged).min(ram / 4).min(card).max(MIN_GPU_BUDGET)
}
/// The share of a discrete GPU's memory each of [`memory_budget`] and [`canvas_budget`] may
@@ -1412,6 +1465,9 @@ struct Resources {
/// GPU memory the compositor may hold (`None`: its default), and the document area the
/// view shows; applied before every composite.
compositor_budget: Option<u64>,
/// The layer pages the last full (or large) refresh needed and the budget they had to fit
/// (bytes): when they don't fit, full refreshes go to the CPU ([`OVER_BUDGET`]).
layer_fit: Option<LayerFit>,
compositor_cache_budget: Option<u64>,
compositor_focus: Option<photocraft_geom::Rect>,
/// GPU bytes one document's display texture set may take (see [`canvas_budget`]).
@@ -1679,6 +1735,7 @@ impl Resources {
compositor_failed: None,
health: photocraft_gpu::DeviceHealth::new(),
compositor_budget: None,
layer_fit: None,
compositor_cache_budget: None,
compositor_focus: None,
canvas_budget: std::sync::Arc::new(std::sync::atomic::AtomicU64::new(canvas_budget(physical_memory(), None))),
@@ -2337,13 +2394,23 @@ mod tests {
#[test]
fn gpu_budget_follows_memory_usage_and_ram() {
const G: u64 = 1 << 30;
// What Memory Usage leaves after the document, within a quarter of RAM.
assert_eq!(memory_budget(8 * G, 3 * G, Some(48 * G), None), 5 * G);
assert_eq!(memory_budget(8 * G, 3 * G, Some(16 * G), None), 4 * G);
assert_eq!(memory_budget(64 * G, 3 * G, Some(16 * G), None), 4 * G);
// Card memory unknown (integrated, software, or unreadable): what Memory Usage leaves
// after the document, within a quarter of RAM.
assert_eq!(memory_budget(8 * G, 3 * G, Some(48 * G), None, 0), 5 * G);
assert_eq!(memory_budget(8 * G, 3 * G, Some(16 * G), None, 0), 4 * G);
assert_eq!(memory_budget(64 * G, 3 * G, Some(16 * G), None, 0), 4 * G);
// Never below the floor, even with nothing left; 16 GB assumed when RAM is unknown.
assert_eq!(memory_budget(8 * G, 10 * G, Some(48 * G), None), MIN_GPU_BUDGET);
assert_eq!(memory_budget(64 * G, 0, None, None), 4 * G);
assert_eq!(memory_budget(8 * G, 10 * G, Some(48 * G), None, 0), MIN_GPU_BUDGET);
assert_eq!(memory_budget(64 * G, 0, None, None, 0), 4 * G);
// A card's own memory, known, doesn't hold the document's pixels: 10 GB of layers no
// longer squeeze the budget, which stays within 3/8 of the card (#4536).
assert_eq!(memory_budget(8 * G, 10 * G, Some(32 * G), Some(32 * G), 0), 8 * G);
assert_eq!(memory_budget(8 * G, 10 * G, Some(32 * G), Some(16 * G), 0), 6 * G);
assert_eq!(memory_budget(8 * G, 10 * G, Some(16 * G), Some(32 * G), 0), 4 * G);
// GPU Memory set: that much, within the card's share, above the floor.
assert_eq!(memory_budget(8 * G, 10 * G, Some(16 * G), None, 12 * G), 12 * G);
assert_eq!(memory_budget(8 * G, 10 * G, Some(16 * G), Some(16 * G), 12 * G), 6 * G);
assert_eq!(memory_budget(8 * G, 0, None, Some(32 * G), 1 << 20), MIN_GPU_BUDGET);
assert!(physical_memory().is_none_or(|b| b >= 256 << 20));
}
@@ -2352,13 +2419,14 @@ mod tests {
fn gpu_budgets_fit_a_discrete_gpus_own_memory() {
const G: u64 = 1 << 30;
let (ram, vram) = (Some(64 * G), Some(8 * G));
assert_eq!(memory_budget(64 * G, 3 * G, ram, vram), 3 * G);
assert_eq!(memory_budget(64 * G, 3 * G, ram, vram, 0), 3 * G);
assert_eq!(canvas_budget(ram, vram), 3 * G);
assert!(memory_budget(64 * G, 0, ram, vram) + canvas_budget(ram, vram) <= 6 * G, "a quarter of the card stays free");
// A card larger than a quarter of RAM changes nothing; a tiny one keeps the floor.
assert_eq!(memory_budget(8 * G, 3 * G, Some(48 * G), Some(24 * G)), 5 * G);
assert!(memory_budget(64 * G, 0, ram, vram, 0) + canvas_budget(ram, vram) <= 6 * G, "a quarter of the card stays free");
// A card larger than a quarter of RAM caps nothing (its own memory isn't charged for the
// document's 3 GB); a tiny one keeps the floor.
assert_eq!(memory_budget(8 * G, 3 * G, Some(48 * G), Some(24 * G), 0), 8 * G);
assert_eq!(canvas_budget(Some(16 * G), Some(24 * G)), 4 * G);
assert_eq!(memory_budget(64 * G, 0, ram, Some(G)), MIN_GPU_BUDGET);
assert_eq!(memory_budget(64 * G, 0, ram, Some(G), 0), MIN_GPU_BUDGET);
assert_eq!(canvas_budget(ram, Some(G)), MIN_GPU_BUDGET);
}
+9 -1
View File
@@ -2442,7 +2442,6 @@ cameraRaw Color Barvy
Redrawing Překreslování
This redraw took {seconds} s on the CPU. Toto překreslení na CPU trvalo {seconds} s.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Úpravy, které mění celý dokument, například režim prolnutí, krytí nebo viditelnost vrstvy, jej překreslí celý.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Vrstvy se nevejdou do rozpočtu paměti GPU. Zvýšením hodnoty Využití paměti v Předvolbách › Výkon se rozpočet zvětší, nejvýše na čtvrtinu paměti tohoto počítače.
The GPU compositor wasn't used: {reason} Kompozitor GPU nebyl použit: {reason}
fontWeight Thin Jemná
fontWeight ExtraLight Extrajemná
@@ -3808,3 +3807,12 @@ navigator Zoom Zvětšení
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Volná transformace se stále použije; zkuste to znovu, až skončí.
The transform couldn't be applied. Transformaci nelze použít.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Vrstvy potřebují {needed} paměti GPU; rozpočet jim ponechává {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. V Předvolbách › Výkon nastavte Paměť GPU na tolik, kolik vaše grafická karta pojme (Automaticky se řídí Využitím paměti, nejvýše čtvrtinou paměti tohoto počítače). Dokud se nevejdou, stavový řádek ukazuje Paměť GPU je plná.
GPU Memory Full Paměť GPU je plná
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Vrstvy potřebují {needed} paměti GPU a mohou zabrat {budget}, takže úpravy, které překreslují celý dokument, to dělají na CPU. Kliknutím nastavíte Paměť GPU.
GPU memory budget: {budget} Rozpočet paměti GPU: {budget}
This document's layers: {needed} of {budget} for layers Vrstvy tohoto dokumentu: {needed} z {budget} pro vrstvy
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Vrstvy tohoto dokumentu potřebují {needed}, ale mohou zabrat {budget}: překreslení celého dokumentu probíhá na CPU
GPU Memory (MB, 0 = Automatic) Paměť GPU (MB, 0 = Automaticky)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9 -1
View File
@@ -2481,7 +2481,6 @@ layerLabel No Color Keine Farbe
Redrawing Neuzeichnen
This redraw took {seconds} s on the CPU. Dieses Neuzeichnen auf der CPU dauerte {seconds} s.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Änderungen, die das ganze Dokument betreffen, etwa Füllmethode, Deckkraft oder Sichtbarkeit einer Ebene, zeichnen es vollständig neu.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Die Ebenen passen nicht in das GPU-Speicherbudget. Eine höhere Speichernutzung unter Voreinstellungen › Leistung erhöht das Budget, bis zu einem Viertel des Arbeitsspeichers dieses Computers.
The GPU compositor wasn't used: {reason} Der GPU-Compositor wurde nicht verwendet: {reason}
cameraRaw Light Licht
fontWeight Thin Haarfein
@@ -3202,3 +3201,12 @@ curves Smooth Glätten
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Frei transformieren wird noch angewendet; versuchen Sie es erneut, wenn es fertig ist.
The transform couldn't be applied. Die Transformation konnte nicht angewendet werden.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Die Ebenen brauchen {needed} GPU-Speicher; das Budget lässt ihnen {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Stellen Sie unter Voreinstellungen › Leistung den GPU-Speicher auf das ein, was Ihre Grafikkarte fassen kann (Automatisch folgt der Speichernutzung, bis zu einem Viertel des Arbeitsspeichers dieses Computers). Solange sie nicht hineinpassen, zeigt die Statusleiste GPU-Speicher voll.
GPU Memory Full GPU-Speicher voll
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Die Ebenen brauchen {needed} GPU-Speicher und dürfen {budget} belegen, daher zeichnen Änderungen, die das ganze Dokument neu zeichnen, auf der CPU. Klicken, um den GPU-Speicher einzustellen.
GPU memory budget: {budget} GPU-Speicherbudget: {budget}
This document's layers: {needed} of {budget} for layers Ebenen dieses Dokuments: {needed} von {budget} für Ebenen
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Die Ebenen dieses Dokuments brauchen {needed}, dürfen aber {budget} belegen: Das ganze Dokument wird auf der CPU neu gezeichnet
GPU Memory (MB, 0 = Automatic) GPU-Speicher (MB, 0 = Automatisch)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9 -1
View File
@@ -3439,7 +3439,6 @@ cameraRaw Yellow Κίτρινο
HSB/HSL HSB/HSL
Import Swatches… Εισαγωγή δειγμάτων χρωμάτων…
Impressionist Ιμπρεσιονιστικό
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Τα επίπεδά του δεν χωρούν στο όριο μνήμης της GPU. Αυξάνοντας τη Χρήση μνήμης στις Προτιμήσεις › Επιδόσεις αυξάνεται το όριο, έως το ένα τέταρτο της μνήμης αυτού του υπολογιστή.
Knockout Διάτρηση
Large document: redrawing on the CPU Μεγάλο έγγραφο: επανασχεδίαση στη CPU
Redrawing Επανασχεδίαση
@@ -3900,3 +3899,12 @@ curves Smooth Εξομάλυνση
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Ο Ελεύθερος μετασχηματισμός εφαρμόζεται ακόμη· δοκιμάστε ξανά όταν ολοκληρωθεί.
The transform couldn't be applied. Δεν ήταν δυνατή η εφαρμογή του μετασχηματισμού.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Τα επίπεδά του χρειάζονται {needed} μνήμης GPU· το όριο τους αφήνει {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Ορίστε τη Μνήμη GPU στις Προτιμήσεις › Επιδόσεις σε όσο χωράει η κάρτα γραφικών σας (το Αυτόματο ακολουθεί τη Χρήση μνήμης, έως το ένα τέταρτο της μνήμης αυτού του υπολογιστή). Όσο δεν χωρούν, η γραμμή κατάστασης δείχνει Η μνήμη GPU είναι πλήρης.
GPU Memory Full Η μνήμη GPU είναι πλήρης
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Τα επίπεδα χρειάζονται {needed} μνήμης GPU και μπορούν να καταλάβουν {budget}, οπότε οι αλλαγές που ξανασχεδιάζουν όλο το έγγραφο το κάνουν στη CPU. Κάντε κλικ για να ορίσετε τη Μνήμη GPU.
GPU memory budget: {budget} Όριο μνήμης GPU: {budget}
This document's layers: {needed} of {budget} for layers Επίπεδα αυτού του εγγράφου: {needed} από {budget} για επίπεδα
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Τα επίπεδα αυτού του εγγράφου χρειάζονται {needed} αλλά μπορούν να καταλάβουν {budget}: η επανασχεδίαση όλου του εγγράφου γίνεται στη CPU
GPU Memory (MB, 0 = Automatic) Μνήμη GPU (MB, 0 = Αυτόματο)
Can't render this file because it contains an unexpected character in line 1030 and column 18.
+9 -1
View File
@@ -2512,7 +2512,6 @@ cameraRaw Amount Cantidad
Redrawing Redibujando
This redraw took {seconds} s on the CPU. Este redibujado en la CPU tardó {seconds} s.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Las ediciones que cambian todo el documento, como el modo de fusión, la opacidad o la visibilidad de una capa, lo redibujan por completo.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Las capas no caben en el presupuesto de memoria de la GPU. Aumentar Uso de memoria en Preferencias › Rendimiento amplía el presupuesto, hasta una cuarta parte de la memoria de este equipo.
The GPU compositor wasn't used: {reason} No se usó el compositor de GPU: {reason}
fontWeight Thin Ultrafina
fontWeight ExtraLight Extrafina
@@ -4162,3 +4161,12 @@ navigator Zoom Zoom
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Transformación libre aún se está aplicando; inténtelo de nuevo cuando termine.
The transform couldn't be applied. No se pudo aplicar la transformación.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Sus capas necesitan {needed} de memoria de GPU; el presupuesto les deja {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Ajuste Memoria de GPU en Preferencias › Rendimiento a lo que pueda alojar su tarjeta gráfica (Automático sigue Uso de memoria, hasta una cuarta parte de la memoria de este equipo). Mientras no quepan, la barra de estado muestra Memoria de GPU llena.
GPU Memory Full Memoria de GPU llena
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Las capas necesitan {needed} de memoria de GPU y pueden ocupar {budget}, así que las ediciones que redibujan todo el documento lo hacen en la CPU. Haga clic para ajustar Memoria de GPU.
GPU memory budget: {budget} Presupuesto de memoria de GPU: {budget}
This document's layers: {needed} of {budget} for layers Capas de este documento: {needed} de {budget} para capas
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Las capas de este documento necesitan {needed} pero pueden ocupar {budget}: los redibujados de todo el documento usan la CPU
GPU Memory (MB, 0 = Automatic) Memoria de GPU (MB, 0 = Automático)
Can't render this file because it contains an unexpected character in line 4 and column 47.
+9 -1
View File
@@ -2862,7 +2862,6 @@ cameraRaw Blending Fusion
Redrawing Redessin
This redraw took {seconds} s on the CPU. Ce redessin sur le CPU a pris {seconds} s.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Les modifications qui touchent tout le document, comme le mode de fusion, l'opacité ou la visibilité d'un calque, le redessinent entièrement.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Les calques dépassent le budget de mémoire GPU. Augmenter Utilisation de la mémoire dans Préférences › Performances relève ce budget, jusqu'au quart de la mémoire de cet ordinateur.
The GPU compositor wasn't used: {reason} Le compositeur GPU n'a pas été utilisé : {reason}
fontWeight Thin Ultrafin
fontWeight ExtraLight Extrafin
@@ -3205,3 +3204,12 @@ curves Smooth Lisser
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. La transformation manuelle est encore en cours d'application ; réessayez quand elle sera terminée.
The transform couldn't be applied. Impossible d'appliquer la transformation.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Ses calques ont besoin de {needed} de mémoire GPU ; le budget leur laisse {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Réglez Mémoire GPU dans Préférences › Performances sur ce que votre carte graphique peut contenir (Automatique suit Utilisation de la mémoire, jusqu'au quart de la mémoire de cet ordinateur). Tant qu'ils ne tiennent pas, la barre d'état affiche Mémoire GPU pleine.
GPU Memory Full Mémoire GPU pleine
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Les calques ont besoin de {needed} de mémoire GPU et peuvent en occuper {budget} : les modifications qui redessinent tout le document le font sur le CPU. Cliquez pour régler Mémoire GPU.
GPU memory budget: {budget} Budget de mémoire GPU : {budget}
This document's layers: {needed} of {budget} for layers Calques de ce document : {needed} sur {budget} pour les calques
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Les calques de ce document ont besoin de {needed} mais peuvent occuper {budget} : le document entier se redessine sur le CPU
GPU Memory (MB, 0 = Automatic) Mémoire GPU (Mo, 0 = Automatique)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9 -1
View File
@@ -3312,7 +3312,6 @@ cameraRaw Yellow Sárga
Interpret Footage Videoanyag értelmezése
Interval Intervallum
Invalid {mode} profile Érvénytelen profil ({mode})
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. A dokumentum rétegei nem férnek el a GPU memóriakeretében. Ha a Beállítások › Teljesítmény alatt növeled a memóriahasználatot, a keret is nő, legfeljebb a számítógép memóriájának negyedéig.
Join us on Discord Csatlakozz hozzánk a Discordon
Keep Using CPU Marad a CPU
Kernel Szűrőmag
@@ -4119,3 +4118,12 @@ cameraRaw Yellow Sárga
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. A szabad alakítás alkalmazása még folyamatban van; próbáld újra, ha befejeződött.
The transform couldn't be applied. Az átalakítás nem alkalmazható.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. A rétegeknek {needed} GPU-memória kell; a keret {budget} hagy nekik.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. A Beállítások › Teljesítmény alatt állítsd a GPU-memóriát arra, amennyit a videokártyád elbír (az Automatikus a memóriahasználatot követi, legfeljebb a számítógép memóriájának negyedéig). Amíg nem férnek el, az állapotsor a GPU-memória megtelt üzenetet mutatja.
GPU Memory Full GPU-memória megtelt
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. A rétegeknek {needed} GPU-memória kell, és {budget} foglalhatnak, ezért a teljes dokumentumot újrarajzoló szerkesztések a CPU-n futnak. Kattints a GPU-memória beállításához.
GPU memory budget: {budget} GPU-memóriakeret: {budget}
This document's layers: {needed} of {budget} for layers A dokumentum rétegei: {needed} / {budget} a rétegeknek
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU A dokumentum rétegeinek {needed} kell, de {budget} foglalhatnak: a teljes dokumentum újrarajzolása a CPU-n fut
GPU Memory (MB, 0 = Automatic) GPU-memória (MB, 0 = Automatikus)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9 -1
View File
@@ -2849,7 +2849,6 @@ cameraRaw Blending Pembauran
Redrawing Menggambar ulang
This redraw took {seconds} s on the CPU. Penggambaran ulang di CPU ini memakan waktu {seconds} dtk.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Suntingan yang mengubah seluruh dokumen, seperti mode campuran, opasitas, atau visibilitas layer, menggambar ulang semuanya.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Layer tidak muat dalam anggaran memori GPU. Menaikkan Pemakaian memori di Preferensi › Performa menaikkan anggaran, hingga seperempat memori komputer ini.
The GPU compositor wasn't used: {reason} Kompositor GPU tidak digunakan: {reason}
fontWeight Thin Sangat Tipis
fontWeight ExtraLight Ekstra Tipis
@@ -3192,3 +3191,12 @@ curves Smooth Haluskan
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Transformasi Bebas masih diterapkan; coba lagi setelah selesai.
The transform couldn't be applied. Transformasi tidak dapat diterapkan.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Layer-nya membutuhkan {needed} memori GPU; anggaran menyisakan {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Atur Memori GPU di Preferensi › Performa sesuai kapasitas kartu grafis Anda (Otomatis mengikuti Pemakaian memori, hingga seperempat memori komputer ini). Selama belum muat, bilah status menampilkan Memori GPU Penuh.
GPU Memory Full Memori GPU Penuh
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Layer membutuhkan {needed} memori GPU dan boleh memakai {budget}, sehingga suntingan yang menggambar ulang seluruh dokumen melakukannya di CPU. Klik untuk mengatur Memori GPU.
GPU memory budget: {budget} Anggaran memori GPU: {budget}
This document's layers: {needed} of {budget} for layers Layer dokumen ini: {needed} dari {budget} untuk layer
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Layer dokumen ini membutuhkan {needed} tetapi boleh memakai {budget}: penggambaran ulang seluruh dokumen memakai CPU
GPU Memory (MB, 0 = Automatic) Memori GPU (MB, 0 = Otomatis)
Can't render this file because it contains an unexpected character in line 4 and column 47.
+9 -1
View File
@@ -2512,7 +2512,6 @@ cameraRaw Amount Quantità
Redrawing Ridisegno
This redraw took {seconds} s on the CPU. Questo ridisegno sulla CPU ha richiesto {seconds} s.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Le modifiche che cambiano tutto il documento, come metodo di fusione, opacità o visibilità di un livello, lo ridisegnano per intero.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. I livelli non rientrano nel budget di memoria della GPU. Aumentare Uso memoria in Preferenze › Prestazioni alza il budget, fino a un quarto della memoria di questo computer.
The GPU compositor wasn't used: {reason} Il compositore GPU non è stato usato: {reason}
fontWeight Thin Sottile
fontWeight ExtraLight Extraleggero
@@ -4321,3 +4320,12 @@ shape Appearance Aspetto
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Trasformazione libera è ancora in corso di applicazione; riprova quando è terminata.
The transform couldn't be applied. Impossibile applicare la trasformazione.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. I livelli richiedono {needed} di memoria GPU; il budget ne lascia {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Imposta Memoria GPU in Preferenze › Prestazioni su quanto può contenere la tua scheda grafica (Automatico segue Uso memoria, fino a un quarto della memoria di questo computer). Finché non ci stanno, la barra di stato mostra Memoria GPU piena.
GPU Memory Full Memoria GPU piena
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. I livelli richiedono {needed} di memoria GPU e possono occuparne {budget}, quindi le modifiche che ridisegnano tutto il documento lo fanno sulla CPU. Fai clic per impostare Memoria GPU.
GPU memory budget: {budget} Budget di memoria GPU: {budget}
This document's layers: {needed} of {budget} for layers Livelli di questo documento: {needed} su {budget} per i livelli
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU I livelli di questo documento richiedono {needed} ma possono occupare {budget}: i ridisegni dell'intero documento usano la CPU
GPU Memory (MB, 0 = Automatic) Memoria GPU (MB, 0 = Automatico)
Can't render this file because it contains an unexpected character in line 2653 and column 53.
+9 -1
View File
@@ -2413,7 +2413,6 @@ cameraRaw Color カラー
Redrawing 再描画中
This redraw took {seconds} s on the CPU. この再描画は CPU で {seconds} 秒かかりました。
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. レイヤーの描画モード、不透明度、表示/非表示など、ドキュメント全体に関わる編集では全体が再描画されます。
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. レイヤーが GPU メモリの予算に収まりません。環境設定 › パフォーマンスのメモリ使用量を増やすと、このコンピューターのメモリの4分の1まで予算が増えます。
The GPU compositor wasn't used: {reason} GPU コンポジターは使用されませんでした: {reason}
fontWeight Thin 極細
fontWeight ExtraLight 特細
@@ -3876,3 +3875,12 @@ curves Smooth スムーズ
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. 自由変形を適用中です。完了してからもう一度お試しください。
The transform couldn't be applied. 変形を適用できませんでした。
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. レイヤーには {needed} の GPU メモリが必要ですが、予算で使えるのは {budget} です。
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. 環境設定 › パフォーマンスの GPU メモリを、グラフィックカードが保持できる量に設定してください(自動はメモリ使用量に従い、このコンピューターのメモリの4分の1までです)。収まらない間、ステータスバーに「GPU メモリ不足」と表示されます。
GPU Memory Full GPU メモリ不足
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. レイヤーには {needed} の GPU メモリが必要ですが、使えるのは {budget} のため、ドキュメント全体を再描画する編集は CPU で行われます。クリックして GPU メモリを設定します。
GPU memory budget: {budget} GPU メモリ予算: {budget}
This document's layers: {needed} of {budget} for layers このドキュメントのレイヤー: レイヤー用 {budget} のうち {needed}
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU このドキュメントのレイヤーには {needed} が必要ですが、使えるのは {budget} です: ドキュメント全体の再描画は CPU で行われます
GPU Memory (MB, 0 = Automatic) GPU メモリ(MB、0 = 自動)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9 -1
View File
@@ -3022,7 +3022,6 @@ cameraRaw Color 색상
Redrawing 다시 그리는 중
This redraw took {seconds} s on the CPU. 이번 다시 그리기는 CPU에서 {seconds}초 걸렸습니다.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. 레이어의 혼합 모드, 불투명도, 표시 여부처럼 문서 전체를 바꾸는 편집은 문서 전체를 다시 그립니다.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. 레이어가 GPU 메모리 예산에 맞지 않습니다. 환경 설정 › 성능에서 메모리 사용량을 늘리면 이 컴퓨터 메모리의 4분의 1까지 예산이 늘어납니다.
The GPU compositor wasn't used: {reason} GPU 합성기를 사용하지 않았습니다: {reason}
fontWeight Thin 아주 가늘게
fontWeight ExtraLight 더 가늘게
@@ -3378,3 +3377,12 @@ curves Smooth 매끄럽게
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. 자유 변형을 아직 적용하는 중입니다. 완료된 후 다시 시도하세요.
The transform couldn't be applied. 변형을 적용할 수 없습니다.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. 레이어에 GPU 메모리 {needed}가 필요하지만 예산은 {budget}만 남겨 둡니다.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. 환경 설정 › 성능에서 GPU 메모리를 그래픽 카드가 감당할 수 있는 양으로 설정하세요(자동은 메모리 사용량을 따르며 이 컴퓨터 메모리의 4분의 1까지입니다). 맞지 않는 동안 상태 표시줄에 GPU 메모리 부족이 표시됩니다.
GPU Memory Full GPU 메모리 부족
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. 레이어에 GPU 메모리 {needed}가 필요하지만 {budget}만 사용할 수 있어 문서 전체를 다시 그리는 편집은 CPU에서 처리됩니다. 클릭하여 GPU 메모리를 설정합니다.
GPU memory budget: {budget} GPU 메모리 예산: {budget}
This document's layers: {needed} of {budget} for layers 이 문서의 레이어: 레이어용 {budget} 중 {needed}
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU 이 문서의 레이어에 {needed}가 필요하지만 {budget}만 사용할 수 있습니다: 문서 전체 다시 그리기는 CPU를 사용합니다
GPU Memory (MB, 0 = Automatic) GPU 메모리(MB, 0 = 자동)
Can't render this file because it contains an unexpected character in line 3165 and column 53.
+9 -1
View File
@@ -2441,7 +2441,6 @@ layerLabel No Color Geen kleur
Redrawing Opnieuw tekenen
This redraw took {seconds} s on the CPU. Opnieuw tekenen duurde {seconds} s op de CPU.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Bewerkingen die het hele document veranderen, zoals de overvloeimodus, dekking of zichtbaarheid van een laag, tekenen alles opnieuw.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. De lagen passen niet binnen het GPU-geheugenbudget. Door Geheugengebruik te verhogen in Voorkeuren › Prestaties wordt het budget groter, tot een kwart van het geheugen van deze computer.
The GPU compositor wasn't used: {reason} De GPU-compositor is niet gebruikt: {reason}
cameraRaw Light Licht
fontWeight Thin Dun
@@ -3960,3 +3959,12 @@ curves Smooth Vloeiend maken
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Vrije transformatie wordt nog toegepast; probeer het opnieuw als die klaar is.
The transform couldn't be applied. De transformatie kon niet worden toegepast.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. De lagen hebben {needed} GPU-geheugen nodig; het budget laat ze {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Stel GPU-geheugen in bij Voorkeuren › Prestaties op wat uw videokaart aankan (Automatisch volgt Geheugengebruik, tot een kwart van het geheugen van deze computer). Zolang ze niet passen, toont de statusbalk GPU-geheugen vol.
GPU Memory Full GPU-geheugen vol
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. De lagen hebben {needed} GPU-geheugen nodig en mogen {budget} gebruiken, dus bewerkingen die het hele document opnieuw tekenen doen dat op de CPU. Klik om GPU-geheugen in te stellen.
GPU memory budget: {budget} GPU-geheugenbudget: {budget}
This document's layers: {needed} of {budget} for layers Lagen van dit document: {needed} van {budget} voor lagen
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU De lagen van dit document hebben {needed} nodig maar mogen {budget} gebruiken: het hele document wordt op de CPU opnieuw getekend
GPU Memory (MB, 0 = Automatic) GPU-geheugen (MB, 0 = Automatisch)
Can't render this file because it contains an unexpected character in line 8 and column 34.
+9 -1
View File
@@ -3471,7 +3471,6 @@ cameraRaw Roughness Chropowatość
Redrawing Odświeżanie
This redraw took {seconds} s on the CPU. To odświeżenie na CPU trwało {seconds} s.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Zmiany obejmujące cały dokument, takie jak tryb mieszania, krycie lub widoczność warstwy, odświeżają go w całości.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Warstwy nie mieszczą się w budżecie pamięci GPU. Zwiększenie wartości Użycie pamięci w Preferencje › Wydajność zwiększa budżet, maksymalnie do jednej czwartej pamięci tego komputera.
The GPU compositor wasn't used: {reason} Kompozytor GPU nie został użyty: {reason}
# Pattern Stamp tool
Pattern Stamp Tool Narzędzie Pieczątka wzoru
@@ -3798,3 +3797,12 @@ curves Smooth Wygładź
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Przekształcanie swobodne jest nadal stosowane; spróbuj ponownie, gdy się zakończy.
The transform couldn't be applied. Nie można zastosować przekształcenia.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Warstwy potrzebują {needed} pamięci GPU; budżet zostawia im {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Ustaw Pamięć GPU w Preferencje › Wydajność na tyle, ile zmieści Twoja karta graficzna (Automatycznie podąża za Użyciem pamięci, maksymalnie do jednej czwartej pamięci tego komputera). Dopóki się nie mieszczą, pasek stanu pokazuje Pamięć GPU pełna.
GPU Memory Full Pamięć GPU pełna
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Warstwy potrzebują {needed} pamięci GPU i mogą zająć {budget}, więc edycje, które odświeżają cały dokument, robią to na CPU. Kliknij, aby ustawić Pamięć GPU.
GPU memory budget: {budget} Budżet pamięci GPU: {budget}
This document's layers: {needed} of {budget} for layers Warstwy tego dokumentu: {needed} z {budget} na warstwy
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Warstwy tego dokumentu potrzebują {needed}, ale mogą zająć {budget}: odświeżanie całego dokumentu używa CPU
GPU Memory (MB, 0 = Automatic) Pamięć GPU (MB, 0 = Automatycznie)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9 -1
View File
@@ -2865,7 +2865,6 @@ cameraRaw Whites Brancos
Redrawing Redesenhando
This redraw took {seconds} s on the CPU. Este redesenho na CPU levou {seconds} s.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Edições que mudam o documento inteiro, como modo de mesclagem, opacidade ou visibilidade de uma camada, redesenham tudo.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. As camadas não cabem no orçamento de memória da GPU. Aumentar Uso de memória em Preferências › Desempenho eleva o orçamento, até um quarto da memória deste computador.
The GPU compositor wasn't used: {reason} O compositor de GPU não foi usado: {reason}
fontWeight Thin Fina
fontWeight ExtraLight Extrafina
@@ -3990,3 +3989,12 @@ layerLabel No Color Sem cor
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. A Transformação livre ainda está sendo aplicada; tente novamente quando terminar.
The transform couldn't be applied. Não foi possível aplicar a transformação.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. As camadas precisam de {needed} de memória da GPU; o orçamento lhes deixa {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Ajuste Memória da GPU em Preferências › Desempenho para o que sua placa de vídeo comporta (Automático segue Uso de memória, até um quarto da memória deste computador). Enquanto não couberem, a barra de status mostra Memória da GPU cheia.
GPU Memory Full Memória da GPU cheia
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. As camadas precisam de {needed} de memória da GPU e podem ocupar {budget}, então as edições que redesenham o documento inteiro fazem isso na CPU. Clique para ajustar Memória da GPU.
GPU memory budget: {budget} Orçamento de memória da GPU: {budget}
This document's layers: {needed} of {budget} for layers Camadas deste documento: {needed} de {budget} para camadas
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU As camadas deste documento precisam de {needed} mas podem ocupar {budget}: o documento inteiro é redesenhado na CPU
GPU Memory (MB, 0 = Automatic) Memória da GPU (MB, 0 = Automático)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9 -1
View File
@@ -2712,7 +2712,6 @@ cameraRaw Roughness Неровность
Redrawing Перерисовка
This redraw took {seconds} s on the CPU. Эта перерисовка на CPU заняла {seconds} с.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Правки, затрагивающие весь документ, например режим наложения, непрозрачность или видимость слоя, перерисовывают его целиком.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Слои не помещаются в бюджет памяти GPU. Увеличение параметра «Память» в разделе Настройки › Производительность повышает бюджет, но не больше четверти памяти этого компьютера.
The GPU compositor wasn't used: {reason} Компоновщик GPU не использовался: {reason}
fontWeight Thin Тонкий
fontWeight ExtraLight Сверхтонкий
@@ -3170,3 +3169,12 @@ curves Smooth Сгладить
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Свободное трансформирование ещё применяется; повторите попытку, когда оно завершится.
The transform couldn't be applied. Не удалось применить трансформирование.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Слоям нужно {needed} памяти GPU; бюджет оставляет им {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Задайте «Память GPU» в разделе Настройки › Производительность по объёму, который вмещает ваша видеокарта («Автоматически» следует параметру «Память», но не больше четверти памяти этого компьютера). Пока слои не помещаются, в строке состояния показано «Память GPU заполнена».
GPU Memory Full Память GPU заполнена
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Слоям нужно {needed} памяти GPU, а занимать они могут {budget}, поэтому правки, перерисовывающие весь документ, выполняются на CPU. Нажмите, чтобы задать «Память GPU».
GPU memory budget: {budget} Бюджет памяти GPU: {budget}
This document's layers: {needed} of {budget} for layers Слои этого документа: {needed} из {budget} для слоёв
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Слоям этого документа нужно {needed}, но занимать они могут {budget}: весь документ перерисовывается на CPU
GPU Memory (MB, 0 = Automatic) Память GPU (МБ, 0 = автоматически)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9 -1
View File
@@ -2836,7 +2836,6 @@ cameraRaw Blending Stapanje
Large document: redrawing on the CPU Veliki dokument: ponovno iscrtavanje procesorom
This redraw took {seconds} s on the CPU. Ovo iscrtavanje je trajalo {seconds} s na procesoru.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Izmene koje menjaju ceo dokument, kao što su režim stapanja, neprozirnost ili vidljivost sloja, ponovo iscrtavaju ceo dokument.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Njegovi slojevi ne staju u budžet GPU memorije. Povećanje vrednosti Korišćenje memorije u Podešavanja › Performanse povećava budžet, do četvrtine memorije ovog računara.
The GPU compositor wasn't used: {reason} GPU kompozitor nije korišćen: {reason}
fontWeight Thin Tanko
fontWeight ExtraLight Ekstra lagano
@@ -4273,3 +4272,12 @@ shape Appearance Izgled
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Slobodna transformacija se još primenjuje; pokušajte ponovo kad se završi.
The transform couldn't be applied. Transformacija nije mogla da se primeni.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Njegovim slojevima treba {needed} GPU memorije; budžet im ostavlja {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Podesite GPU memoriju u Podešavanja › Performanse na onoliko koliko vaša grafička kartica može da primi (Automatski prati Korišćenje memorije, do četvrtine memorije ovog računara). Dok ne staju, statusna traka prikazuje GPU memorija je puna.
GPU Memory Full GPU memorija je puna
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Slojevima treba {needed} GPU memorije, a smeju da zauzmu {budget}, pa izmene koje ponovo iscrtavaju ceo dokument to rade na CPU-u. Kliknite da podesite GPU memoriju.
GPU memory budget: {budget} Budžet GPU memorije: {budget}
This document's layers: {needed} of {budget} for layers Slojevi ovog dokumenta: {needed} od {budget} za slojeve
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Slojevima ovog dokumenta treba {needed}, a smeju da zauzmu {budget}: ceo dokument se ponovo iscrtava na CPU-u
GPU Memory (MB, 0 = Automatic) GPU memorija (MB, 0 = Automatski)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9 -1
View File
@@ -2410,7 +2410,6 @@ layerLabel No Color Renk Yok
Large document: redrawing on the CPU Büyük belge: CPU'da yeniden çizim
This redraw took {seconds} s on the CPU. Bu yeniden çizim CPU'da {seconds} saniye sürdü.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Bir katmanın karışım modu, opaklığı veya görünürlüğü gibi belgenin tamamını değiştiren düzenlemeler, belgenin tamamını yeniden çizer.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Katmanları GPU bellek bütçesine uymuyor. Tercihler'de Bellek kullanımını artırma › Performans, bütçeyi bu bilgisayarın belleğinin dörtte birine kadar artırır.
The GPU compositor wasn't used: {reason} GPU dizgicisi kullanılmadı: {reason}
cameraRaw Light Açık Tonlar
fontWeight Thin İnce
@@ -3930,3 +3929,12 @@ cameraData Lens Lens
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Serbest Dönüştürme hâlâ uygulanıyor; bittiğinde yeniden deneyin.
The transform couldn't be applied. Dönüştürme uygulanamadı.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Katmanlarının {needed} GPU belleğine ihtiyacı var; bütçe onlara {budget} bırakıyor.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Tercihler › Performans içindeki GPU Belleği'ni ekran kartınızın kaldırabileceği miktara ayarlayın (Otomatik, Bellek kullanımını izler; en fazla bu bilgisayarın belleğinin dörtte biri). Sığmadıkları sürece durum çubuğu GPU Belleği Dolu gösterir.
GPU Memory Full GPU Belleği Dolu
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Katmanların {needed} GPU belleğine ihtiyacı var ve en fazla {budget} kullanabilirler; bu yüzden tüm belgeyi yeniden çizen düzenlemeler bunu CPU'da yapar. GPU Belleği'ni ayarlamak için tıklayın.
GPU memory budget: {budget} GPU bellek bütçesi: {budget}
This document's layers: {needed} of {budget} for layers Bu belgenin katmanları: katmanlar için {budget} içinden {needed}
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Bu belgenin katmanlarının {needed} belleğe ihtiyacı var ama en fazla {budget} kullanabilirler: tüm belgenin yeniden çizimi CPU'yu kullanır
GPU Memory (MB, 0 = Automatic) GPU Belleği (MB, 0 = Otomatik)
Can't render this file because it contains an unexpected character in line 8 and column 34.
+9 -1
View File
@@ -2679,7 +2679,6 @@ cameraRaw Roughness Шорсткість
Redrawing Перемальовування
This redraw took {seconds} s on the CPU. Це перемальовування на CPU тривало {seconds} с.
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. Зміни, що впливають на весь документ, як-от режим накладання, непрозорість чи видимість шару, перемальовують його повністю.
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Його шари не вміщуються в бюджет пам'яті GPU. Збільшення використання пам'яті в Налаштування › Продуктивність підвищує бюджет до чверті пам'яті цього комп'ютера.
The GPU compositor wasn't used: {reason} Компонувальник GPU не використовувався: {reason}
fontWeight Thin Тонкий
fontWeight ExtraLight Екстралегкий
@@ -3899,3 +3898,12 @@ curves Smooth Згладити
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Вільне трансформування ще застосовується; спробуйте знову, коли воно завершиться.
The transform couldn't be applied. Не вдалося застосувати трансформування.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Його шарам потрібно {needed} пам'яті GPU; бюджет залишає їм {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Задайте «Пам'ять GPU» в Налаштування › Продуктивність відповідно до того, скільки вміщує ваша відеокарта («Автоматично» стежить за використанням пам'яті, до чверті пам'яті цього комп'ютера). Поки шари не вміщуються, рядок стану показує «Пам'ять GPU заповнена».
GPU Memory Full Пам'ять GPU заповнена
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Шарам потрібно {needed} пам'яті GPU, а займати вони можуть {budget}, тому зміни, що перемальовують увесь документ, виконуються на CPU. Натисніть, щоб задати «Пам'ять GPU».
GPU memory budget: {budget} Бюджет пам'яті GPU: {budget}
This document's layers: {needed} of {budget} for layers Шари цього документа: {needed} з {budget} для шарів
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Шарам цього документа потрібно {needed}, але займати вони можуть {budget}: увесь документ перемальовується на CPU
GPU Memory (MB, 0 = Automatic) Пам'ять GPU (МБ, 0 = автоматично)
Can't render this file because it contains an unexpected character in line 1388 and column 18.
+9 -1
View File
@@ -2156,7 +2156,6 @@ layers Fill: Độ tô:
Imported {n} shortcuts from {file}. Click OK to keep them. Đã nhập {n} phím tắt từ {file}. Nhấp OK để giữ.
Indexed Color… Màu lập chỉ mục…
Install Plug-in… Cài plug-in…
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Các lớp không vừa ngân sách bộ nhớ GPU. Tăng mức sử dụng bộ nhớ trong Tùy chọn › Hiệu năng sẽ nâng ngân sách, tối đa một phần tư bộ nhớ máy này.
Labels Nhãn
Large document: redrawing on the CPU Tài liệu lớn: đang vẽ lại trên CPU
Redrawing Đang vẽ lại
@@ -3686,3 +3685,12 @@ curves Smooth Làm mượt
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. Biến đổi tự do vẫn đang được áp dụng; hãy thử lại khi hoàn tất.
The transform couldn't be applied. Không thể áp dụng phép biến đổi.
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. Các lớp cần {needed} bộ nhớ GPU; ngân sách chỉ dành cho chúng {budget}.
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. Đặt Bộ nhớ GPU trong Tùy chọn › Hiệu năng bằng mức card đồ họa của bạn chứa được (Tự động theo mức sử dụng bộ nhớ, tối đa một phần tư bộ nhớ máy này). Khi chúng chưa vừa, thanh trạng thái hiện Bộ nhớ GPU đầy.
GPU Memory Full Bộ nhớ GPU đầy
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. Các lớp cần {needed} bộ nhớ GPU và chỉ được dùng {budget}, nên những chỉnh sửa vẽ lại toàn bộ tài liệu sẽ làm trên CPU. Nhấp để đặt Bộ nhớ GPU.
GPU memory budget: {budget} Ngân sách bộ nhớ GPU: {budget}
This document's layers: {needed} of {budget} for layers Các lớp của tài liệu này: {needed} trên {budget} dành cho lớp
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU Các lớp của tài liệu này cần {needed} nhưng chỉ được dùng {budget}: vẽ lại toàn bộ tài liệu dùng CPU
GPU Memory (MB, 0 = Automatic) Bộ nhớ GPU (MB, 0 = Tự động)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9 -1
View File
@@ -2454,7 +2454,6 @@ cameraRaw Blending 混合
Redrawing 正在重绘
This redraw took {seconds} s on the CPU. 此次 CPU 重绘耗时 {seconds} 秒。
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. 更改整个文档的编辑(如图层的混合模式、不透明度或可见性)会重绘整个文档。
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. 图层超出 GPU 内存预算。在 首选项 › 性能 中提高内存使用量可增加预算,最多为本机内存的四分之一。
The GPU compositor wasn't used: {reason} 未使用 GPU 合成器:{reason}
fontWeight Thin 极细
fontWeight ExtraLight 特细
@@ -2816,3 +2815,12 @@ curves Smooth 平滑
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. 自由变换仍在应用中;请在完成后重试。
The transform couldn't be applied. 无法应用变换。
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. 其图层需要 {needed} GPU 内存;预算只留给它们 {budget}。
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. 在 首选项 › 性能 中将 GPU 内存设置为显卡能容纳的大小(自动跟随内存使用量,最多为本机内存的四分之一)。在图层放不下期间,状态栏显示“GPU 内存已满”。
GPU Memory Full GPU 内存已满
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. 图层需要 {needed} GPU 内存,但只能占用 {budget},因此重绘整个文档的编辑会在 CPU 上进行。点击以设置 GPU 内存。
GPU memory budget: {budget} GPU 内存预算:{budget}
This document's layers: {needed} of {budget} for layers 此文档的图层:图层可用 {budget} 中的 {needed}
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU 此文档的图层需要 {needed},但只能占用 {budget}:整个文档的重绘使用 CPU
GPU Memory (MB, 0 = Automatic) GPU 内存(MB,0 = 自动)
Can't render this file because it contains an unexpected character in line 2599 and column 53.
+9 -1
View File
@@ -2424,7 +2424,6 @@ cameraRaw Blending 混合
Redrawing 正在重繪
This redraw took {seconds} s on the CPU. 此次 CPU 重繪耗時 {seconds} 秒。
Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it. 變更整份文件的編輯(例如圖層的混合模式、不透明度或可見度)會重繪整份文件。
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. 圖層超出 GPU 記憶體預算。在 偏好設定 › 效能 中提高記憶體使用量可增加預算,最多為本機記憶體的四分之一。
The GPU compositor wasn't used: {reason} 未使用 GPU 合成器:{reason}
fontWeight Thin 極細
fontWeight ExtraLight 特細
@@ -2801,3 +2800,12 @@ curves Smooth 平滑
# Free Transform: a new layer while the box is open (#5859)
Free Transform is still being applied; try again when it has finished. 任意變形仍在套用中;請在完成後再試一次。
The transform couldn't be applied. 無法套用變形。
# Preferences › Performance › GPU Memory; the status bar and slow-redraw notice
Its layers need {needed} of GPU memory; the budget leaves them {budget}. 其圖層需要 {needed} GPU 記憶體;預算只留給它們 {budget}。
Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit. 在 偏好設定 › 效能 中將 GPU 記憶體設為顯示卡能容納的大小(自動會跟隨記憶體使用量,最多為本機記憶體的四分之一)。在圖層放不下期間,狀態列會顯示「GPU 記憶體已滿」。
GPU Memory Full GPU 記憶體已滿
The layers need {needed} of GPU memory and may hold {budget}, so edits that redraw the whole document do it on the CPU. Click to set GPU Memory. 圖層需要 {needed} GPU 記憶體,但只能佔用 {budget},因此重繪整份文件的編輯會在 CPU 上進行。按一下以設定 GPU 記憶體。
GPU memory budget: {budget} GPU 記憶體預算:{budget}
This document's layers: {needed} of {budget} for layers 此文件的圖層:圖層可用 {budget} 中的 {needed}
This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU 此文件的圖層需要 {needed},但只能佔用 {budget}:整份文件的重繪使用 CPU
GPU Memory (MB, 0 = Automatic) GPU 記憶體(MB,0 = 自動)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+11 -2
View File
@@ -105,8 +105,14 @@ pub fn slow_cpu_refresh(app: &mut PhotocraftApp, doc: u64, ms: f64, reason: Opti
tl!("Edits that change the whole document, such as a layer's blend mode, opacity or visibility, redraw all of it.").into(),
];
if reason == Some(crate::gpu_canvas::OVER_BUDGET) {
if let Some(fit) = app.perf.gpu_layer_fit.filter(|f| f.doc == doc && !f.fits()) {
lines.push(crate::i18n::fmt(
tl!("Its layers need {needed} of GPU memory; the budget leaves them {budget}."),
&[("needed", &crate::chrome_ui::fmt_bytes(fit.needed)), ("budget", &crate::chrome_ui::fmt_bytes(fit.budget))],
));
}
lines.push(
tl!("Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory.")
tl!("Set GPU Memory in Preferences › Performance to what your graphics card can hold (Automatic follows Memory Usage, up to a quarter of this computer's memory). The status bar shows GPU Memory Full while they don't fit.")
.into(),
);
} else if let Some(r) = reason {
@@ -354,12 +360,15 @@ mod tests {
slow_cpu_refresh(&mut app, 1, f64::NAN, Some(crate::gpu_canvas::OVER_BUDGET));
assert!(app.ui.notices.is_empty(), "a quick refresh needs no explanation");
// The layers of document 1 need 3.6 GB and may hold 3.4 GB: the notice says so.
app.perf.gpu_layer_fit = Some(crate::gpu_canvas::LayerFit { doc: 1, needed: 3600 << 20, budget: 3400 << 20 });
slow_cpu_refresh(&mut app, 1, 55_000.0, Some(crate::gpu_canvas::OVER_BUDGET));
assert_eq!(app.ui.notices.len(), 1);
let text = app.ui.notices[0].lines.join(" ");
assert!(text.contains("55.0 s"), "{text}");
assert!(text.contains("blend mode, opacity or visibility"), "{text}");
assert!(text.contains("Memory usage in Preferences › Performance"), "{text}");
assert!(text.contains("need 3.5G of GPU memory; the budget leaves them 3.3G"), "{text}");
assert!(text.contains("GPU Memory in Preferences › Performance"), "{text}");
assert!(!app.ui.notices[0].error);
slow_cpu_refresh(&mut app, 1, 55_000.0, Some(crate::gpu_canvas::OVER_BUDGET));
+2
View File
@@ -1613,6 +1613,7 @@ pub fn status_bar(app: &mut PhotocraftApp, ui: &mut egui::Ui) {
ui.with_layout(crate::direction::trailing(), |ui| {
crate::jobs_ui::status_progress(app, ui);
crate::background_redraw::status(app, ui);
crate::chrome_ui::gpu_memory_status(app, ui);
});
return;
}
@@ -1653,6 +1654,7 @@ pub fn status_bar(app: &mut PhotocraftApp, ui: &mut egui::Ui) {
crate::jobs_ui::status_progress(app, ui);
}
crate::background_redraw::status(app, ui);
crate::chrome_ui::gpu_memory_status(app, ui);
});
});
});
+28 -1
View File
@@ -1053,7 +1053,9 @@ pub fn open_mismatch(app: &mut PhotocraftApp, message: &str, action: &str, missi
pub fn body(app: &mut PhotocraftApp, ui: &mut egui::Ui, f: &mut Map<String, Value>) {
match f.get("__prefsui").and_then(Value::as_str).unwrap_or("") {
"prefs" => {
f.insert("__gpuInfo".into(), json!(app.perf.gpu_info.lines()));
let mut info = app.perf.gpu_info.lines();
info.extend(gpu_memory_lines(app));
f.insert("__gpuInfo".into(), json!(info));
let system = system_theme(app, ui.ctx());
prefs_body(ui, f, system);
}
@@ -1065,6 +1067,27 @@ pub fn body(app: &mut PhotocraftApp, ui: &mut egui::Ui, f: &mut Map<String, Valu
}
}
/// Performance › Graphics: the compositor's GPU memory budget and whether the active document's
/// layers fit it (the GPU Memory preference sets it).
fn gpu_memory_lines(app: &PhotocraftApp) -> Vec<String> {
let mut v = Vec::new();
if app.perf.gpu_budget_mb > 0 {
let budget = crate::chrome_ui::fmt_bytes(app.perf.gpu_budget_mb.saturating_mul(1 << 20));
v.push(crate::i18n::fmt(tl!("GPU memory budget: {budget}"), &[("budget", &budget)]));
}
let doc = app.session.active().map(|st| st.doc.id.0);
if let Some(fit) = app.perf.gpu_layer_fit.filter(|f| Some(f.doc) == doc) {
let args = [("needed", crate::chrome_ui::fmt_bytes(fit.needed)), ("budget", crate::chrome_ui::fmt_bytes(fit.budget))];
let args: Vec<(&str, &str)> = args.iter().map(|(k, v)| (*k, v.as_str())).collect();
v.push(if fit.fits() {
crate::i18n::fmt(tl!("This document's layers: {needed} of {budget} for layers"), &args)
} else {
crate::i18n::fmt(tl!("This document's layers need {needed} but may hold {budget}: whole-document redraws use the CPU"), &args)
});
}
v
}
fn humanize(key: &str) -> String {
match key {
"appearanceMode" => return "Appearance Mode".into(),
@@ -1099,6 +1122,10 @@ fn humanize(key: &str) -> String {
if key == "lowLatencyDrawing" {
return "Low-Latency Drawing (vsync off, applies at next launch)".into();
}
// Performance: the canvas compositor's GPU memory, 0 for the automatic budget (L3).
if key == "gpuMemoryMb" {
return "GPU Memory (MB, 0 = Automatic)".into();
}
let mut s = String::new();
for (i, ch) in key.chars().enumerate() {
if i == 0 {
+5 -3
View File
@@ -6,10 +6,10 @@ Generated by `cargo xtask scorecard` from `perf/budgets.toml`, `perf/baseline.js
| Area | Done | Partial | Missing | Key numbers |
|---|---:|---:|---:|---|
| [Performance](#performance) | 3 | 22 | 22 | 56 scenarios: 3 within budget, 22 over budget or failing, 9 tracked only, 17 not run, 5 not measurable yet (baseline 2026-10-05) |
| [Performance](#performance) | 3 | 22 | 24 | 58 scenarios: 3 within budget, 22 over budget or failing, 9 tracked only, 19 not run, 5 not measurable yet (baseline 2026-10-05) |
| [File compatibility](#file-compatibility) | 7 | 14 | 6 | io corpus: oracle ≥ 148/170, round trip ≥ 169/170; psd-tools corpus: oracle ≥ 249/309, round trip ≥ 308/309; photoshop oracles: oracle ≥ 188/256, round trip ≥ 258/256 |
| [Tools](#tools) | 33 | 11 | 0 | |
| [Workspace and UI](#workspace-and-ui) | 13 | 6 | 4 | settings that do nothing: 26 of 167 (target 0) |
| [Workspace and UI](#workspace-and-ui) | 13 | 6 | 4 | settings that do nothing: 26 of 168 (target 0) |
| [Type](#type) | 4 | 3 | 2 | |
| [Automation](#automation) | 5 | 2 | 4 | 631 of 631 menu items live (100.0%) |
| [Reliability](#reliability) | 5 | 2 | 0 | never-crash lints on 29 of 29 crates; panic_hunt present |
@@ -75,6 +75,8 @@ Baseline: 2026-10-05, commit `f5d2bcb54a`, Apple M4 Pro (48 GB), GPU Apple M4 Pr
| P57 | Chisel bevel size change, 12 MP text paragraph, size 250 (GPU) | track only | – | – | – | – | – | not run | |
| P58 | Chisel bevel size change, 12 MP ellipse, size 8 (CPU) | track only | – | – | – | – | – | not run | |
| P59 | Chisel bevel size change, 12 MP text paragraph, size 8 (CPU) | track only | – | – | – | – | – | not run | |
| P60 | Layer opacity among 150 full-canvas layers, 6 MP (app GPU budget) | ≤ 30 ms p95 | – | – | – | – | – | not run | [#5973](https://github.com/storytold/photocraft/issues/5973) |
| P61 | Hide a layer among 150 full-canvas layers, 6 MP (app GPU budget) | ≤ 30 ms p95 | – | – | – | – | – | not run | [#5973](https://github.com/storytold/photocraft/issues/5973) |
**Not measurable yet** (the code can't do it yet; no number is recorded):
@@ -177,7 +179,7 @@ Corpus floors (`crates/io/tests/corpus.rs`): the enforced minimums; the corpus t
## Workspace and UI
**Settings that do nothing: 26 of 167** (target 0, #204). Counted by the prefs audit (`xtask/src/scorecard.rs`): a `Preferences` field counts as read when code outside the prefs model (`prefs.rs` except its `impl Session` blocks; tests excluded; the schema-driven dialog never names a field) accesses `section.field`, or `.section` and `.field` in the same file, or calls a section method that reads `self.field`. It is a heuristic lower bound: a generic name can look read when it isn't.
**Settings that do nothing: 26 of 168** (target 0, #204). Counted by the prefs audit (`xtask/src/scorecard.rs`): a `Preferences` field counts as read when code outside the prefs model (`prefs.rs` except its `impl Session` blocks; tests excluded; the schema-driven dialog never names a field) accesses `section.field`, or `.section` and `.field` in the same file, or calls a section method that reads `self.field`. It is a heuristic lower bound: a generic name can look read when it isn't.
Unread: `general.color_picker`, `general.animated_zoom`, `general.zoom_resizes_windows`, `workspace.auto_show_hidden_panels`, `workspace.enable_floating_document_window_docking`, `file_handling.save_in_background`, `performance.cache_levels`, `performance.legacy_compositing`, `scratch_disks.disks`, `units_and_rulers.column_width`, `units_and_rulers.gutter`, `plug_ins.show_extension_panels`, `plug_ins.allow_scripts_to_connect`, `plug_ins.generator_enabled`, `type_.text_engine`, `type_.recent_fonts`, `enhanced_controls.scrubby_slider_acceleration`, `enhanced_controls.touch_gestures`, `raw_defaults.color_space`, `raw_defaults.bit_depth`, `raw_defaults.resolution`, `raw_defaults.sharpen_for`, `raw_defaults.open_as_smart_object`, `raw_defaults.apply_auto_tone`, `integrations.allow_agent_control`, `integrations.control_port`.
+18
View File
@@ -518,3 +518,21 @@ id = "P59"
title = "Chisel bevel size change, 12 MP text paragraph, size 8 (CPU)"
bench = "bevel_bench"
row = "bevel size change to 8, text (CPU)"
[[scenario]]
id = "P60"
title = "Layer opacity among 150 full-canvas layers, 6 MP (app GPU budget)"
issue = 5973
bench = "perf_scenarios"
row = "opacity of a layer among many full-canvas layers + refresh"
budget_ms = 30
enforce = false # new; no baseline yet
[[scenario]]
id = "P61"
title = "Hide a layer among 150 full-canvas layers, 6 MP (app GPU budget)"
issue = 5973
bench = "perf_scenarios"
row = "hide a layer among many full-canvas layers + refresh"
budget_ms = 30
enforce = false # new; no baseline yet