unordered_map<VkFramebuffer, unique_ptr<FRAMEBUFFER_STATE>> frameBufferMap;
unordered_map<VkImage, vector<ImageSubresourcePair>> imageSubresourceMap;
unordered_map<ImageSubresourcePair, IMAGE_LAYOUT_NODE> imageLayoutMap;
- unordered_map<VkRenderPass, unique_ptr<RENDER_PASS_STATE>> renderPassMap;
+ unordered_map<VkRenderPass, std::shared_ptr<RENDER_PASS_STATE>> renderPassMap;
unordered_map<VkShaderModule, unique_ptr<shader_module>> shaderModuleMap;
unordered_map<VkDescriptorUpdateTemplateKHR, unique_ptr<TEMPLATE_STATE>> desc_template_map;
unordered_map<VkSwapchainKHR, std::unique_ptr<SWAPCHAIN_NODE>> swapchainMap;
return it->second.get();
}
+std::shared_ptr<RENDER_PASS_STATE> const GetRenderPassStateSharedPtr(layer_data const *dev_data, VkRenderPass renderpass) {
+ auto it = dev_data->renderPassMap.find(renderpass);
+ if (it == dev_data->renderPassMap.end()) {
+ return nullptr;
+ }
+ return it->second;
+}
+
FRAMEBUFFER_STATE *GetFramebufferState(const layer_data *dev_data, VkFramebuffer framebuffer) {
auto it = dev_data->frameBufferMap.find(framebuffer);
if (it == dev_data->frameBufferMap.end()) {
if (framebuffer->createInfo.renderPass != pInfo->renderPass) {
// renderPass that framebuffer was created with must be compatible with local renderPass
skip |=
- validateRenderPassCompatibility(dev_data, "framebuffer", framebuffer->rp_state, "command buffer",
- GetRenderPassState(dev_data, pInfo->renderPass),
+ validateRenderPassCompatibility(dev_data, "framebuffer", framebuffer->rp_state.get(),
+ "command buffer", GetRenderPassState(dev_data, pInfo->renderPass),
"vkBeginCommandBuffer()", VALIDATION_ERROR_0280006e);
}
// Connect this framebuffer and its children to this cmdBuffer
static void PostCallRecordCreateFramebuffer(layer_data *dev_data, const VkFramebufferCreateInfo *pCreateInfo, VkFramebuffer fb) {
// Shadow create info and store in map
std::unique_ptr<FRAMEBUFFER_STATE> fb_state(
- new FRAMEBUFFER_STATE(fb, pCreateInfo, GetRenderPassState(dev_data, pCreateInfo->renderPass)));
+ new FRAMEBUFFER_STATE(fb, pCreateInfo, GetRenderPassStateSharedPtr(dev_data, pCreateInfo->renderPass)));
for (uint32_t i = 0; i < pCreateInfo->attachmentCount; ++i) {
VkImageView view = pCreateInfo->pAttachments[i];
GetFramebufferState(dev_data, pRenderPassBegin->framebuffer));
if (framebuffer->rp_state->renderPass != render_pass_state->renderPass) {
skip |= validateRenderPassCompatibility(dev_data, "render pass", render_pass_state, "framebuffer",
- framebuffer->rp_state, "vkCmdBeginRenderPass()", VALIDATION_ERROR_12000710);
+ framebuffer->rp_state.get(), "vkCmdBeginRenderPass()",
+ VALIDATION_ERROR_12000710);
}
skip |= insideRenderPass(dev_data, cb_node, "vkCmdBeginRenderPass()", VALIDATION_ERROR_17a00017);
skip |= ValidateDependencies(dev_data, framebuffer, render_pass_state);
public:
VkFramebuffer framebuffer;
safe_VkFramebufferCreateInfo createInfo;
- const RENDER_PASS_STATE *rp_state;
+ std::shared_ptr<RENDER_PASS_STATE> const rp_state;
std::vector<MT_FB_ATTACHMENT_INFO> attachments;
- FRAMEBUFFER_STATE(VkFramebuffer fb, const VkFramebufferCreateInfo *pCreateInfo, const RENDER_PASS_STATE *rpstate)
+ FRAMEBUFFER_STATE(VkFramebuffer fb, const VkFramebufferCreateInfo *pCreateInfo,
+ std::shared_ptr<RENDER_PASS_STATE> const rpstate)
: framebuffer(fb), createInfo(pCreateInfo), rp_state(rpstate){};
};
IMAGE_VIEW_STATE *GetImageViewState(const layer_data *, VkImageView);
SWAPCHAIN_NODE *GetSwapchainNode(const layer_data *, VkSwapchainKHR);
GLOBAL_CB_NODE *GetCBNode(layer_data const *my_data, const VkCommandBuffer cb);
-RENDER_PASS_STATE *GetRenderPassState(layer_data const *my_data, VkRenderPass renderpass);
+RENDER_PASS_STATE *GetRenderPassState(layer_data const *dev_data, VkRenderPass renderpass);
+std::shared_ptr<RENDER_PASS_STATE> const GetRenderPassStateSharedPtr(layer_data const *dev_data, VkRenderPass renderpass);
FRAMEBUFFER_STATE *GetFramebufferState(const layer_data *my_data, VkFramebuffer framebuffer);
COMMAND_POOL_NODE *GetCommandPoolNode(layer_data *dev_data, VkCommandPool pool);
shader_module const *GetShaderModuleState(layer_data const *dev_data, VkShaderModule module);