Metal: avoid uses of autorelease
BUG=chromium:947089
Change-Id: I1e7ef4a91a8b1c6108485b8c99e88a53a25ebb7b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/6160
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
diff --git a/src/dawn_native/metal/RenderPipelineMTL.mm b/src/dawn_native/metal/RenderPipelineMTL.mm
index 9b66bfb..e928e26 100644
--- a/src/dawn_native/metal/RenderPipelineMTL.mm
+++ b/src/dawn_native/metal/RenderPipelineMTL.mm
@@ -238,17 +238,17 @@
}
}
- MTLDepthStencilDescriptor* ComputeDepthStencilDesc(
+ MTLDepthStencilDescriptor* MakeDepthStencilDesc(
const DepthStencilStateDescriptor* descriptor) {
- MTLDepthStencilDescriptor* mtlDepthStencilDescriptor =
- [[MTLDepthStencilDescriptor new] autorelease];
+ MTLDepthStencilDescriptor* mtlDepthStencilDescriptor = [MTLDepthStencilDescriptor new];
+
mtlDepthStencilDescriptor.depthCompareFunction =
ToMetalCompareFunction(descriptor->depthCompare);
mtlDepthStencilDescriptor.depthWriteEnabled = descriptor->depthWriteEnabled;
if (StencilTestEnabled(descriptor)) {
- MTLStencilDescriptor* backFaceStencil = [[MTLStencilDescriptor new] autorelease];
- MTLStencilDescriptor* frontFaceStencil = [[MTLStencilDescriptor new] autorelease];
+ MTLStencilDescriptor* backFaceStencil = [MTLStencilDescriptor new];
+ MTLStencilDescriptor* frontFaceStencil = [MTLStencilDescriptor new];
backFaceStencil.stencilCompareFunction =
ToMetalCompareFunction(descriptor->stencilBack.compare);
@@ -274,7 +274,11 @@
mtlDepthStencilDescriptor.backFaceStencil = backFaceStencil;
mtlDepthStencilDescriptor.frontFaceStencil = frontFaceStencil;
+
+ [backFaceStencil release];
+ [frontFaceStencil release];
}
+
return mtlDepthStencilDescriptor;
}
@@ -316,7 +320,9 @@
descriptorMTL.inputPrimitiveTopology = MTLInputPrimitiveTopology(GetPrimitiveTopology());
- descriptorMTL.vertexDescriptor = MakeVertexDesc();
+ MTLVertexDescriptor* vertexDesc = MakeVertexDesc();
+ descriptorMTL.vertexDescriptor = vertexDesc;
+ [vertexDesc release];
// TODO(kainino@chromium.org): push constants, textures, samplers
@@ -324,7 +330,6 @@
NSError* error = nil;
mMtlRenderPipelineState = [mtlDevice newRenderPipelineStateWithDescriptor:descriptorMTL
error:&error];
- [descriptorMTL.vertexDescriptor release];
[descriptorMTL release];
if (error != nil) {
NSLog(@" error => %@", error);
@@ -333,12 +338,13 @@
}
}
- // create depth stencil state and cache it, fetch the cached depth stencil state when we
- // call setDepthStencilState() for a given render pipeline in CommandBuffer, in order to
+ // Create depth stencil state and cache it, fetch the cached depth stencil state when we
+ // call setDepthStencilState() for a given render pipeline in CommandEncoder, in order to
// improve performance.
- mMtlDepthStencilState =
- [mtlDevice newDepthStencilStateWithDescriptor:ComputeDepthStencilDesc(
- GetDepthStencilStateDescriptor())];
+ MTLDepthStencilDescriptor* depthStencilDesc =
+ MakeDepthStencilDesc(GetDepthStencilStateDescriptor());
+ mMtlDepthStencilState = [mtlDevice newDepthStencilStateWithDescriptor:depthStencilDesc];
+ [depthStencilDesc release];
}
RenderPipeline::~RenderPipeline() {
diff --git a/src/dawn_native/metal/SamplerMTL.mm b/src/dawn_native/metal/SamplerMTL.mm
index 19d374b..7f91a99 100644
--- a/src/dawn_native/metal/SamplerMTL.mm
+++ b/src/dawn_native/metal/SamplerMTL.mm
@@ -66,7 +66,7 @@
Sampler::Sampler(Device* device, const SamplerDescriptor* descriptor)
: SamplerBase(device, descriptor) {
MTLSamplerDescriptor* mtlDesc = [MTLSamplerDescriptor new];
- [mtlDesc autorelease];
+
mtlDesc.minFilter = FilterModeToMinMagFilter(descriptor->minFilter);
mtlDesc.magFilter = FilterModeToMinMagFilter(descriptor->magFilter);
mtlDesc.mipFilter = FilterModeToMipFilter(descriptor->mipmapFilter);
@@ -81,6 +81,8 @@
mtlDesc.borderColor = BorderColor(descriptor->borderColor);
mMtlSamplerState = [device->GetMTLDevice() newSamplerStateWithDescriptor:mtlDesc];
+
+ [mtlDesc release];
}
Sampler::~Sampler() {