Derive MVKCmdBeginRenderPass attachment count and imageless status once.
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.h b/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.h
index 621bc70..d18f519 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.h
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.h
@@ -66,7 +66,9 @@
 public:
 	VkResult setContent(MVKCommandBuffer* cmdBuff,
 						const VkRenderPassBeginInfo* pRenderPassBegin,
-						const VkSubpassBeginInfo* pSubpassBeginInfo);
+						const VkSubpassBeginInfo* pSubpassBeginInfo,
+						uint32_t attachmentCount,
+						bool isImageless);
 
 	void encode(MVKCommandEncoder* cmdEncoder) override;
 
diff --git a/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.mm b/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.mm
index 151952f..d043874 100644
--- a/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.mm
+++ b/MoltenVK/MoltenVK/Commands/MVKCmdRenderPass.mm
@@ -47,7 +47,9 @@
 template <size_t N_CV, size_t N_A>
 VkResult MVKCmdBeginRenderPass<N_CV, N_A>::setContent(MVKCommandBuffer* cmdBuff,
 													  const VkRenderPassBeginInfo* pRenderPassBegin,
-													  const VkSubpassBeginInfo* pSubpassBeginInfo) {
+													  const VkSubpassBeginInfo* pSubpassBeginInfo,
+													  uint32_t attachmentCount,
+													  bool isImageless) {
 	MVKCmdBeginRenderPassBase::setContent(cmdBuff, pRenderPassBegin, pSubpassBeginInfo);
 
 	// Add clear values
@@ -58,26 +60,26 @@
 		_clearValues.push_back(pRenderPassBegin->pClearValues[i]);
 	}
 
+	// Add attachments
 	_attachments.clear();	// Clear for reuse
-	bool imageless = false;
-	for (auto* next = (const VkBaseInStructure*)pRenderPassBegin->pNext; next; next = next->pNext) {
-		switch (next->sType) {
-		case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: {
-			const auto* pAttachmentBegin = (VkRenderPassAttachmentBeginInfo*)next;
-			for(uint32_t i = 0; i < pAttachmentBegin->attachmentCount; i++) {
-				_attachments.push_back((MVKImageView*)pAttachmentBegin->pAttachments[i]);
+	_attachments.reserve(attachmentCount);
+	if (isImageless) {
+		for (auto* next = (const VkBaseInStructure*)pRenderPassBegin->pNext; next; next = next->pNext) {
+			switch (next->sType) {
+				case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO: {
+					const auto* pAttachmentBegin = (VkRenderPassAttachmentBeginInfo*)next;
+					for(uint32_t i = 0; i < pAttachmentBegin->attachmentCount; i++) {
+						_attachments.push_back((MVKImageView*)pAttachmentBegin->pAttachments[i]);
+					}
+					break;
+				}
+				default:
+					break;
 			}
-			imageless = true;
-			break;
 		}
-		default:
-			break;
-		}
-	}
-
-	if (!imageless) {
-		for(uint32_t i = 0; i < _framebuffer->getAttachmentCount(); i++) {
-			_attachments.push_back((MVKImageView*)_framebuffer->getAttachment(i));
+	} else {
+		for(uint32_t attIdx = 0; attIdx < attachmentCount; attIdx++) {
+			_attachments.push_back((MVKImageView*)_framebuffer->getAttachment(attIdx));
 		}
 	}
 
diff --git a/MoltenVK/MoltenVK/Vulkan/vulkan.mm b/MoltenVK/MoltenVK/Vulkan/vulkan.mm
index f63434b..ab959e2 100644
--- a/MoltenVK/MoltenVK/Vulkan/vulkan.mm
+++ b/MoltenVK/MoltenVK/Vulkan/vulkan.mm
@@ -1900,23 +1900,31 @@
 	const VkSubpassBeginInfo*					pSubpassBeginInfo) {
 
 	uint32_t attachmentCount = 0;
+	bool isImageless = false;
 	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;
+				isImageless = true;
 				break;
 			}
 			default:
 				break;
 		}
 	}
+	if ( !isImageless ) {
+		auto* mvkFB = (MVKFramebuffer*)pRenderPassBegin->framebuffer;
+		attachmentCount = mvkFB ? (uint32_t)mvkFB->getAttachmentCount() : 0;
+	}
 	MVKAddCmdFrom5Thresholds(BeginRenderPass,
 							 pRenderPassBegin->clearValueCount, 1, 2,
 							 attachmentCount, 0, 1, 2,
 							 commandBuffer,
 							 pRenderPassBegin,
-							 pSubpassBeginInfo);
+							 pSubpassBeginInfo,
+							 attachmentCount,
+							 isImageless);
 }
 
 MVK_PUBLIC_SYMBOL void vkCmdBeginRenderPass(