Skip to content
Snippets Groups Projects
  1. May 22, 2020
    • Niklas Haas's avatar
      shaders: make sh_subpass slightly stricter · 00127130
      Niklas Haas authored
      The current logic allows resizeable parents to become non-resizeable,
      which is a big no-no since resizeable parents are almost definitely
      intended for a framebuffer size that has nothing at all to do with the
      subpass.
      
      To fix this, only allow merging resizeable shaders with subpasses that
      are also resizeable.
      00127130
    • Niklas Haas's avatar
      renderer: don't hard-error when sh_subpass fails · 38b875d9
      Niklas Haas authored
      As an aside, we also make sh_subpass not explicitly spam/fail the parent
      shader in this case.
      38b875d9
    • Niklas Haas's avatar
      renderer: completely refactor struct img · 525279eb
      Niklas Haas authored
      Rather than this merely representing an "in-flight" image, with the
      img->sh only living for as long as this exists between different pass
      types, `img` is now conceptually persistent and either in one of two
      modes: `sh`, or `tex`. This allows us to, in principle, avoid doing
      redundant FBO roundtrips for cases where the previous pass thinks the
      next pass needs a tex but the next pass actually needs a sh, such as is
      currently the case for the AV1 grain shader.
      
      Since `pass_hook` in particular can randomly mutate `img` to either of
      the two forms, callers must now be somewhat vigilant to make sure they
      always use `img_tex()` and `img_sh()` to access the "current"
      shader/texture, rather than relying on local variables staying
      persistent.
      
      The use of locally initialized pl_shader is now exclusive to passes that
      keep their own pl_dispatch_begin calls (for various reasons).
      525279eb
    • Niklas Haas's avatar
      renderer: use a dynamic list of FBOs instead of hard-coding them · fae66ede
      Niklas Haas authored
      The current approach was to pair each FBO with its use, "semantically".
      The intent was to minimize the number of "reallocations" that would be
      required if the number of passes changed dynamically (e.g. as the
      renderer options changed). However, this is not only an unrealistic
      design goal to optimize for (users can use separate pl_renderers for
      wildly different purposes, and for a single conceptual video stream it
      doesn't really matter), but also, it gets in the way of a planned
      refactor I have concerning `struct img`.
      
      Change this to make all FBOs dynamically allocated. The current
      implementation simply uses a counter, but a more advanced implementation
      could use a pool of textures and find ones that have matching sizes
      before recreating ones that don't. The API shouldn't change as a result
      of this.
      fae66ede
  2. May 21, 2020
    • Niklas Haas's avatar
      ci: update container version · 0386edd3
      Niklas Haas authored
      In doing so I finally hit the time bomb caused by assuming blacklisting
      compute is only needed on that specific driver version. Turns out, the
      same issue is present even on newer driver versions. Since I have no
      idea how else to work around and/or debug it, just permanently disable
      compute on the CI.
      
      Unfortunately, for some reason, the `shaderc` version in this version of
      the CI image hits random internal exceptions when trying to compile
      pretty much anything. But using glslang directly works. Except for msan,
      because we don't have msan-instrumented libc++.
      
      Some other changes needed for whatever reason.
      0386edd3
    • Niklas Haas's avatar
      spirv: handle shaderc internal errors properly · 3b1dd90b
      Niklas Haas authored
      These don't generate any errors, but the compilation status still isn't
      "success". Treat these as errors as well, in terms of logging.
      3b1dd90b
    • Niklas Haas's avatar
      vulkan: always load VK_KHR_surface · e630b7ae
      Niklas Haas authored
      There's really no reason not to. Also clarify that these functions are
      not, in fact, "mandatory" instance-level function pointers.
      e630b7ae
    • Niklas Haas's avatar
      vulkan: clean up VK_KHR_swapchain handling · 41d4a7ab
      Niklas Haas authored
      This extension was treated as global in the past, but now that we have
      a proper extension framework we should just handle it like any other
      extension. Solves a very concrete issue where dependencies on e.g.
      VK_EXT_hdr_metadata were not satisfied if the user did not happen to
      enable this extension.
      
      Also check if the extension is loaded when we attempt actually creating
      a swapchain.
      41d4a7ab
    • Niklas Haas's avatar
      vulkan: fix vk_cmd_timer_end · 925b1b86
      Niklas Haas authored
      Forgot to un-mark timers as recording. Probably mostly benign, but could
      hypothetically cause issues.
      925b1b86
    • Niklas Haas's avatar
      renderer: assert if SAMPLER_NOOP implies scaling · 58e588cd
      Niklas Haas authored
      With ca1ebc, the mismatched shaders of the variety that 092229 was
      intending to solve should no longer be a possibility.
      
      If this is still the case, it's probably a bug. Assert instead.
      58e588cd
    • Niklas Haas's avatar
      renderer: replace round0 by truncf · bde7fc04
      Niklas Haas authored
      This function already exists.
      bde7fc04
    • Niklas Haas's avatar
      renderer: simplify offset rounding / plane alignment · ca1ebc94
      Niklas Haas authored
      The current logic could end rounding the plane up in both directions,
      inadvertently introducing an upscale by 1 pixel to the refplane, which
      not only forced an FBO indirection but also lowered the quality due to
      the effective resample. Furthermore, the code for adjusting the rect by
      the `rc` was wrong, since it failed to scale the "affine" part of the
      transformation down to the coordinate space of the plane.
      
      Simplify and fix this by only rounding the offset (making sure to always
      round towards 0 to have the best chance of "doing the right thing"), and
      also correctly scaling this offset when calculating the offsets for the
      individual planes.
      ca1ebc94
    • Niklas Haas's avatar
      renderer: force FBO indirection for mismatched shaders · 092229af
      Niklas Haas authored
      This can happen if e.g. the shader's output image is rounded up relative
      to the rect actually being sampled, for example when when users are
      sampling fractional parts of the image.
      092229af
    • Niklas Haas's avatar
      shaders: explicitly round some implicitly rounded floats · 18583d7c
      Niklas Haas authored
      Across the boards, "output sizes" and so forth are assumed to be
      integers, but a lot of the code generating them is based on floating
      point math. To make it clear what happens, make things consistent by
      using roundf() instead of implicit conversion (which may end up
      truncating etc.).
      18583d7c
    • Niklas Haas's avatar
      renderer: fix order of scaler-skip checks · 8f473413
      Niklas Haas authored
      The order these are written in currently means the second check never
      has a chance to get printed, because SAMPLER_NOOP implies
      SAMPLER_DIRECT.
      8f473413
  3. May 20, 2020
    • Niklas Haas's avatar
      vulkan: don't attempt resetting query pools on transfer queues · ea8f3e32
      Niklas Haas authored
      In theory there are various ways we could reconcile this difference, but
      for now, the easiest thing to do is to simply disable it.
      
      I'll try working on a way to bring back support for this, but I wanted
      to get this fix out of the way first.
      ea8f3e32
    • Niklas Haas's avatar
      shaders/custom: don't force OUTPUT fbo for szexprs · 1ce5ed24
      Niklas Haas authored
      09834c52 introduced a regression here that caused an unnecessary FBO
      indirection to occur for the (relatively common) case of user shaders
      consulting the dimensions of OUTPUT in their RPN expressions.
      
      OUTPUT apparently behaves weirdly. mpv should probably document this
      better. Even better would be to have had different names for the OUTPUT
      hook stage and the OUTPUT magic constant for RPN exprs. But it's
      probably too late for that now. Unless we want to rename the OUTPUT
      stage, which we totally could do.
      1ce5ed24
    • Niklas Haas's avatar
      shaders/custom: minor comment improvement · d1452f45
      Niklas Haas authored
      Also add a TODO for something I realized while staring at this code
      again.
      d1452f45
    • Niklas Haas's avatar
      shaders/av1: fix output size · c0d6a7d6
      Niklas Haas authored
      This shader is very definitively non-resizable. Flag it as such.
      c0d6a7d6
  4. May 19, 2020
  5. May 18, 2020
  6. May 17, 2020
    • Niklas Haas's avatar
      shaders/av1: document minimum GLSL version · 524ef50a
      Niklas Haas authored
      524ef50a
    • Niklas Haas's avatar
      shaders/av1: remove misleading comment · 7e0ad727
      Niklas Haas authored
      In practice the pre-grain texture is going to be a different pl_tex than
      the post-grain texture, so the "order" of operations does not really
      make sense in this context.
      7e0ad727
    • Niklas Haas's avatar
      shaders/colorspace: fix build error without lcms · e6dee250
      Niklas Haas authored
      The pl_3dlut_default_params was undefined in this case, but the renderer
      still referenced it.
      e6dee250
    • Niklas Haas's avatar
      colorspace: update interpretation of SDR white · ce9168d4
      Niklas Haas authored and Niklas Haas's avatar Niklas Haas committed
      Based on ITU-R Report BT.2408, and general recommendations within the
      industry, the "SDR white level", i.e. the level at which to map SDR into
      HDR signals, is not 100 cd/m^2 but a value closer to 203 cd/m^2.
      
      For PQ signals this results in a relatively straightforward change of
      the code, but for HLG signals things get more complicated. For HLG,
      rather than targeting a fixed brightness in cd/m^2, the recommendation
      is to map SDR white levels to the 75% point in HLG, which calculates to
      a value of about roughly 3.17955 in scene-referred space (where the
      nominal peak is at 12.0). To fit this into the libplacebo interpretation
      of these values (where 1.0 maps to the SDR white levels), we scale
      things down by this factor, giving rise to a new scene-referred signal
      range of 12.0/3.17955 = 3.774, and adjust the OOTF to compensate.
      
      This commit does put into question to what extent the default tone
      mapping settings need to be altered to account for this change in
      interpretation when going from HDR back to SDR.
      
      Also add tests to ensure this stuff round-trips.
      
      Bump the API version because, apart from the fact that we changed a
      public header, this is quite a drastic change in functionality.
      ce9168d4
Loading