Skip to content
This repository has been archived by the owner on Jul 19, 2018. It is now read-only.

Tobin secondary cb synch tracking #2066

Open
wants to merge 35 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
9a89f8a
layers:Limited POC of synch object tracking
tobine Aug 2, 2017
c190348
tests:Add positive barrier test
tobine Aug 2, 2017
3c7faff
tests:Add UpdateBufferRaWDependencyMissingBarrier
tobine Aug 2, 2017
4bef066
layers:Generalizing code to add MemAccess per cmd
tobine Aug 4, 2017
a002c91
layers:Add mem access for CmdCopyBuffer
tobine Aug 4, 2017
887e20f
layers:Check for barrier dependency chains
tobine Aug 7, 2017
69363aa
tests:UpdateBufferWaRDependencyWithTwoBarrierChain
tobine Aug 8, 2017
c1f8647
layers:Add CmdBlitImage memory access tracking
tobine Aug 9, 2017
64e8ba6
layers:Add CmdFillBuffer memory access tracking
tobine Aug 9, 2017
aaa0e9c
layers:Add CmdClear*Image memory access tracking
tobine Aug 9, 2017
fb6a585
layers:Add mem access for CmdClearAttachments
tobine Aug 9, 2017
1a7355f
layers:Add state update for CmdClearAttachments
tobine Aug 9, 2017
17ef496
layers:Add CmdResolveImage memory access tracking
tobine Aug 10, 2017
bf4353e
layers:Refactor CmdCopyQueryPoolResults Pre/Post
tobine Aug 10, 2017
1565f4a
layers:Add mem access for CmdCopyQueryPoolResults
tobine Aug 10, 2017
f0babc4
layers:Track draw/dispatch mem access
tobine Aug 11, 2017
002eff1
layers:Only record barriers outside of renderPass
tobine Aug 14, 2017
4ae6e6b
layers:Move barrier recording into a function
tobine Aug 14, 2017
d34b7f2
tests:Add DrawWithBufferWaRandRaWConflicts
tobine Aug 15, 2017
6090e0d
layers:Make all MemAccess conflicts warnings
tobine Aug 15, 2017
9496f8e
layers:Record barriers in CmdWaitEvents
tobine Aug 16, 2017
f9c00a9
layers:Refactor ValidateMemoryAccesses()
tobine Aug 17, 2017
b14e49c
layers:Validate inter-CB memory conflicts
tobine Aug 22, 2017
4cee2df
tests:Add inter-CB memory access conflict test
tobine Aug 24, 2017
7f2d952
layers:Add comment for potential bug
tobine Aug 24, 2017
05fb516
tests: Add positive inter-CB synch test
tobine Aug 24, 2017
26de44e
layers:Fix some win build warnings
tobine Aug 25, 2017
1f772e4
layers:Move inter-CB synch validation to function
tobine Aug 28, 2017
28c25e6
layers:Save mem accesses in read/write maps
tobine Sep 4, 2017
6bd8f60
layers:Disable memory access callback
tobine Sep 4, 2017
0ea81e6
layers:Add inter-secondary-CB mem access checks
tobine Sep 7, 2017
50e317b
tests:Test inter-secondary-CB memory conflict
tobine Sep 7, 2017
b27e552
layers:Streamline descriptor mem access update
tobine Sep 8, 2017
90d9719
layers:Enable memory access warning callback
tobine Sep 12, 2017
96a3862
layers:Add read/write mappings for AMD draws
tobine Sep 13, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
596 changes: 435 additions & 161 deletions layers/buffer_validation.cpp

Large diffs are not rendered by default.

80 changes: 62 additions & 18 deletions layers/buffer_validation.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,16 @@ void RecordClearImageLayout(layer_data *dev_data, GLOBAL_CB_NODE *cb_node, VkIma
VkImageLayout dest_image_layout);

bool PreCallValidateCmdClearColorImage(layer_data *dev_data, VkCommandBuffer commandBuffer, VkImage image,
VkImageLayout imageLayout, uint32_t rangeCount, const VkImageSubresourceRange *pRanges);
VkImageLayout imageLayout, uint32_t rangeCount, const VkImageSubresourceRange *pRanges,
std::vector<MemoryAccess> *mem_accesses);

void PreCallRecordCmdClearImage(layer_data *dev_data, VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout,
uint32_t rangeCount, const VkImageSubresourceRange *pRanges);
uint32_t rangeCount, const VkImageSubresourceRange *pRanges, CMD_TYPE cmd,
std::vector<MemoryAccess> *mem_accesses);

bool PreCallValidateCmdClearDepthStencilImage(layer_data *dev_data, VkCommandBuffer commandBuffer, VkImage image,
VkImageLayout imageLayout, uint32_t rangeCount,
const VkImageSubresourceRange *pRanges);
const VkImageSubresourceRange *pRanges, std::vector<MemoryAccess> *mem_accesses);

bool FindLayoutVerifyNode(layer_data const *device_data, GLOBAL_CB_NODE const *pCB, ImageSubresourcePair imgpair,
IMAGE_CMD_BUF_LAYOUT_NODE &node, const VkImageAspectFlags aspectMask);
Expand Down Expand Up @@ -133,26 +135,63 @@ bool VerifyDestImageLayout(layer_data *dev_data, GLOBAL_CB_NODE *cb_node, VkImag
void TransitionFinalSubpassLayouts(layer_data *dev_data, GLOBAL_CB_NODE *pCB, const VkRenderPassBeginInfo *pRenderPassBegin,
FRAMEBUFFER_STATE *framebuffer_state);

void AddMemoryAccess(CMD_TYPE cmd, std::vector<MemoryAccess> *mem_accesses, MemoryAccess *mem_access, bool write,
uint32_t rw_index);

void AddReadMemoryAccess(CMD_TYPE cmd, std::vector<MemoryAccess> *mem_accesses, MEM_BINDING const &binding, bool precise);

void AddWriteMemoryAccess(CMD_TYPE cmd, std::vector<MemoryAccess> *mem_accesses, MEM_BINDING const &binding, bool precise);

bool CreateAndValidateReadMemoryAccess(debug_report_data const *report_data, CMD_TYPE cmd, VkCommandBuffer command_buffer,
const MemAccessGroup &prev_mem_accesses, std::vector<MemoryAccess> *mem_accesses,
MEM_BINDING const &binding, bool precise, const char *caller);

bool CreateAndValidateWriteMemoryAccess(debug_report_data const *report_data, CMD_TYPE cmd, VkCommandBuffer command_buffer,
const MemAccessGroup &prev_mem_accesses, std::vector<MemoryAccess> *mem_accesses,
MEM_BINDING const &binding, bool precise, const char *caller);

bool MemoryConflict(MemoryAccess const *initial_access, MemoryAccess const *second_access);

bool ValidateMemoryAccesses(debug_report_data const *report_data, VkCommandBuffer command_buffer,
std::unordered_map<VkDeviceMemory, std::vector<MemoryAccess>> &prev_mem_access_map,
std::vector<MemoryAccess> *new_accesses, const char *caller, bool pre_check,
MemoryAccess **early_conflict, MemoryAccess **late_conflict);

bool ValidateRWMemoryAccesses(debug_report_data const *report_data, VkCommandBuffer command_buffer,
MemAccessGroup &prev_mem_accesses, std::vector<MemoryAccess> *read_accesses,
std::vector<MemoryAccess> *write_accesses, const char *caller, bool pre_check,
MemoryAccess **early_conflict, MemoryAccess **late_conflict);

void AddCommandBufferCommandMemoryAccesses(GLOBAL_CB_NODE *cb_state, CMD_TYPE cmd, std::vector<MemoryAccess> *mem_accesses);

bool PreCallValidateCmdCopyImage(layer_data *device_data, GLOBAL_CB_NODE *cb_node, IMAGE_STATE *src_image_state,
IMAGE_STATE *dst_image_state, uint32_t region_count, const VkImageCopy *regions,
VkImageLayout src_image_layout, VkImageLayout dst_image_layout);
VkImageLayout src_image_layout, VkImageLayout dst_image_layout,
std::vector<MemoryAccess> *mem_accesses);

bool PreCallValidateCmdClearAttachments(layer_data *device_data, GLOBAL_CB_NODE *cb_state, uint32_t attachmentCount,
const VkClearAttachment *pAttachments, uint32_t rectCount, const VkClearRect *pRects,
std::vector<MemoryAccess> *mem_accesses);

bool PreCallValidateCmdClearAttachments(layer_data *device_data, VkCommandBuffer commandBuffer, uint32_t attachmentCount,
const VkClearAttachment *pAttachments, uint32_t rectCount, const VkClearRect *pRects);
void PreCallRecordCmdClearAttachments(debug_report_data const *report_data, GLOBAL_CB_NODE *cb_state,
std::vector<MemoryAccess> *mem_accesses);

bool PreCallValidateCmdResolveImage(layer_data *device_data, GLOBAL_CB_NODE *cb_node, IMAGE_STATE *src_image_state,
IMAGE_STATE *dst_image_state, uint32_t regionCount, const VkImageResolve *pRegions);
IMAGE_STATE *dst_image_state, uint32_t regionCount, const VkImageResolve *pRegions,
std::vector<MemoryAccess> *mem_accesses);

void PreCallRecordCmdResolveImage(layer_data *device_data, GLOBAL_CB_NODE *cb_node, IMAGE_STATE *src_image_state,
IMAGE_STATE *dst_image_state);
IMAGE_STATE *dst_image_state, std::vector<MemoryAccess> *mem_accesses);

bool PreCallValidateCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_node, IMAGE_STATE *src_image_state,
bool PreCallValidateCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_state, IMAGE_STATE *src_image_state,
IMAGE_STATE *dst_image_state, uint32_t region_count, const VkImageBlit *regions,
VkImageLayout src_image_layout, VkImageLayout dst_image_layout, VkFilter filter);
VkImageLayout src_image_layout, VkImageLayout dst_image_layout, VkFilter filter,
std::vector<MemoryAccess> *mem_accesses);

void PreCallRecordCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_node, IMAGE_STATE *src_image_state,
void PreCallRecordCmdBlitImage(layer_data *device_data, GLOBAL_CB_NODE *cb_state, IMAGE_STATE *src_image_state,
IMAGE_STATE *dst_image_state, uint32_t region_count, const VkImageBlit *regions,
VkImageLayout src_image_layout, VkImageLayout dst_image_layout);
VkImageLayout src_image_layout, VkImageLayout dst_image_layout,
std::vector<MemoryAccess> *mem_accesses);

bool ValidateCmdBufImageLayouts(layer_data *device_data, GLOBAL_CB_NODE *pCB,
std::unordered_map<ImageSubresourcePair, IMAGE_LAYOUT_NODE> const &globalImageLayoutMap,
Expand Down Expand Up @@ -211,13 +250,16 @@ bool ValidateCopyBufferImageTransferGranularityRequirements(layer_data *device_d

void PreCallRecordCmdCopyImage(layer_data *device_data, GLOBAL_CB_NODE *cb_node, IMAGE_STATE *src_image_state,
IMAGE_STATE *dst_image_state, uint32_t region_count, const VkImageCopy *regions,
VkImageLayout src_image_layout, VkImageLayout dst_image_layout);
VkImageLayout src_image_layout, VkImageLayout dst_image_layout,
std::vector<MemoryAccess> *mem_accesses);

bool PreCallValidateCmdCopyBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *src_buffer_state,
BUFFER_STATE *dst_buffer_state);
bool PreCallValidateCmdCopyBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_state, BUFFER_STATE *src_buffer_state,
BUFFER_STATE *dst_buffer_state, uint32_t region_count, const VkBufferCopy *regions,
std::vector<MemoryAccess> *read_accesses, std::vector<MemoryAccess> *write_accesses);

void PreCallRecordCmdCopyBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *src_buffer_state,
BUFFER_STATE *dst_buffer_state);
BUFFER_STATE *dst_buffer_state, std::vector<MemoryAccess> *read_accesses,
std::vector<MemoryAccess> *write_accesses);

bool PreCallValidateDestroyImageView(layer_data *device_data, VkImageView image_view, IMAGE_VIEW_STATE **image_view_state,
VK_OBJECT *obj_struct);
Expand All @@ -235,9 +277,11 @@ bool PreCallValidateDestroyBufferView(layer_data *device_data, VkBufferView buff
void PostCallRecordDestroyBufferView(layer_data *device_data, VkBufferView buffer_view, BUFFER_VIEW_STATE *buffer_view_state,
VK_OBJECT obj_struct);

bool PreCallValidateCmdFillBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *buffer_state);
bool PreCallValidateCmdFillBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *buffer_state, VkDeviceSize offset,
VkDeviceSize size, std::vector<MemoryAccess> *mem_accesses);

void PreCallRecordCmdFillBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *buffer_state);
void PreCallRecordCmdFillBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *buffer_state,
std::vector<MemoryAccess> *mem_accesses);

bool PreCallValidateCmdCopyImageToBuffer(layer_data *device_data, VkImageLayout srcImageLayout, GLOBAL_CB_NODE *cb_node,
IMAGE_STATE *src_image_state, BUFFER_STATE *dst_buff_state, uint32_t regionCount,
Expand Down
Loading