diff options
| author | Tobin Ehlis <tobine@ad.corp.google.com> | 2016-06-07 06:06:01 -0600 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-06-20 14:31:51 -0600 |
| commit | d5d2f7606389a2ba9d27e23899c0ded782eb7559 (patch) | |
| tree | 315b63e5875e43a80ebb4f6e46f6f80828d07005 | |
| parent | 592ca3638fa62d3db95d2bf69b5c3594068e6477 (diff) | |
| download | usermoji-d5d2f7606389a2ba9d27e23899c0ded782eb7559.tar.xz | |
layers: Add PSO render pass compability check
At draw time, the active render pass must be compatible with the render
pass that the gfx pipeline was created with.
| -rw-r--r-- | layers/core_validation.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 29703f65..b4d8e510 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -2151,7 +2151,7 @@ static bool attachment_references_compatible(const uint32_t index, const VkAttac } // For give primary and secondary RenderPass objects, verify that they're compatible -static bool verify_renderpass_compatibility(layer_data *my_data, const VkRenderPass primaryRP, const VkRenderPass secondaryRP, +static bool verify_renderpass_compatibility(const layer_data *my_data, const VkRenderPass primaryRP, const VkRenderPass secondaryRP, string &errorMsg) { auto primary_render_pass = getRenderPass(my_data, primaryRP); auto secondary_render_pass = getRenderPass(my_data, secondaryRP); @@ -2849,6 +2849,21 @@ static bool validatePipelineDrawtimeState(layer_data const *my_data, reinterpret_cast<const uint64_t &>(pPipeline->pipeline)); } } + // Verify that PSO creation renderPass is compatible with active renderPass + if (pCB->activeRenderPass) { + std::string err_string; + if (!verify_renderpass_compatibility(my_data, pCB->activeRenderPass->renderPass, pPipeline->graphicsPipelineCI.renderPass, + err_string)) { + // renderPass that PSO was created with must be compatible with active renderPass that PSO is being used with + skip_call |= + log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, + reinterpret_cast<const uint64_t &>(pPipeline->pipeline), __LINE__, DRAWSTATE_RENDERPASS_INCOMPATIBLE, "DS", + "At Draw time the active render pass (0x%" PRIxLEAST64 ") is incompatible w/ gfx pipeline " + "(0x%" PRIxLEAST64 ") that was created w/ render pass (0x%" PRIxLEAST64 ") due to: %s", + reinterpret_cast<uint64_t &>(pCB->activeRenderPass->renderPass), reinterpret_cast<uint64_t &>(pPipeline), + reinterpret_cast<const uint64_t &>(pPipeline->graphicsPipelineCI.renderPass), err_string.c_str()); + } + } // TODO : Add more checks here return skip_call; |
