Move calls to MVKCommandBuffer::record...() inside setContent() functions.

Add MVKCmdEndRenderPass::setContent().
This commit is contained in:
Bill Hollings 2020-04-15 22:09:19 -04:00
parent d3e548f3ee
commit cfdf9b50da
6 changed files with 21 additions and 9 deletions

View File

@ -94,6 +94,8 @@ void MVKCmdDraw::setContent(MVKCommandBuffer* cmdBuff,
if ((_firstInstance != 0) && !(getDevice()->_pMetalFeatures->baseVertexInstanceDrawing)) {
setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdDraw(): The current device does not support drawing with a non-zero base instance."));
}
cmdBuff->recordDraw(this);
}
void MVKCmdDraw::encode(MVKCommandEncoder* cmdEncoder) {
@ -288,6 +290,8 @@ void MVKCmdDrawIndexed::setContent(MVKCommandBuffer* cmdBuff,
if ((_vertexOffset != 0) && !(getDevice()->_pMetalFeatures->baseVertexInstanceDrawing)) {
setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdDrawIndexed(): The current device does not support drawing with a non-zero base vertex."));
}
cmdBuff->recordDraw(this);
}
void MVKCmdDrawIndexed::encode(MVKCommandEncoder* cmdEncoder) {
@ -518,6 +522,8 @@ void MVKCmdDrawIndirect::setContent(MVKCommandBuffer* cmdBuff,
if ( !(getDevice()->_pMetalFeatures->indirectDrawing) ) {
setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdDrawIndirect(): The current device does not support indirect drawing."));
}
cmdBuff->recordDraw(this);
}
// This is totally arbitrary, but we're forced to do this because we don't know how many vertices
@ -762,6 +768,8 @@ void MVKCmdDrawIndexedIndirect::setContent(MVKCommandBuffer* cmdBuff,
if ( !(getDevice()->_pMetalFeatures->indirectDrawing) ) {
setConfigurationResult(reportError(VK_ERROR_FEATURE_NOT_PRESENT, "vkCmdDrawIndexedIndirect(): The current device does not support indirect drawing."));
}
cmdBuff->recordDraw(this);
}
void MVKCmdDrawIndexedIndirect::encode(MVKCommandEncoder* cmdEncoder) {
@ -1020,7 +1028,6 @@ void mvkCmdDraw(MVKCommandBuffer* cmdBuff,
uint32_t firstInstance) {
MVKCmdDraw* cmd = cmdBuff->_commandPool->_cmdDrawPool.acquireObject();
cmd->setContent(cmdBuff, vertexCount, instanceCount, firstVertex, firstInstance);
cmdBuff->recordDraw(cmd);
cmdBuff->addCommand(cmd);
}
@ -1032,7 +1039,6 @@ void mvkCmdDrawIndexed(MVKCommandBuffer* cmdBuff,
uint32_t firstInstance) {
MVKCmdDrawIndexed* cmd = cmdBuff->_commandPool->_cmdDrawIndexedPool.acquireObject();
cmd->setContent(cmdBuff, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
cmdBuff->recordDraw(cmd);
cmdBuff->addCommand(cmd);
}
@ -1052,7 +1058,6 @@ void mvkCmdDrawIndirect(MVKCommandBuffer* cmdBuff,
uint32_t stride) {
MVKCmdDrawIndirect* cmd = cmdBuff->_commandPool->_cmdDrawIndirectPool.acquireObject();
cmd->setContent(cmdBuff, buffer, offset, drawCount, stride);
cmdBuff->recordDraw(cmd);
cmdBuff->addCommand(cmd);
}
@ -1063,7 +1068,6 @@ void mvkCmdDrawIndexedIndirect(MVKCommandBuffer* cmdBuff,
uint32_t stride) {
MVKCmdDrawIndexedIndirect* cmd = cmdBuff->_commandPool->_cmdDrawIndexedIndirectPool.acquireObject();
cmd->setContent(cmdBuff, buffer, offset, drawCount, stride);
cmdBuff->recordDraw(cmd);
cmdBuff->addCommand(cmd);
}

View File

@ -133,6 +133,8 @@ void MVKCmdBindPipeline::setContent(MVKCommandBuffer* cmdBuff,
VkPipeline pipeline) {
_bindPoint = pipelineBindPoint;
_pipeline = (MVKPipeline*)pipeline;
cmdBuff->recordBindPipeline(this);
}
void MVKCmdBindPipeline::encode(MVKCommandEncoder* cmdEncoder) {
@ -466,7 +468,6 @@ void mvkCmdBindPipeline(MVKCommandBuffer* cmdBuff,
VkPipeline pipeline) {
MVKCmdBindPipeline* cmd = cmdBuff->_commandPool->_cmdBindPipelinePool.acquireObject();
cmd->setContent(cmdBuff, pipelineBindPoint, pipeline);
cmdBuff->recordBindPipeline(cmd);
cmdBuff->addCommand(cmd);
}

View File

@ -77,6 +77,8 @@ private:
class MVKCmdEndRenderPass : public MVKCommand {
public:
void setContent(MVKCommandBuffer* cmdBuff);
void encode(MVKCommandEncoder* cmdEncoder) override;
MVKCmdEndRenderPass(MVKCommandTypePool<MVKCmdEndRenderPass>* pool);

View File

@ -44,6 +44,8 @@ void MVKCmdBeginRenderPass::setContent(MVKCommandBuffer* cmdBuff,
for (uint32_t i = 0; i < _info.clearValueCount; i++) {
_clearValues.push_back(_info.pClearValues[i]);
}
cmdBuff->recordBeginRenderPass(this);
}
void MVKCmdBeginRenderPass::encode(MVKCommandEncoder* cmdEncoder) {
@ -74,6 +76,10 @@ MVKCmdNextSubpass::MVKCmdNextSubpass(MVKCommandTypePool<MVKCmdNextSubpass>* pool
#pragma mark -
#pragma mark MVKCmdEndRenderPass
void MVKCmdEndRenderPass::setContent(MVKCommandBuffer* cmdBuff) {
cmdBuff->recordEndRenderPass(this);
}
void MVKCmdEndRenderPass::encode(MVKCommandEncoder* cmdEncoder) {
// MVKLogDebug("Encoding vkCmdEndRenderPass(). Elapsed time: %.6f ms.", mvkGetElapsedMilliseconds());
cmdEncoder->endRenderpass();
@ -294,7 +300,6 @@ void mvkCmdBeginRenderPass(MVKCommandBuffer* cmdBuff,
VkSubpassContents contents) {
MVKCmdBeginRenderPass* cmd = cmdBuff->_commandPool->_cmdBeginRenderPassPool.acquireObject();
cmd->setContent(cmdBuff, pRenderPassBegin, contents);
cmdBuff->recordBeginRenderPass(cmd);
cmdBuff->addCommand(cmd);
}
@ -306,7 +311,7 @@ void mvkCmdNextSubpass(MVKCommandBuffer* cmdBuff, VkSubpassContents contents) {
void mvkCmdEndRenderPass(MVKCommandBuffer* cmdBuff) {
MVKCmdEndRenderPass* cmd = cmdBuff->_commandPool->_cmdEndRenderPassPool.acquireObject();
cmdBuff->recordEndRenderPass(cmd);
cmd->setContent(cmdBuff);
cmdBuff->addCommand(cmd);
}

View File

@ -98,7 +98,7 @@ public:
id<MTLBuffer> _initialVisibilityResultMTLBuffer;
#pragma mark Constituent render pass management
#pragma mark Tessellation constituent command management
/** Preps metadata for recording render pass */
void recordBeginRenderPass(MVKCmdBeginRenderPass* mvkBeginRenderPass);

View File

@ -197,7 +197,7 @@ MVKCommandBuffer::~MVKCommandBuffer() {
#pragma mark -
#pragma mark Constituent render pass management
#pragma mark Tessellation constituent command management
void MVKCommandBuffer::recordBeginRenderPass(MVKCmdBeginRenderPass* mvkBeginRenderPass) {
_lastBeginRenderPass = mvkBeginRenderPass;