Commit Graph

990 Commits

Author SHA1 Message Date
baldurk ee37bca573 Implement Process::CreateAndInjectIntoProcess on linux
* It's not exactly feature parity but it's a start, and any UI would use
  this under the hood.
* This means at least linux has a semi user-friendly way to launch and
  capture programs - it's limited but you can just use
  $ ./bin/renderdoccmd -c /path/to/program "argument string"
  from the root of the repository.
* Logfile and capture options (which can't be set yet, but you could easily
  hack in something to set them in renderdoccmd.cpp) are passed via
  environment variables to the child process.
2015-01-04 01:02:05 +00:00
baldurk 1d401c9faa Allow passing arguments to target program in renderdoccmd args 2015-01-04 00:59:02 +00:00
baldurk dc8ed153ac Implement callstack gathering and resolution for linux.
* At the moment it only works if the files from the capture are in the
  exact same absolute paths (so generally on the same machine or same
  distro will likely satisfy this, if the library versions are unchanged).
* Also since linux doesn't have a built-in way of verifying that symbols
  match via GUIDs there's no checking yet. We could md5 or otherwise hash
  the files to make sure they match.
* If there is no match at all we don't prompt for better symbols currently.
* I've added a little platform stamp onto the start of the module database
  per-platform just so linux/windows won't try to load each other's symbols
  as otherwise the logs are cross-platform. I didn't bump the serialise
  version as this is a rarely used (and transient, typically) feature, so
  not worth adding backwards compatiblity code. Symbols from an old windows
  log won't resolve but that's not a problem. Symbols from a new log won't
  load and will probably crash in an old version, but I'm not worried about
  that.
2015-01-03 19:30:06 +00:00
baldurk 69bbc5e779 Implement GetAppFolderFilename on linux, unused at the moment 2015-01-03 18:49:02 +00:00
baldurk 7c2d739d06 Make const Stackwalk object return const uint64_t* pointer 2015-01-03 18:48:49 +00:00
baldurk 5496db36bd Don't erase structure with STL members like a big fat idiot 2015-01-03 18:47:36 +00:00
baldurk 415f956744 Implement FileIO::Copy for linux just using fopen and fread/fwrite 2015-01-03 14:57:49 +00:00
baldurk 0346ac8d34 Copy final outputs to bin/ folder on linux 2015-01-01 19:28:50 +00:00
baldurk 42db228452 Add runtime linker path on linux so lib can be found in cwd 2015-01-01 19:28:20 +00:00
baldurk e8391b9c71 Move some information over to COMPILE.md 2015-01-01 15:19:09 +00:00
baldurk 6fde127360 Refactor projects so we don't use xcopy to copy build outputs around
* This makes it easier for my auto build scripts (i.e. without xcopy use
  I can run them from msysgit bash).
* pdblocate now has Profile32&Release32 vs Profile64&Release64. This was
  the easiest way to do it as it has to be compiled in 32bit to interact
  with DIA, but we want it copied to the solutions output folder (x64/...
  or Win32/...)
2015-01-01 11:23:53 +00:00
baldurk 2aaf9e1611 Linux compile fixes 2015-01-01 01:25:09 +00:00
baldurk f167423a4b Create full set of cubemap faces from a single glTexImage2D chunk
* We try and avoid multiple glTexImage2D chunks and instead mark the
  texture as dirty if the parameters are the same. This is to avoid the
  case where it's called repeatedly just to upload new data. However this
  breaks for cubemaps since that's the one case where you HAVE to call it
  multiple times just to create the texture. Once for each face-target.
  So to compensate, we manually do this with the same parameters, then let
  it be overwritten by later chunks & initial data.
2014-12-31 00:00:36 +00:00
baldurk d75b62c072 In case drawbuffers is set to GL_BACK, just set to COLOR_ATTACHMENT0
* This is invalid since we are talking about real FBOs, not the default
  FBO, but it might come up in compatibility context programs and it's
  harmless to correct to try and replay correctly.
2014-12-30 23:56:10 +00:00
baldurk 6c635e3157 For ease of use, skip glDisable for any deprecated compat caps
* This is for working with compatibility profiles, which I only plan to do
  when it's harmless little tweaks like this. Not in a significant way
  (like supporting the fixed function pipeline, display lists, etc).
* The theory here is that glDisable on a deprecated cap is 'harmless' as
  it's already off by not existing. And maybe when capturing a mostly-core
  program that has some legacy code or runs in compatibility, it calls
  glDisable for these caps but never plans to use them. So we can ignore it
* If glEnable is called though, we serialise that and it will fire errors
  and the replay will be wrong. That doesn't change.
2014-12-30 23:51:47 +00:00
baldurk c1727e9035 Don't initialise VAO if attribs have invalid parameters
* Technically we need to try and restore the VAOs even if disabled to the
  correct setup, so that if they're just enabled they are in the expected
  state. However if the attribs are in an invalid state it's not legal to
  just enable them again, so they need to be respecified anyway.
* This might have something to do with compatibility profiles - it was
  seen capturing Wolfenstein: The New Order, which runs 3.2 compatibility.
2014-12-30 23:49:44 +00:00
baldurk 29f7234219 Emulate alpha and intensity formats the same way we do for luminance 2014-12-30 23:48:15 +00:00
baldurk ea5d17989c Compile fix 2014-12-28 20:11:16 +00:00
baldurk efdffaef6e Support all the crazy different pixel store unpack parameters
* If the pixel store parameters are relatively simple we go through a
  fast path that's about the same as it was before, otherwise we manually
  unpack to a tightly packed buffer for serialising. Hopefully this should
  rarely happen.
* glPixelStore parameters are only serialised when capturing a frame, and
  the pixel store parameters at frame start form part of the initial state
  vector.
2014-12-27 01:07:03 +00:00
baldurk f73a7a4a0c Support ARB_map_buffer_alignment on 64byte boundaries
* The real implementation can do more if it wants, and align to a larger
  alignment, but we just return 64 to the program and align to that, which
  satisfies the extension minimum requirements (and chances are no program
  takes advantage of wider alignment anyway).
2014-12-26 16:04:22 +00:00
baldurk cd53d97418 Fix using wrong pointer as 'window' handle for frame capturer 2014-12-26 16:02:26 +00:00
baldurk 1c53c4a3e6 Support ARB_indirect_parameters properly. Bump GL serialise version 2014-12-26 15:44:51 +00:00
baldurk 2788069f4a Add an optional context when debug messages are logged
* Many debug messages are completely useless without context, so to track
  down bugs in crashdumps with logs, etc, it would be very useful to add
  a little snippet to show what function call the message was fired from
  and what the parameters were.
* I'll just add these as/when necessary for tracking bugs.
2014-12-26 12:54:48 +00:00
baldurk fd9d49f13e Add a print of current GL vendor/renderer/version when doing checks 2014-12-26 12:50:59 +00:00
baldurk 23fd72b6ef Fail in a friendly way (ie. not crash) if EXT_dsa isn't present
* Eventually I'll add a wrapper layer so that if EXT_dsa isn't present then
  it just gets emulated, but for now we require it to be present even if
  the captured program didn't use it.
2014-12-26 12:35:27 +00:00
baldurk 4647eee9f2 Handle repeated re-specifying of buffer textures by marking dirty
* Also added handling for dirty buffer textures - there are no contents to
  copy, those are handled with the buffer, so instead we just grab the few
  parameters that are valid to re-specify the buffer texture.
2014-12-26 12:25:41 +00:00
baldurk aec7af04e4 If we're retyping in BindBuffer(), remove any redundant BindBuffer()s 2014-12-26 12:21:43 +00:00
baldurk 3cec05c3d9 Support VAO 0 being used, by creating fake resource record for it
* We pick up the properties of VAO 0 on frame capture as dirty state, and
  then replay it into the fake VAO we were already creating for VAO 0.
* Eventually this record will be entirely trimmed/ignored for programs that
  don't use VAO 0 by frame references, but for now we fetch it needlessly.
  It doesn't seem to fire any errors.
2014-12-26 12:04:19 +00:00
baldurk 47005da118 Attempt to emulate luminance textures as they're quite common still.
* I emulate luminance textures as either GL_RED or GL_RG textures of
  appropriate size, and use the built-in texture swizzling to shunt the
  channels around.
* At the moment, I don't handle further swizzling of the textures (which
  would break the fake layer) as I assume legacy code using luminance texs
  wouldn't use swizzling also, but instead would just update and use the
  appropriate formats themselves.
* The same applies for render buffers, texture views, texture buffers and
  glTexStorage* calls - not handled at the moment, but wouldn't be hard to.
2014-12-25 21:16:33 +00:00
baldurk a9092dd199 Fix case where tex UAV bound could 'hide' out-of-bounds GSM access 2014-12-24 14:02:07 +00:00
baldurk 73100ef681 Protect against crashes by verifying that all resources created 2014-12-24 13:32:10 +00:00
baldurk 0d79a1737f Handle stranger render target formats in pixel history 2014-12-24 13:12:24 +00:00
baldurk fff6cba6db Fix 3D texture visualisation for GL 2014-12-23 23:24:58 +00:00
baldurk ed3c50db87 Leave enum alone for passing to glGetProgramStageiv
* We can't pass GL_COMPUTE_SHADER to glGetProgramPipelineiv in some cases,
  but if we have a program (not pipeline) and want to query, we need the
  enum intact even if the AMD bug workaround is active.
2014-12-23 23:11:25 +00:00
baldurk 3caef1cb8e Handle matrices as GLSL program input/output variables 2014-12-23 00:25:06 +00:00
baldurk 517e3480c4 Don't switch to GL context to fetch VAO/FBO if it's NULL!
* If the 'context shared' VAOs/FBOs hack is on, their context is set to
  NULL (so any context will match the resource), but this also means we
  shouldn't try and bind that context to fetch data.
2014-12-23 00:00:24 +00:00
baldurk e17a543e96 Split texture display shaders into precompiled variants
* GL won't let you define too many texture uniforms, and currently the tex
  sampling code blows it for the texture display shader. So we split it
  by float/uint/sint and pick the right compiled version.
2014-12-22 23:21:15 +00:00
baldurk f9191df92a Add some unhandled sampler types in uniform serialising 2014-12-22 22:18:20 +00:00
baldurk a8422b940a Support StartFrameCapture(NULL) and EndFrameCapture(NULL). Refs #117
* If there's only one device/equivalent around, then allow specifying a
  NULL window for frame capturing and that lone device is the one used.
* This allows for capturing completely headless applications, perhaps doing
  compute or something offline. It also allows capturing applications where
  the rendering happens by sharing textures off to some other API that
  isn't hooked.
2014-12-22 19:09:21 +00:00
baldurk 741e7ab60c Handle no VAO being bound without crashing
* Binding VAO 0 is invalid in core GL, but it's common for programs to do
  so we want to support it - we can show an API error/warning to indicate
  that it's wrong.
2014-12-21 16:58:10 +00:00
baldurk 924270b3b0 Fix cases where setting NULL was being incorrectly completely ignored
* Fixes a fairly serious regression where any capture relying on setting
  NULL as one of several state objects would instead just get the previous
  state left over.
* This was a bug introduced with 7aee40f7a4
  where we checked for whether resources were present in the replay - but
  it didn't account for ResourceIds being 0 in some cases - which is valid
  and corresponds ot setting NULL, but returns false from HasLiveResource.
2014-12-21 13:40:39 +00:00
baldurk 97afe6816a Fixes for mesh viewing on output stages 2014-12-21 13:02:47 +00:00
baldurk fafa036c37 Fix wchar_t to char conversion in renderdoccmd on win32 2014-12-21 12:48:03 +00:00
baldurk f1f72ec8ff Add process for programs to voluntarily remove renderdoc. Refs #115
* To remove renderdoc (e.g. if the API version doesn't match what is
  expected), user code can call RENDERDOC_Shutdown() to remove the running
  thread and undo any library hooks, then unload the dynamic library.
* This still isn't recommended as there could be unexpected side-effects,
  and it will definitely break if this happens after any APIs have been
  initialised, but it's an option.
2014-12-21 11:30:29 +00:00
baldurk 0df6e36ff5 Allow displaying any semantics as 'position' on mesh output view
* This means you can visualise the UVs directly, not just as a colour
  on the regular mesh.
2014-12-20 19:54:52 +00:00
baldurk 3dd6d7d296 Add a note about vendor-specific extensions not being supported 2014-12-20 19:54:52 +00:00
baldurk 3be08dbb71 Add a few more extensions we support, and some more we never will
* There are a handful of ARB and EXT extensions left that aren't in either
  the list of supported, or will-never support. These are ones that I want
  to support but haven't written the code for.
2014-12-20 19:54:51 +00:00
baldurk a1e3d80a6d Add a list of extensions that I never plan to support. 2014-12-20 19:54:51 +00:00
baldurk 9da77952e2 Add some EXT aliases and then report more supported EXT extensions 2014-12-20 19:54:51 +00:00
baldurk 44cdab44b4 Add some more easily-implemented extensions 2014-12-20 19:54:50 +00:00