diff --git a/gpu/backend/backend.go b/gpu/backend/backend.go index 7b1ce9b5..e983b8e5 100644 --- a/gpu/backend/backend.go +++ b/gpu/backend/backend.go @@ -3,6 +3,7 @@ package backend import ( + "errors" "image" "time" ) @@ -225,6 +226,8 @@ const ( BlendFactorDstColor ) +var ErrContentLost = errors.New("buffer content lost") + func (f Features) Has(feats Features) bool { return f&feats == feats } diff --git a/gpu/compute.go b/gpu/compute.go index bd193be7..a4f880c9 100644 --- a/gpu/compute.go +++ b/gpu/compute.go @@ -821,6 +821,9 @@ func (g *compute) render(tileDims image.Point) error { t.kernel4.end() if err := g.buffers.memory.buffer.Download(gunsafe.StructView(g.memHeader)); err != nil { + if err == backend.ErrContentLost { + continue + } return err } switch errCode := g.memHeader.mem_error; errCode { diff --git a/gpu/gl/backend.go b/gpu/gl/backend.go index 401252e8..99aa2296 100644 --- a/gpu/gl/backend.go +++ b/gpu/gl/backend.go @@ -704,7 +704,7 @@ func (b *gpuBuffer) Download(data []byte) error { } copy(data, bufferMap) if !b.backend.funcs.UnmapBuffer(firstBinding) { - return errors.New("buffer content lost") + return backend.ErrContentLost } return nil }