Fix deletion of GPU counter MTLFence while it is being used by MTLCommandBuffer.
Move release of GPU counter MTLFence from MVKCommandEncoder destructor to MTLCommandBuffer completion handler.
This commit is contained in:
parent
da0f15c7b0
commit
2aadca70ce
@ -22,6 +22,7 @@ Released TBD
|
|||||||
- Support base vertex instance support in shader conversion.
|
- Support base vertex instance support in shader conversion.
|
||||||
- Fix alignment between outputs and inputs between shader stages when using nested structures.
|
- Fix alignment between outputs and inputs between shader stages when using nested structures.
|
||||||
- Fix issue where the depth component of a stencil-only renderpass attachment was incorrectly attempting to be stored.
|
- Fix issue where the depth component of a stencil-only renderpass attachment was incorrectly attempting to be stored.
|
||||||
|
- Fix deletion of GPU counter `MTLFence` while it is being used by `MTLCommandBuffer`.
|
||||||
- `MoltenVKShaderConverter` tool defaults to the highest MSL version supported on runtime OS.
|
- `MoltenVKShaderConverter` tool defaults to the highest MSL version supported on runtime OS.
|
||||||
- Update *glslang* version, to use `python3` in *glslang* scripts, to replace missing `python` on *macOS 12.3*.
|
- Update *glslang* version, to use `python3` in *glslang* scripts, to replace missing `python` on *macOS 12.3*.
|
||||||
- Update to latest SPIRV-Cross:
|
- Update to latest SPIRV-Cross:
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
class MVKCommandPool;
|
class MVKCommandPool;
|
||||||
class MVKQueue;
|
|
||||||
class MVKQueueCommandBufferSubmission;
|
class MVKQueueCommandBufferSubmission;
|
||||||
class MVKCommandEncoder;
|
class MVKCommandEncoder;
|
||||||
class MVKCommandEncodingPool;
|
class MVKCommandEncodingPool;
|
||||||
@ -492,8 +491,6 @@ public:
|
|||||||
|
|
||||||
MVKCommandEncoder(MVKCommandBuffer* cmdBuffer);
|
MVKCommandEncoder(MVKCommandBuffer* cmdBuffer);
|
||||||
|
|
||||||
~MVKCommandEncoder() override;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void addActivatedQueries(MVKQueryPool* pQueryPool, uint32_t query, uint32_t queryCount);
|
void addActivatedQueries(MVKQueryPool* pQueryPool, uint32_t query, uint32_t queryCount);
|
||||||
void finishQueries();
|
void finishQueries();
|
||||||
|
@ -830,7 +830,14 @@ void MVKCommandEncoder::encodeTimestampStageCounterSamples() {}
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
id<MTLFence> MVKCommandEncoder::getStageCountersMTLFence() {
|
id<MTLFence> MVKCommandEncoder::getStageCountersMTLFence() {
|
||||||
if ( !_stageCountersMTLFence ) { _stageCountersMTLFence = [getMTLDevice() newFence]; } //retained
|
if ( !_stageCountersMTLFence ) {
|
||||||
|
// Create MTLFence as local ref and pass to completion handler
|
||||||
|
// block to release once MTLCommandBuffer no longer needs it.
|
||||||
|
id<MTLFence> mtlFence = [getMTLDevice() newFence];
|
||||||
|
[_mtlCmdBuffer addCompletedHandler: ^(id<MTLCommandBuffer> mcb) { [mtlFence release]; }];
|
||||||
|
|
||||||
|
_stageCountersMTLFence = mtlFence; // retained
|
||||||
|
}
|
||||||
return _stageCountersMTLFence;
|
return _stageCountersMTLFence;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -899,10 +906,6 @@ MVKCommandEncoder::MVKCommandEncoder(MVKCommandBuffer* cmdBuffer) : MVKBaseDevic
|
|||||||
_stageCountersMTLFence = nil;
|
_stageCountersMTLFence = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
MVKCommandEncoder::~MVKCommandEncoder() {
|
|
||||||
[_stageCountersMTLFence release];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark Support functions
|
#pragma mark Support functions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user