Commit Graph

140 Commits

Author SHA1 Message Date
baldurk 1720d321e5 Set general global handle for extension registration work
* When calling the register() function there is no frame or globals, so we need
  to set an internal handle external to that.
* This means functions that get wrapped know that there's a global handler for
  exceptions, which just prints to the log. Otherwise they think they're running
  synchronously and write to an invalid exception handling object.
2018-10-23 15:36:35 +01:00
baldurk 94dfb9890b Allow registering window, panel and context menu items with callbacks 2018-10-23 14:23:12 +01:00
baldurk 67fc971cd9 Add a dummy pass-through conversion for already converted python objects 2018-10-23 14:23:12 +01:00
baldurk dd3a352408 Add registration and loading of extensions through a management window 2018-10-23 14:23:11 +01:00
baldurk 2dd293d691 Add the ability to load/reload global python extensions 2018-10-23 14:23:11 +01:00
baldurk 9e6a5e692e Keep a reference to python function object in wrapped lambda
* This will rarely be relevant, but it ensures if the function is decref'd and
  the lambda is still alive, that we keep the python object alive until we are
  done with it. The primary case for this is persistent callbacks where the
  module is then reloaded.
2018-10-23 14:23:10 +01:00
baldurk 58de3fa8a5 Walk stackframe to find _renderdoc_internal
* When calling functions in modules, the globals are namespaced to the module
2018-10-18 19:36:21 +01:00
baldurk 21a7584c40 Don't import built-in renderdoc modules with prefixed underscores
* This prevents any modules loaded from doing 'import renderdoc' and having it
  work as expected.
2018-10-18 19:16:25 +01:00
baldurk b5854f0fec Implement VK_EXT_transform_feedback, and use it for mesh output
* For pipelines using tessellation or containing a geometry shader we use
  transform feedback to fetch the output of the vertex pipeline after these
  stages.
2018-10-16 16:53:03 +01:00
baldurk 1210f1fd42 Add pipestate.h to swig interface dependencies 2018-10-16 16:26:22 +01:00
baldurk 94496e0e2a Support copying structured lists to each other in python
* This requires a copy otherwise object lifetimes are wrong.
2018-09-20 12:35:37 +01:00
baldurk 9bf00cb1a6 More natural python handling for GetDefaultCaptureOptions, return struct 2018-09-18 18:01:28 +01:00
baldurk babe36bf7e Preserve stdout/stderr from external shader tools and display to user 2018-08-15 13:40:21 +01:00
baldurk 3c7b420e59 Expand SPIR-V disassemblers to general shader processing tools
* Instead of just configuring SPIR-V disassemblers and picking only the first
  one when we need to edit SPIR-V, we allow setting up any shader processor that
  goes between two shader encodings.
* When editing, the default will still be to use embedded source, and then after
  that the first tool that goes from the native shader format to a text format,
  but the drop-down allows you to pick any of them.
* Similarly in the shader viewer you can configure the compilation options and
  method, to choose the compiler you want to use. Embedded command line
  parameters in the shader are automatically appended.
2018-08-09 16:56:53 +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 06d14ff62b Define safe comparisons for python bindings
* In particular this means that it's safe to compare a ResourceId or similar
  against None. It is always not-equal but it's useful to have the comparison
  work and return the expected result instead of throwing a null reference
  exception.
2018-07-06 22:44:17 +01:00
baldurk 1761f5ab36 Highlight variables/registers that have changed 2018-06-22 19:28:33 +01:00
baldurk 52e9a6c01d Pass through line-mapping information for each instruction to UI
* This lets the UI highlight the source line as stepping happens, as well as
  allowing stepping purely in HLSL.
2018-06-22 19:28:30 +01:00
baldurk ff9f5675e9 Display high-level language locals corresponding to registers 2018-06-22 19:28:30 +01:00
baldurk 24adf08a75 Remove references to deleted CommonPipelineState 2018-06-21 17:46:15 +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 bf70aeb64d Handle None being passed from Python for a QWidget pointer 2018-06-14 17:56:18 +01:00
baldurk 206e0f1188 Add quality-of-life/convenience accessor functions to SDObject 2018-05-24 21:42:29 +01:00
baldurk d8a64c4172 Fix compilation on GCC 8. Closes #984 2018-05-15 19:44:17 +01:00
baldurk afb7ea5dab Improve python wrapping of WindowingData
* If we make WindowingData an empty struct not an opaque one, it won't leak memory
* Similarly we need typemaps to allow python to pass plain ints and have them cast to pointers
2018-05-15 19:44:17 +01:00
baldurk 5c26270de0 Implement __hash__() for ResourceId 2018-05-14 16:40:58 +01:00
baldurk f1dcb785a1 Fix implementation of array_setsubscript when deleting a range 2018-05-14 16:40:45 +01:00
baldurk 082ab4d75d GUIInvoke takes a QObject* to avoid callbacks after object lifetime
* The GUIInvoke object takes a QObject, and uses QPointer to check that
  it hasn't been deleted when the callback fires. This prevents delayed
  callbacks from executing after the object has been deleted and
  crashing.
* In most cases the pointer is just 'this'.
2018-05-08 11:54:34 +01:00
baldurk c5612dc7dc Add out typemap for rdcpair that passes through ConvertToPy 2018-04-04 16:19:17 +01:00
Silent 3074ebeb51 Project fixes to fix building from paths with spaces 2018-03-26 15:07:12 +01:00
Baldur Karlsson 68a3f3a31f Filter out previous/next drawcall shortcuts when text editing.
Closes #911

editing.
path.
'ad0678a'.
2018-03-12 15:46:44 +00:00
baldurk ab7fa9e281 Ignore python env vars which might load incompatible libs. Refs #902
* PYTHONHOME is used *ahead* of the python36.zip on Python's default
  search path, so we need to suppress that to make sure it doesn't
  interfere.
2018-03-07 22:18:55 +00:00
baldurk c1ceb3b02a Make PySide2 optional on windows
* It's already optional on linux due to distributions not necessarily
  carrying packages for it yet. We also make it optional on windows
  since by the same measure it's not a huge problem if it's missing, and
  official builds will include it. This means we don't have to ship the
  binary dependencies
2018-02-02 20:47:19 +00:00
baldurk cdca0ee6de Append C++14 standard flag instead of prepending.
* This stops it from being overridden by the global --std=c++11 in the
  root CMakeLists.txt which ends up after it in the command line.
2018-01-18 16:24:55 +00:00
baldurk e305029ddd Update copyright years to 2018 2018-01-01 17:55:29 +00:00
baldurk 2e74989b69 Allow None when converting std::function types
* It just creates an empty callback
2018-01-01 17:31:22 +00:00
baldurk 4c0347f856 Fix compile errors with python bindings on callbacks with return values 2018-01-01 17:31:21 +00:00
baldurk 21d5943d82 Remove dependency on Qt in qrenderdoc python module
* The main addition here apart from some extra stubs is a new rdc type
  for date time objects.
* Although the module doesn't do anything and is only used for docs
  reflection it is desirable to not have to link against Qt as this
  can cause problems when linking the module without unresolved symbols.
2017-12-27 16:05:15 +00:00
baldurk 0f94f7fef7 Fix some int/Py_ssize_t usage in container handling wrappers 2017-12-25 21:33:10 +00:00
baldurk 16804e67b4 Disable debug information in release for generated swig cxx files
* This should avoid C1128 errors.
2017-12-25 20:56:35 +00:00
baldurk a7398525b2 Add simple tab-completion in interactive python shell 2017-12-25 15:05:30 +00:00
baldurk 16f64a5ace Remove use of unnecessary swig generated .py wrappers
* These .py wrappers are relevant for the non-builtin path, but since we
  use -builtin they serve no purpose except to make things more complex.
* So instead we make the module directly exported as 'module' instead of
  '_module'.
* On windows there's no conflict because we have renderdoc.dll vs
  renderdoc.pyd. On linux it's librenderdoc.so vs renderdoc.so.
* To prevent supporting files like .lib / .pdb from conflicting on
  windows we build the python modules into a subdirectory. They're not
  ever used by the UI (it links in the bindings directly).
2017-12-25 15:05:28 +00:00
baldurk 203dca8434 Split out invocation of SPIRVDisassembler into member function 2017-12-22 17:03:08 +00:00
baldurk 417a811fad Expand docstring checks to also check names of symbols in the interface 2017-12-22 14:41:43 +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 b15422f4c1 Re-arrange CMakeLists.txt a bit to separate qrenderdoc & pyrenderdoc
* Now you can build the python modules without building the full UI,
  which is mostly useful for docs builds so we can do a minimal compile
  and still generate the docs.
2017-12-19 18:05:25 +00:00
baldurk 04d38bdfe5 Add renderdoc_python.cxx to qrenderdoc module build
* This is needed for rdcarray template instantiations, otherwise there
  are unresolved linker errors.
2017-12-19 18:02:07 +00:00
baldurk 0b3d56f9f9 Ensure python global shutdown after context has closed 2017-12-19 17:32:12 +00:00
baldurk f2e7f8f1a0 Refactor crash/bug reporter system
* The UI dialog is now in Qt. We run qrenderdoc.exe with a very minimal
  startup to display the dialog and send the report.
* The flow has been simplified to have less text and an easier time to
  just click through and send.
* On the first report, the user is gently nudged to enter their email
  address for contact and by default the email is saved for next time.
  They're not nagged more than once about this.
* Optionally the user can select to upload the capture. This is always
  default off, and there is a confirmation dialog making sure the user
  intended to select it.
* After the bug is reported, a unique URL is generated and returned
  which the user can then click back on to see if there's any update. By
  default the UI will also remember the URL and check it every couple
  of days and alert the user in the help menu that there's an update.
2017-12-19 12:26:34 +00:00
baldurk 03a0a06f60 Remove use of itoa (not portable) 2017-12-15 18:12:01 +00:00