From acf2a805355201dfd3d97e32346d158202921ab1 Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Fri, 12 Feb 2021 19:04:17 -0500 Subject: [PATCH] Remove MVKCommandEncoderState::reset(). MVKCommandEncoderState has numerous subclasses, and the polymorphic MVKCommandEncoderState::resetImpl() requires significant maintenance across these subclasses. It's only use was in disabling depth-stencil state. Remove MVKCommandEncoderState::reset() and all implementations of resetImpl() across all MVKCommandEncoderState subclasses. Remove MVKPipeline::__hasDepthStencilInfo and disable depth-stencil state automatically via cleared Vulkan struct in MVKPipeline. --- .../Commands/MVKCommandEncoderState.h | 40 ------------- .../Commands/MVKCommandEncoderState.mm | 59 ------------------- MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h | 1 - MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm | 15 ++--- 4 files changed, 5 insertions(+), 110 deletions(-) diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h index d4889326..41e4544f 100644 --- a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h +++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.h @@ -83,23 +83,11 @@ public: encodeImpl(stage); } - /** - * Marks this instance as dirty and calls resetImpl() function to reset this instance - * back to initial state. Subclasses must override the resetImpl() function. - */ - void reset() { - _isDirty = true; - _isModified = false; - - resetImpl(); - } - /** Constructs this instance for the specified command encoder. */ MVKCommandEncoderState(MVKCommandEncoder* cmdEncoder) : _cmdEncoder(cmdEncoder) {} protected: virtual void encodeImpl(uint32_t stage) = 0; - virtual void resetImpl() = 0; MVKCommandEncoder* _cmdEncoder; bool _isDirty = false; @@ -127,7 +115,6 @@ public: protected: void encodeImpl(uint32_t stage) override; - void resetImpl() override; MVKPipeline* _pipeline = nullptr; }; @@ -156,7 +143,6 @@ public: protected: void encodeImpl(uint32_t stage) override; - void resetImpl() override; MVKSmallVector _viewports, _dynamicViewports; }; @@ -185,7 +171,6 @@ public: protected: void encodeImpl(uint32_t stage) override; - void resetImpl() override; MVKSmallVector _scissors, _dynamicScissors; }; @@ -212,7 +197,6 @@ public: protected: void encodeImpl(uint32_t stage) override; - void resetImpl() override; bool isTessellating(); MVKSmallVector _pushConstants; @@ -252,7 +236,6 @@ public: protected: void encodeImpl(uint32_t stage) override; - void resetImpl() override; void setStencilState(MVKMTLStencilDescriptorData& stencilInfo, const VkStencilOpState& vkStencil, bool enabled); @@ -283,7 +266,6 @@ public: protected: void encodeImpl(uint32_t stage) override; - void resetImpl() override; uint32_t _frontFaceValue = 0; uint32_t _backFaceValue = 0; @@ -312,7 +294,6 @@ public: protected: void encodeImpl(uint32_t stage) override; - void resetImpl() override; float _depthBiasConstantFactor = 0; float _depthBiasClamp = 0; @@ -340,7 +321,6 @@ public: protected: void encodeImpl(uint32_t stage) override; - void resetImpl() override; float _red = 0; float _green = 0; @@ -440,23 +420,6 @@ protected: bool areSamplerStateBindingsDirty = false; bool needsSwizzle = false; - - void reset() { - bufferBindings.clear(); - textureBindings.clear(); - samplerStateBindings.clear(); - swizzleConstants.clear(); - bufferSizes.clear(); - - areBufferBindingsDirty = false; - areTextureBindingsDirty = false; - areSamplerStateBindingsDirty = false; - swizzleBufferBinding.isDirty = false; - bufferSizeBufferBinding.isDirty = false; - viewRangeBufferBinding.isDirty = false; - - needsSwizzle = false; - } }; }; @@ -524,7 +487,6 @@ public: protected: void encodeImpl(uint32_t stage) override; - void resetImpl() override; void markDirty() override; ResourceBindings<8> _shaderStageResourceBindings[4]; @@ -563,7 +525,6 @@ public: protected: void encodeImpl(uint32_t) override; - void resetImpl() override; ResourceBindings<4> _resourceBindings; }; @@ -589,7 +550,6 @@ public: protected: void encodeImpl(uint32_t) override; - void resetImpl() override; MTLVisibilityResultMode _mtlVisibilityResultMode = MTLVisibilityResultModeDisabled; NSUInteger _mtlVisibilityResultOffset = 0; diff --git a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm index 4919d217..968d0877 100644 --- a/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm +++ b/MoltenVK/MoltenVK/Commands/MVKCommandEncoderState.mm @@ -49,10 +49,6 @@ void MVKPipelineCommandEncoderState::encodeImpl(uint32_t stage) { } } -void MVKPipelineCommandEncoderState::resetImpl() { - _pipeline = nullptr; -} - #pragma mark - #pragma mark MVKViewportCommandEncoderState @@ -103,11 +99,6 @@ void MVKViewportCommandEncoderState::encodeImpl(uint32_t stage) { } } -void MVKViewportCommandEncoderState::resetImpl() { - _viewports.clear(); - _dynamicViewports.clear(); -} - #pragma mark - #pragma mark MVKScissorCommandEncoderState @@ -158,11 +149,6 @@ void MVKScissorCommandEncoderState::encodeImpl(uint32_t stage) { } } -void MVKScissorCommandEncoderState::resetImpl() { - _scissors.clear(); - _dynamicScissors.clear(); -} - #pragma mark - #pragma mark MVKPushConstantsCommandEncoderState @@ -255,10 +241,6 @@ bool MVKPushConstantsCommandEncoderState::isTessellating() { return gp ? gp->isTessellationPipeline() : false; } -void MVKPushConstantsCommandEncoderState::resetImpl() { - _pushConstants.clear(); -} - #pragma mark - #pragma mark MVKDepthStencilCommandEncoderState @@ -363,12 +345,6 @@ void MVKDepthStencilCommandEncoderState::encodeImpl(uint32_t stage) { } } -void MVKDepthStencilCommandEncoderState::resetImpl() { - _depthStencilData = kMVKMTLDepthStencilDescriptorDataDefault; - _hasDepthAttachment = false; - _hasStencilAttachment = false; -} - #pragma mark - #pragma mark MVKStencilReferenceValueCommandEncoderState @@ -406,11 +382,6 @@ void MVKStencilReferenceValueCommandEncoderState::encodeImpl(uint32_t stage) { backReferenceValue: _backFaceValue]; } -void MVKStencilReferenceValueCommandEncoderState::resetImpl() { - _frontFaceValue = 0; - _backFaceValue = 0; -} - #pragma mark - #pragma mark MVKDepthBiasCommandEncoderState @@ -453,13 +424,6 @@ void MVKDepthBiasCommandEncoderState::encodeImpl(uint32_t stage) { } } -void MVKDepthBiasCommandEncoderState::resetImpl() { - _depthBiasConstantFactor = 0; - _depthBiasClamp = 0; - _depthBiasSlopeFactor = 0; - _isEnabled = false; -} - #pragma mark - #pragma mark MVKBlendColorCommandEncoderState @@ -484,13 +448,6 @@ void MVKBlendColorCommandEncoderState::encodeImpl(uint32_t stage) { [_cmdEncoder->_mtlRenderEncoder setBlendColorRed: _red green: _green blue: _blue alpha: _alpha]; } -void MVKBlendColorCommandEncoderState::resetImpl() { - _red = 0; - _green = 0; - _blue = 0; - _alpha = 0; -} - #pragma mark - #pragma mark MVKResourcesCommandEncoderState @@ -808,12 +765,6 @@ void MVKGraphicsResourcesCommandEncoderState::encodeImpl(uint32_t stage) { } } -void MVKGraphicsResourcesCommandEncoderState::resetImpl() { - for (uint32_t i = kMVKShaderStageVertex; i <= kMVKShaderStageFragment; i++) { - _shaderStageResourceBindings[i].reset(); - } -} - #pragma mark - #pragma mark MVKComputeResourcesCommandEncoderState @@ -908,10 +859,6 @@ void MVKComputeResourcesCommandEncoderState::encodeImpl(uint32_t) { }); } -void MVKComputeResourcesCommandEncoderState::resetImpl() { - _resourceBindings.reset(); -} - #pragma mark - #pragma mark MVKOcclusionQueryCommandEncoderState @@ -966,9 +913,3 @@ void MVKOcclusionQueryCommandEncoderState::encodeImpl(uint32_t stage) { [_cmdEncoder->_mtlRenderEncoder setVisibilityResultMode: _mtlVisibilityResultMode offset: _mtlVisibilityResultOffset]; } - -void MVKOcclusionQueryCommandEncoderState::resetImpl() { - _mtlVisibilityResultMode = MTLVisibilityResultModeDisabled; - _mtlVisibilityResultOffset = 0; - _mtlRenderPassQueries.clear(); -} diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h index 2fd70203..cdef8841 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.h @@ -338,7 +338,6 @@ protected: uint32_t _tessCtlLevelBufferIndex = 0; bool _dynamicStateEnabled[kMVKVkDynamicStateCount]; - bool _hasDepthStencilInfo; bool _needsVertexSwizzleBuffer = false; bool _needsVertexBufferSizeBuffer = false; bool _needsVertexViewRangeBuffer = false; diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm index 262c8c8c..873729ef 100644 --- a/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm +++ b/MoltenVK/MoltenVK/GPUObjects/MVKPipeline.mm @@ -241,14 +241,9 @@ void MVKGraphicsPipeline::encode(MVKCommandEncoder* cmdEncoder, uint32_t stage) [mtlCmdEnc setRenderPipelineState: _mtlPipelineState]; } - // Depth stencil state - if (_hasDepthStencilInfo) { - cmdEncoder->_depthStencilState.setDepthStencilState(_depthStencilInfo); - cmdEncoder->_stencilReferenceValueState.setReferenceValues(_depthStencilInfo); - } else { - cmdEncoder->_depthStencilState.reset(); - cmdEncoder->_stencilReferenceValueState.reset(); - } + // Depth stencil state - Cleared _depthStencilInfo values will disable depth testing + cmdEncoder->_depthStencilState.setDepthStencilState(_depthStencilInfo); + cmdEncoder->_stencilReferenceValueState.setReferenceValues(_depthStencilInfo); // Rasterization cmdEncoder->_blendColorState.setBlendColor(_blendConstants[0], _blendConstants[1], @@ -418,8 +413,8 @@ MVKGraphicsPipeline::MVKGraphicsPipeline(MVKDevice* device, // Render pipeline state initMTLRenderPipelineState(pCreateInfo, reflectData); - // Depth stencil content - _hasDepthStencilInfo = mvkSetOrClear(&_depthStencilInfo, pCreateInfo->pDepthStencilState); + // Depth stencil content - clearing will disable depth and stencil testing + mvkSetOrClear(&_depthStencilInfo, pCreateInfo->pDepthStencilState); // Viewports and scissors auto pVPState = pCreateInfo->pViewportState;