1. 27 Dec, 2017 1 commit
  2. 26 Dec, 2017 6 commits
  3. 25 Dec, 2017 5 commits
  4. 24 Dec, 2017 3 commits
    • Debarshi Ray's avatar
      shadows-highlights-correction: Simplify code · 442b2e50
      Debarshi Ray authored
      Fallout from 9384338e
    • Debarshi Ray's avatar
      shadows-highlights-correction: Simplify code · 9384338e
      Debarshi Ray authored
      Since the code already scales the colour channels to [0.0, 1.0], it is
      quite obvious what the maximum, half-maximum and double-maximum values
      are. Moreover, variables like lmax aren't used consistently either.
      eg., the code had both "1.0f - la" and "lmax - la". So, it's not clear
      whether they were making it easy to understand overall algorithm, which
      is otherwise undocumented.
      Note that Darktable was using some of these variables to clamp the
      output within [0.0, 1.0], which isn't relevant because the GEGL
      operation always generates unbounded output.
    • Debarshi Ray's avatar
      operations/common-gpl3+/tile-paper: Remove redundant code · ea4f1072
      Debarshi Ray authored
      GeglOperationFilter::get_bounding_box already forwards its source
      bounding box. There is no need to provide an implementation that does
      the same.
  5. 23 Dec, 2017 2 commits
  6. 22 Dec, 2017 1 commit
  7. 20 Dec, 2017 3 commits
  8. 19 Dec, 2017 5 commits
  9. 18 Dec, 2017 4 commits
  10. 15 Dec, 2017 1 commit
    • Ell's avatar
      buffer: use per-instance hot-tile for nearest samplers · 7404ac11
      Ell authored
      In GeglSamplerNearest, use a per-instance hot-tile pointer, rather
      than using the tile-storage's common hot-tile pointer, so that
      sampling from the sampler's hot-tile doesn't require locking the
      tile storage.  This notably improves multithreaded performance of
      ops that use a nearest sampler with a more-or-less regular sampling
  11. 14 Dec, 2017 1 commit
  12. 13 Dec, 2017 7 commits
    • Øyvind "pippin" Kolås's avatar
      NEWS: update · 6352c932
      Øyvind "pippin" Kolås authored
    • Ell's avatar
      Bug 791424 - multithreading slows down color to grey · 48ca09d7
      Ell authored
      After the last commit, reenabling multithreading for c2g makes it
      notably faster when GEGL_THREADS>1 (however, it only brings it on-
      par to GEGL_THREADS=1.)
      This reverts commit 58fcebb9.
    • Ell's avatar
      Bug 783203 - Transform ops are opting out of multi-threading · fbff2736
      Ell authored
      After the last commit, multithreaded transform ops are faster than
      single threaded, so reenable multithreading.
      Note that this doesn't necessarily mean that the transform ops are
      faster when using GEGL_THREADS>1, rather than GEGL_THREADS=1,
      only that *when* GEGL_THREADS>1, the multithreaded version is
      faster than the single threaded one.  However, GEGL_THREADS>1 seems
      to be consistently faster than GEGL_THREADS=1 when using a non-
      nearest sampler.
      This reverts commit b54454fd.
    • Ell's avatar
      operation, transform: use separate input buffers for different threads · 172d9b4f
      Ell authored
      Use gegl_operation_context_dup_input_maybe_copy(), added in the
      previous commit, in GimpOperationFilter, GimpOperationComposer,
      GimpOperationComposer3, and OpTransform (however, *not* in the
      corresponding point ops), to (potentially) create a separate copy
      of the input buffer for each thread, to avoid lock contention over
      the input buffer's tile-storage lock.  Use the input buffer
      directly only for the first chunk, which is processed by the caller
      This significantly improves performance of operations that randomly
      access the input buffer (e.g., using a sampler), and seems not to
      pessimize operations with a more regular access pattern (e.g.,
      using an iterator, or scan rows).
    • Ell's avatar
      operation: add gegl_operation_context_dup_input_maybe_copy() · 9cb3c7a2
      Ell authored
      gegl_operation_context_dup_input_maybe_copy() takes a ROI, and
      returns either a reference to the input buffer, or a copy of the
      input buffer, containing (at least) the region required to process
      ROI, if the copy has a low-enough overhead.  Note that the copied
      input-buffer tiles are generally COWed, so this is rather cheap.
      This is useful for threaded ops, which can use this function to
      create a separate copy of the input buffer for each thread, to
      avoid contention over the input's tile-storage lock.  See the next
    • Øyvind "pippin" Kolås's avatar
    • Ell's avatar
      buffer: don't count cloned tiles towards cache_total more than once · 67b58c73
      Ell authored
      In GeglTileHandlerCache, we currently count the size of all tiles
      individually towards the cache's total size, even when some of the
      tiles are clones of each other, and hence share the same data.
      Improve this by counting the size of groups of mutually cloned
      tiles only once, to reflect their actual memory consumption.  The
      implementation uses a lock-free shared counter, similar to the way
      we do COW, and has low overhead.
  13. 12 Dec, 2017 1 commit
    • Ell's avatar
      transform: allow wiggle room in required/invalidated region calculation · 5ca329c1
      Ell authored
      When computing required/invalidated regions, calculate the bounding
      box based on pixel corners, rather than pixel centers, to allow for
      some error in the sampled input coordinates.  Otherwise, in some
      cases, we sample pixels outside the required input region during
      process() (and, conversely, we probably also miss affected pixels
      when determining the invalidated region.)
      Update the reference output of the "clones" test composition, which
      is affected by this change.