@@ -29,6 +29,7 @@ MetalAdder::MetalAdder(MTL::Device *device)
29
29
30
30
auto str = NS::String::string (" add_arrays" , NS::ASCIIStringEncoding);
31
31
MTL::Function *addFunction = defaultLibrary->newFunction (str);
32
+ defaultLibrary->release ();
32
33
33
34
if (addFunction == nullptr )
34
35
{
@@ -38,6 +39,7 @@ MetalAdder::MetalAdder(MTL::Device *device)
38
39
39
40
// Create a compute pipeline state object.
40
41
_mAddFunctionPSO = _mDevice->newComputePipelineState (addFunction, &error);
42
+ addFunction->release ();
41
43
42
44
if (_mAddFunctionPSO == nullptr )
43
45
{
@@ -55,16 +57,16 @@ MetalAdder::MetalAdder(MTL::Device *device)
55
57
return ;
56
58
}
57
59
60
+ // Allocate three buffers to hold our initial data and the result.
61
+ _mBufferA = _mDevice->newBuffer (bufferSize, MTL::ResourceStorageModeShared);
62
+ _mBufferB = _mDevice->newBuffer (bufferSize, MTL::ResourceStorageModeShared);
63
+ _mBufferResult = _mDevice->newBuffer (bufferSize, MTL::ResourceStorageModeShared);
64
+
58
65
prepareData ();
59
66
}
60
67
61
68
void MetalAdder::prepareData ()
62
69
{
63
- // Allocate three buffers to hold our initial data and the result.
64
-
65
- _mBufferA = _mDevice->newBuffer (bufferSize, MTL::ResourceStorageModeShared);
66
- _mBufferB = _mDevice->newBuffer (bufferSize, MTL::ResourceStorageModeShared);
67
- _mBufferResult = _mDevice->newBuffer (bufferSize, MTL::ResourceStorageModeShared);
68
70
69
71
generateRandomFloatData (_mBufferA);
70
72
generateRandomFloatData (_mBufferB);
@@ -143,3 +145,13 @@ void MetalAdder::verifyResults()
143
145
}
144
146
}
145
147
}
148
+
149
+ MetalAdder::~MetalAdder ()
150
+ {
151
+ _mBufferA->release ();
152
+ _mBufferB->release ();
153
+ _mBufferResult->release ();
154
+
155
+ _mAddFunctionPSO->release ();
156
+ _mCommandQueue->release ();
157
+ }
0 commit comments