Commit Graph
124 Commits
Author SHA1 Message Date
baldurk c98500e657 Fix pixel picking from custom shader output in image viewer. Refs #1688 2020-01-17 19:53:39 +00:00
baldurk d4e723bfd8 Fix bugs identified by using PVS Studio
* A few copy-paste errors, some tautological checks indicating errors, missing
  return value checks.
2020-01-17 19:53:38 +00:00
baldurk e347912479 Don't set TextureCategory::SwapBuffer on image viewer texture
* This prevents toggling linear/gamma display because swap buffers are always
  interpreted as gamma.
2020-01-17 19:53:38 +00:00
baldurk 2916c0f9f7 Update copyright years to 2020 2020-01-06 16:20:45 +00:00
baldurk 763dbb5f13 Don't check width > 1 for image viewer to choose between 1D and 2D 2019-12-20 13:45:29 +00:00
baldurk bd9f4fc389 Remove use of vector/string from core project
* This also affects the drivers via interfaces e.g. IReplayDriver and some
  utility functions.
2019-12-16 18:10:31 +00:00
baldurk f68645bddc Reduce dependencies pulled in by common.h 2019-12-16 17:06:16 +00:00
baldurk 6ffd725a13 Don't try to create proxy textures that aren't supported by the proxy 2019-12-13 11:45:44 +00:00
baldurk 45144ed478 Don't rely on proxy renderer for texture description in image viewer 2019-11-26 17:38:26 +00:00
baldurk 19847c4574 GL doesn't support block-compressed 3D textures 2019-11-26 17:38:26 +00:00
baldurk ba8d16ea1c Add y-flipping for GL in image viewer
* Conventionally images have an origin at the top left, opposite to GL, so we
  want to flip the same as the replay proxy using GL as a proxy renderer for a
  non-GL API.
2019-11-26 17:38:26 +00:00
baldurk db563bb0bf Refactor public interface around handling of textures
* Subresource handling is more consistent - we pass around a struct now that
  contains the array slice, mip level, and sample. We remove the concept of
  'MSAA textures count samples as extra slices within the real slices' and
  internalise that completely. This also means we have a consistent set
  everywhere that we need to refer to a subresource.
* Functions that used to be in the ReplayOutput and use a couple of implicit
  parameters from the texture viewer configuration are now in the
  ReplayController and take them explicitly. This includes GetMinMax,
  GetHistogram, and PickPixel.
* Since these functions aren't ReplayOutput relative, if you want to decode the
  custom shader texture or the overlay texture you need to pass that ID
  directly.
2019-11-26 17:38:25 +00:00
baldurk 01344c7e83 Rename typeHint to typeCast 2019-11-26 17:38:25 +00:00
baldurk a8baf4fa49 Fix compile error 2019-10-28 19:25:02 +00:00
baldurk 6a39e4d6f8 Fix deletion of image viewer's IReplayDriver 2019-10-28 18:57:52 +00:00
baldurk 0fe6be3ac6 Support YUY2/UYVY formats in DDS files
* These can only be supported if the proxy texture can be created
2019-10-28 12:03:50 +00:00
baldurk 02520ed8f7 Don't use full filename as texture name in image viewer 2019-10-21 12:28:18 +01:00
baldurk 878acd4ad9 Add a function to enumerate which GPUs are available at replay time 2019-08-27 18:51:56 +01:00
baldurk ee43d4377c Account for pipeline specialisation constants when reflecting shaders 2019-08-16 17:38:35 +01:00
baldurk d4d21ce736 Use texture viewer background color for 'clear before X' overlays 2019-07-11 17:05:58 +01:00
baldurk e4333291a1 Allow using shader processing tools for custom shaders
* This is primarily useful for HLSL on Vulkan, but could be used with any other
  combination. If multiple tools can perform the conversion, the highest
  priority one is used.
2019-05-22 17:54:10 +01:00
baldurk 694524c7bd Allow querying the shader encoding supported by custom shaders
* This is distinct from target shaders in the remote proxy case - custom shaders
  are built locally.
2019-05-22 16:09:18 +01:00
baldurk 7206a0cd25 Removing 'use std::vector' 2019-05-17 16:32:56 +01:00
baldurk a965a3a703 Remove 'using std::string'
* This will make it easier to replace std::string with rdcstr in future
2019-05-17 16:32:56 +01:00
baldurk 7db90232f9 Allow creating completely headless outputs and reading back their output
* This is useful when writing automated tests that want to test the output of
  rendering which only happens to outputs, such as mesh rendering, or could
  potentially be bypassed with direct readback like GetTextureData vs rendering
  a texture.
2019-05-06 15:52:43 +01:00
baldurk f256218e17 Pass bindless feedback data to UI through vulkan pipeline state
* Each binding element within an arrayed descriptor has a bool indicating if
  it's dynamically used or not (which will be set to true if the feedback isn't
  available). Each descriptor has a uint32_t indicating how many elements are
  dynamically used - which is useful for the UI to hide the root of an array
  that has no used elements, or to heuristically decide whether to expand or
  elide the contents.
2019-04-05 09:19:22 +01:00
baldurk e79b2d16b2 Tidy up FillCBufferVariables across APIs and share implementations
* On D3D the implementation was severely complicated by two parallel paths - one
  that 'flattened' vec4s out into easy-to-consume format for debugging. Instead
  we do this as a post-process transformation now in the debugging itself.
* Similarly D3D's implementation used DXBC data directly to fetch data, when all
  of the information needed is in the ShaderConstant arrays and used by Vulkan.
  This allows us to share the implementation.
* Only GL still needs its own implementation since it needs to query the API for
  offsets etc as it can change unreliably and can't easily produce a standard
  reflection data. We do share the 'read from buffer data' implementation
  though.
2019-02-07 15:23:06 +00:00
baldurk 86ff87863e Update copyright years to 2019 2019-02-01 18:32:13 +00:00
baldurk 44da10be06 Change SRGB to be a component type, not a ResourceFormat flag
* This allows us to have sRGB as a type hint, and better matches API format
  types.
* It's currently impossible and unlikely to ever be the case that srgb is
  applied to anything other than UNorm, so having it be independent from the
  component type was a degree of freedom that was unused.
2019-01-14 13:19:59 +00:00
baldurk 2237c241ff Fix incorrectly named methods in ResourceFormat
* We try to maintain at least an internally consistent naming scheme for the
  python/public interface, even if it doesn't match python naming schemes.
2019-01-03 12:22:29 +00:00
baldurk 2b802b1ba8 Allow custom display shaders in image viewer 2018-12-11 19:57:20 +00:00
baldurk 2411ce70ea Add flags to ResourceFormat to replace bgraOrder/srgbCorrected
* Allows for future expansion as well
2018-12-11 19:57:20 +00:00
baldurk 27c49d5272 Tweak code that was confusing gcc 2018-11-26 18:53:00 +00:00
baldurk 8ed9670601 Add way to query for driver version info without replaying.
* This lets us print what driver is available without opening a capture, useful
  for autotest logging.
* We also print the driver version & vendor on capture as well as replay for all
  APIs. Previously we were only printing this reliably on replay for GL/Vulkan
  but it's useful everywhere for post-mortem debugging.
2018-11-26 16:39:00 +00:00
baldurk a81e4a2b45 Pass through and allow different source shader encodings when editing
* This means e.g. the D3D11 back-end can accept DXBC directly if the UI can
  provide it, or compile from HLSL as before.
* More importantly, the Vulkan back-end can take SPIR-V compiled from any
  source, or compile from GLSL as before as a fall-back.
2018-08-09 16:56:52 +01:00
baldurk a4dfad6e82 Add a backend query to check shader encodings BuildTargetShader allows
* This will allow the backend to specify both the native format (e.g. SPIR-V,
  DXBC) as well as a language it might be able to internally compile (GLSL or
  HLSL).
* The caller will then able to decide for itself whether it wants to compile to
  native format and pass that down, or pass the language down and let it be
  built internally.
* Currently BuildTargetShader still only accepts shader source.
2018-08-09 16:56:51 +01:00
baldurk 53364adeef Support mesh output from different view indices on vulkan
* When using VK_KHR_multiview you can select which view to view the mesh data from.
2018-06-19 20:48:30 +01:00
baldurk 14e3a3d360 Move API-agnostic pipeline state wrapper into core interface
* There's no need for this to be in the UI, and moving it allows it to be used
  from script which is very useful.
2018-06-18 18:39:06 +01:00
baldurk 6e57e17f8e Update tinyexr to 9b30f253 - latest as of the time of this commit 2018-05-07 18:42:26 +01:00
baldurk 79637f6caa Expose which drivers support RGP, and add command to create RGP profile 2018-04-25 19:10:50 +01:00
baldurk d3bf628394 Handle opening vulkan shaders that are not in a pipeline.
* Previously we were relying on the pipeline info create to initialise
  the reflection for an entry point, now we do it on demand wherever it
  is needed.
2018-02-09 19:03:55 +00:00
baldurk a69efa1702 Refactor debug manager, reducing duplication and better organisation
* In many cases (particularly on D3D11/D3D12) the replay would simply
  forward functions as-is to the debug manager for implementation. This
  meant that change any of those function signatures required more
  tedious copy-pasting than was necessary, and didn't make much sense.
* Now the replay class is responsible for implementing all the
  functionality and owns any debug-only API resources, but can still use
  the debug manager for any indirect utility functions like caching,
  etc.
* The API resources are better organised by task in the replay class
  rather than being all over the place.
* Finally on vulkan, added some helper functions to reduce the
  boilerplate involved in initialising objects.
2018-01-16 16:29:39 +00:00
David McFarlandandBaldur Karlsson 9013c1babf image_viewer: fix corruption when viewing rgba32_float images 2018-01-04 12:32:27 +01:00
baldurk e305029ddd Update copyright years to 2018 2018-01-01 17:55:29 +00:00
baldurk 6572cd97f5 Tidy up handling of windowing data, make it a bit more type safe 2018-01-01 17:31:19 +00:00
baldurk 184e5c7f8d Change RDCDriver to enum class, don't manually stringify anywhere 2017-12-29 18:30:35 +00:00
baldurk ebaefc82a9 Normalise and make python/public interface more consistent
* We enforce a naming scheme more strongly - types, member functions,
  and enum values must be UpperCaseCamel, and member variables must be
  lowerCaseCamel. No underscores allowed.
* eventId not eventID or EID, and Id preferred to ID in general. Also
  for resourceId.
* Removed some lingering hungarian m_Foo naming.
* Some pipeline state structs that are almost identical between the
  different APIs are pulled out into common structs. Where something
  doesn't make sense (e.g. viewport enable for vulkan) it will just be
  set to a sensible default (in that case always true).
* Changed scissors to be x/y & width/height instead of sometimes
  left/top/right/bottom
* Abbreviations are discouraged, e.g. operation not op, function not
  func.
2017-12-22 13:02:36 +00:00
baldurk b877f022fe RGBA8 UNORM images in the viewer should be treated as sRGB
* This makes the pixel pick values come back sRGB decoded.
2017-12-21 10:50:48 +00:00
David McFarlandandBaldur Karlsson ad38130624 Set TextureDescription.resType in image_viewer
This fixes image_viewer on gl_replay.  Previously, images would show up
as <Uninitialised Texture>.
2017-12-20 19:00:10 +01:00
baldurk 1743424f02 Use bytebuf consistently instead of vector<byte> in driver interfaces 2017-11-27 11:00:42 +00:00