Commit Graph

1846 Commits

Author SHA1 Message Date
baldurk 5b7f60ebe1 Handle CmdWaitEvents by creating an event to set immediately before 2016-02-07 18:45:46 +01:00
baldurk 6e6a855a33 [Sparse #7] Serialise out the memory for any bound to sparse resources 2016-02-07 18:45:43 +01:00
baldurk 2765de1467 Add drawcall entries for a few copy and clear functions 2016-02-07 18:45:42 +01:00
baldurk 9be607255e [Sparse #6] Implement sparse initial state stubs - page tables only 2016-02-07 18:45:41 +01:00
baldurk fe8440363b [Sparse #5] Implement stubs for updating page tables (opaque or image)
* Not supporting images with arrays or mips for now as that becomes
  more complicated. In theory a page table each, but then need to handle
  mip tail and stuff.
2016-02-07 18:45:41 +01:00
baldurk 28f448ea6f [Sparse #4] Serialise out sparse binding changes that happen mid-frame
* Also add stub calls to update in-memory tracked pages
2016-02-07 18:45:40 +01:00
baldurk 803e626e8d [Sparse #3] Create sparse info structs on resource creation 2016-02-07 18:45:39 +01:00
baldurk 8f3b2c5b00 [Sparse #2] Redirect sparse resources to different initial state stubs 2016-02-07 18:45:38 +01:00
baldurk 702f487170 [Sparse #1] Track memory referencing of sparse resources into queues
* Normal resources have a single memory bind that can be added to frame
  references when the resource is. Sparse resources don't have that easy
  single mapping.
* Calls to MarkResourceFrameReferenced with a 0 ResourceId aren't a
  real problem, but we have to be careful when dirtying resources.
* We don't have to dirty memory that's sparsely bound as we'll dirty it
  as soon as its sparsely bound. We do have to worry about making sure
  that memory is correctly frame referenced.
* To do this command buffers track the sparsemapping structures (will be
  created for all sparse resources) that are referenced underneath them.
  Then at queue submit time the current sparse mapping is iterated and
  all bound memory marked frame referenced.
* For most cases where a buffer is bound or similar, we can directly add
  the sparsemapping from the resource record. For descriptor sets we
  must do this indirectly - by marking any bindframerefs in the descset
  record with a bit indicating that the associated resource is sparse,
  then at submit time when iterating the bindframerefs, taking any with
  the bit set and looking up its record to find the sparsemapping.
2016-02-07 18:45:37 +01:00
baldurk 437d350725 Share code between Record and Merge Transitions 2016-02-07 18:45:35 +01:00
baldurk 12843544e2 Rename ImageRegionState members to match VkImageMemoryBarrier members
* This will let us re-use logic on either one in Record/MergeTransitions
2016-02-07 18:45:34 +01:00
baldurk 5990b996e2 Add MergeTransitions function (copy-pasted)
* This will merge recorded transitions from second level command buffers
  into first level command buffers.
2016-02-07 18:45:33 +01:00
baldurk 5586ae028f Record secondary command buffers and execute as block
* Not supporting image transitions within secondary command buffers, and
  doesn't support partial executes of secondary command buffers on the
  replay side.
2016-02-07 18:45:32 +01:00
baldurk 9fceda593f Fix recording transitions into wrong place on capture 2016-02-07 18:45:31 +01:00
baldurk efc0aa5a08 Mark function as not needing serialised 2016-02-07 18:45:30 +01:00
baldurk 64aa299090 Store subpasses in creation info, use to fetch active attachments 2016-02-07 18:45:28 +01:00
baldurk 2a6e33ad0e Handle CmdNextSubpass and restore proper subpass on single-draw replay
* Not sure when a renderpass clear effects should be available for an
  attachment that isn't used in the first subpass. At the moment the
  clear doesn't show up until the first draw, but that's not such a bad
  bug even if it's our side rather than driver's.
2016-02-07 18:45:27 +01:00
baldurk 3dcb0411b2 Improve printing of array constants 2016-02-07 18:45:26 +01:00
baldurk fe449eca25 Declare function-local variables better 2016-02-07 18:45:26 +01:00
baldurk b5b8cf574d Handle GLSL (not SPIR-V) being passed to shader module create.
* We can't analyse or reflect it at all, but we should at least pass it
  through.
* Currently invalid but there will probably be extensions that allow
  this, whether or not we'll allow them is a different matter.
2016-02-07 18:45:24 +01:00
baldurk 474c397637 Support push constants, store in pipeline state & restore replaying draw 2016-02-07 18:45:23 +01:00
baldurk d7dae641d2 Tidy up of new image initial state saving 2016-02-07 18:45:22 +01:00
baldurk 9b538c0221 Fixup for multiple mips 2016-02-07 18:45:21 +01:00
baldurk 5d9952cdba Start moving images to do proper copies to buffers for init states 2016-02-07 18:45:20 +01:00
baldurk d36ef2a001 Split out image and memory initial state handling 2016-02-07 18:45:19 +01:00
baldurk 3e332567d6 Pipelines should have created renderpass as a parent 2016-02-07 18:45:19 +01:00
baldurk c504cc456b Improve printing of begin/end render pass load/store operations 2016-02-07 18:45:17 +01:00
baldurk ba95d887f8 Don't remap memory indices for vkAllocMemory while in replay 2016-02-07 18:45:15 +01:00
baldurk 354e64a844 Pass back buffers and buffer information 2016-02-07 18:45:12 +01:00
baldurk b2676c2861 Store last swapchain presented and use it instead if none is specified 2016-02-07 18:45:11 +01:00
baldurk d198569313 Make swapchains parents of im and put GetSwapchainImages in swap record 2016-02-07 18:45:10 +01:00
baldurk 58703dd348 Don't try and create our own layer on replay if it was in createInfo 2016-02-07 18:45:09 +01:00
baldurk 2d8a6640eb Update VKTODO with note on blocker 2016-02-07 18:45:08 +01:00
baldurk 8696b2133c Remove VKTODO that is handled 2016-02-07 18:45:07 +01:00
baldurk 4fe74824b1 Switch buffer offsets and lengths to 64-bit, downcast only where needed 2016-02-07 18:45:06 +01:00
baldurk 6f351c05e1 Fixes for storing & displaying dynamic offsets in pipeline state 2016-02-07 18:45:04 +01:00
baldurk bb4522c2b7 Minor shader cleanup 2016-02-07 18:45:03 +01:00
baldurk fb3ccc9994 Finish map-intercept handling for now.
* Currently I've decided to stick with the scheme of reading back from
  mapped pointers where necessary to either compare or serialise. This
  is because the bookkeeping for intercepting memory maps is quite
  complex and right now it seems hard to justify as the overhead of the
  readback is not significant enough to worry about. Unless we encounter
  a case where the readback is hugely slower and frame captures begin to
  take 10s of seconds longer, it's not justifiable.
2016-02-07 18:45:01 +01:00
baldurk 34e37257bd Add explanation of current plan for memory map handling 2016-02-07 18:45:00 +01:00
baldurk 79e7785718 Move function to more appropriate file 2016-02-07 18:44:59 +01:00
baldurk 156c75b26d Modify memory properties to discourage coherent maps & remap memory idxs 2016-02-07 18:44:58 +01:00
baldurk 6bdf285166 Use consistent serialiser pointer 2016-02-07 18:44:58 +01:00
baldurk 685032e78c Store renderpass load/store ops and display in drawcall names 2016-02-07 18:44:56 +01:00
baldurk dd57110036 Make a drawcall for render pass end 2016-02-07 18:44:55 +01:00
baldurk 1d092f6b87 Remove some VKTODOs that are judged not relevant anymore 2016-02-07 18:44:54 +01:00
baldurk 7b952c53ef Move loadmodule/getprocaddress code into os_specific 2016-02-07 18:44:53 +01:00
baldurk 55914f99ae GL hooks no longer need to be disabled - just don't hook nv VK driver 2016-02-07 18:44:52 +01:00
baldurk 6da044ae0a Remove hardcoded hack to clear backbuffer to black
* Now handled as a runtime created init state, the same as if we started
  skipping initial states for large images that are write-only
2016-02-07 18:44:51 +01:00
baldurk da15b25789 Handle image dirty & initial state tracking more correctly
* Still not doing buffer<->image copy for proper decode/encode.
* Images are dirtied in preference to their memory, and their initial
  state consists of the memory backing behind them, which is copied
  and restored in the same way as dirty memory.
2016-02-07 18:44:50 +01:00
baldurk 97527d273d Add memory creation info 2016-02-07 18:44:50 +01:00