Skip to content
This repository was archived by the owner on Jul 19, 2018. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
11e2b92
layers:Limited POC of synch object tracking
tobine Aug 2, 2017
bc68b0c
tests:Add positive barrier test
tobine Aug 2, 2017
14fa250
tests:Add UpdateBufferRaWDependencyMissingBarrier
tobine Aug 2, 2017
5a5eed7
layers:Generalizing code to add MemAccess per cmd
tobine Aug 4, 2017
ebfdbb3
layers:Add mem access for CmdCopyBuffer
tobine Aug 4, 2017
5d1d44c
layers:Check for barrier dependency chains
tobine Aug 7, 2017
28ba651
tests:UpdateBufferWaRDependencyWithTwoBarrierChain
tobine Aug 8, 2017
4ccd307
layers:Add CmdBlitImage memory access tracking
tobine Aug 9, 2017
5b80dfe
layers:Add CmdFillBuffer memory access tracking
tobine Aug 9, 2017
036ff89
layers:Add CmdClear*Image memory access tracking
tobine Aug 9, 2017
7acea1c
layers:Add mem access for CmdClearAttachments
tobine Aug 9, 2017
af246a5
layers:Add state update for CmdClearAttachments
tobine Aug 9, 2017
0590dd7
layers:Add CmdResolveImage memory access tracking
tobine Aug 10, 2017
37ac609
layers:Refactor CmdCopyQueryPoolResults Pre/Post
tobine Aug 10, 2017
fbaf56d
layers:Add mem access for CmdCopyQueryPoolResults
tobine Aug 10, 2017
6f051e5
layers:Track draw/dispatch mem access
tobine Aug 11, 2017
e6946d5
layers:Only record barriers outside of renderPass
tobine Aug 14, 2017
7f7b396
layers:Move barrier recording into a function
tobine Aug 14, 2017
b52788d
tests:Add DrawWithBufferWaRandRaWConflicts
tobine Aug 15, 2017
81ce7a1
layers:Make all MemAccess conflicts warnings
tobine Aug 15, 2017
02f3be2
layers:Record barriers in CmdWaitEvents
tobine Aug 16, 2017
bba9c1d
layers:Refactor ValidateMemoryAccesses()
tobine Aug 17, 2017
43c4771
layers:Validate inter-CB memory conflicts
tobine Aug 22, 2017
367e43b
tests:Add inter-CB memory access conflict test
tobine Aug 24, 2017
0a12a4d
layers:Add comment for potential bug
tobine Aug 24, 2017
33ef1aa
tests: Add positive inter-CB synch test
tobine Aug 24, 2017
16fa04b
layers:Fix some win build warnings
tobine Aug 25, 2017
b5c6540
layers:Move inter-CB synch validation to function
tobine Aug 28, 2017
89c36d4
layers:Save mem accesses in read/write maps
tobine Sep 4, 2017
3cf92a5
layers:Disable memory access callback
tobine Sep 4, 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
576 changes: 425 additions & 151 deletions layers/buffer_validation.cpp

Large diffs are not rendered by default.

75 changes: 59 additions & 16 deletions layers/buffer_validation.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,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,24 +135,60 @@ 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,
IMAGE_STATE *dst_image_state, uint32_t regionCount, const VkImageBlit *pRegions, VkFilter filter);
IMAGE_STATE *dst_image_state, uint32_t regionCount, const VkImageBlit *pRegions, VkFilter filter,
std::vector<MemoryAccess> *mem_accesses);

void PreCallRecordCmdBlitImage(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 ValidateCmdBufImageLayouts(layer_data *device_data, GLOBAL_CB_NODE *pCB,
std::unordered_map<ImageSubresourcePair, IMAGE_LAYOUT_NODE> const &globalImageLayoutMap,
Expand Down Expand Up @@ -209,13 +247,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 @@ -233,9 +274,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