Consolidate vkCmdBeginRenderPass() and vkCmdBeginRenderPass2KHR() handling.
Add mvkCmdBeginRenderPass() and call from both
vkCmdBeginRenderPass() and vkCmdBeginRenderPass2KHR().
MVKCmdBeginRenderPassBase and MVKCmdBeginRenderPassBase
constructors pass VkSubpassBeginInfo.
Remove overloaded MVKCmdBeginRenderPassBase::setContent().
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.h b/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.h
index 8a66785..621bc70 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.h
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.h
@@ -40,7 +40,7 @@
public:
VkResult setContent(MVKCommandBuffer* cmdBuff,
const VkRenderPassBeginInfo* pRenderPassBegin,
- VkSubpassContents contents);
+ const VkSubpassBeginInfo* pSubpassBeginInfo);
inline MVKRenderPass* getRenderPass() { return _renderPass; }
@@ -66,9 +66,6 @@
public:
VkResult setContent(MVKCommandBuffer* cmdBuff,
const VkRenderPassBeginInfo* pRenderPassBegin,
- VkSubpassContents contents);
- VkResult setContent(MVKCommandBuffer* cmdBuff,
- const VkRenderPassBeginInfo* pRenderPassBegin,
const VkSubpassBeginInfo* pSubpassBeginInfo);
void encode(MVKCommandEncoder* cmdEncoder) override;
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.mm b/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.mm
index 42b84f1..151952f 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.mm
@@ -31,8 +31,8 @@
VkResult MVKCmdBeginRenderPassBase::setContent(MVKCommandBuffer* cmdBuff,
const VkRenderPassBeginInfo* pRenderPassBegin,
- VkSubpassContents contents) {
- _contents = contents;
+ const VkSubpassBeginInfo* pSubpassBeginInfo) {
+ _contents = pSubpassBeginInfo->contents;
_renderPass = (MVKRenderPass*)pRenderPassBegin->renderPass;
_framebuffer = (MVKFramebuffer*)pRenderPassBegin->framebuffer;
_renderArea = pRenderPassBegin->renderArea;
@@ -47,8 +47,8 @@
template <size_t N_CV, size_t N_A>
VkResult MVKCmdBeginRenderPass<N_CV, N_A>::setContent(MVKCommandBuffer* cmdBuff,
const VkRenderPassBeginInfo* pRenderPassBegin,
- VkSubpassContents contents) {
- MVKCmdBeginRenderPassBase::setContent(cmdBuff, pRenderPassBegin, contents);
+ const VkSubpassBeginInfo* pSubpassBeginInfo) {
+ MVKCmdBeginRenderPassBase::setContent(cmdBuff, pRenderPassBegin, pSubpassBeginInfo);
// Add clear values
uint32_t cvCnt = pRenderPassBegin->clearValueCount;
@@ -74,7 +74,7 @@
break;
}
}
-
+
if (!imageless) {
for(uint32_t i = 0; i < _framebuffer->getAttachmentCount(); i++) {
_attachments.push_back((MVKImageView*)_framebuffer->getAttachment(i));
@@ -85,13 +85,6 @@
}
template <size_t N_CV, size_t N_A>
-VkResult MVKCmdBeginRenderPass<N_CV, N_A>::setContent(MVKCommandBuffer* cmdBuff,
- const VkRenderPassBeginInfo* pRenderPassBegin,
- const VkSubpassBeginInfo* pSubpassBeginInfo) {
- return setContent(cmdBuff, pRenderPassBegin, pSubpassBeginInfo->contents);
-}
-
-template <size_t N_CV, size_t N_A>
void MVKCmdBeginRenderPass<N_CV, N_A>::encode(MVKCommandEncoder* cmdEncoder) {
// MVKLogDebug("Encoding vkCmdBeginRenderPass(). Elapsed time: %.6f ms.", mvkGetElapsedMilliseconds());
cmdEncoder->beginRenderpass(this,
diff --git a/MoltenVK/MoltenVK/Vulkan/vulkan.mm b/MoltenVK/MoltenVK/Vulkan/vulkan.mm
index e595e7e..f63434b 100644
--- a/MoltenVK/MoltenVK/Vulkan/vulkan.mm
+++ b/MoltenVK/MoltenVK/Vulkan/vulkan.mm
@@ -1893,12 +1893,12 @@
MVKTraceVulkanCallEnd();
}
-MVK_PUBLIC_SYMBOL void vkCmdBeginRenderPass(
- VkCommandBuffer commandBuffer,
- const VkRenderPassBeginInfo* pRenderPassBegin,
- VkSubpassContents contents) {
-
- MVKTraceVulkanCallStart();
+// Consolidation function
+static void mvkCmdBeginRenderPass(
+ VkCommandBuffer commandBuffer,
+ const VkRenderPassBeginInfo* pRenderPassBegin,
+ const VkSubpassBeginInfo* pSubpassBeginInfo) {
+
uint32_t attachmentCount = 0;
for (const auto* next = (VkBaseInStructure*)pRenderPassBegin->pNext; next; next = next->pNext) {
switch(next->sType) {
@@ -1916,7 +1916,22 @@
attachmentCount, 0, 1, 2,
commandBuffer,
pRenderPassBegin,
- contents);
+ pSubpassBeginInfo);
+}
+
+MVK_PUBLIC_SYMBOL void vkCmdBeginRenderPass(
+ VkCommandBuffer commandBuffer,
+ const VkRenderPassBeginInfo* pRenderPassBegin,
+ VkSubpassContents contents) {
+
+ MVKTraceVulkanCallStart();
+
+ VkSubpassBeginInfo spBeginInfo;
+ spBeginInfo.sType = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO;
+ spBeginInfo.pNext = nullptr;
+ spBeginInfo.contents = contents;
+
+ mvkCmdBeginRenderPass(commandBuffer, pRenderPassBegin, &spBeginInfo);
MVKTraceVulkanCallEnd();
}
@@ -2330,24 +2345,7 @@
const VkSubpassBeginInfo* pSubpassBeginInfo) {
MVKTraceVulkanCallStart();
- uint32_t attachmentCount = 0;
- for (const auto* next = (VkBaseInStructure*)pRenderPassBegin->pNext; next; next = next->pNext) {
- switch(next->sType) {
- case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: {
- auto* pAttachmentBegin = (VkRenderPassAttachmentBeginInfo*)next;
- attachmentCount = pAttachmentBegin->attachmentCount;
- break;
- }
- default:
- break;
- }
- }
- MVKAddCmdFrom5Thresholds(BeginRenderPass,
- pRenderPassBegin->clearValueCount, 1, 2,
- attachmentCount, 0, 1, 2,
- commandBuffer,
- pRenderPassBegin,
- pSubpassBeginInfo);
+ mvkCmdBeginRenderPass(commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
MVKTraceVulkanCallEnd();
}