Internal change
PiperOrigin-RevId: 493313240
This commit is contained in:
parent
1761cdcef4
commit
b0b38a0013
40
mediapipe/gpu/metal_shared_resources.h
Normal file
40
mediapipe/gpu/metal_shared_resources.h
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#ifndef MEDIAPIPE_GPU_METAL_SHARED_RESOURCES_H_
|
||||||
|
#define MEDIAPIPE_GPU_METAL_SHARED_RESOURCES_H_
|
||||||
|
|
||||||
|
#import <CoreVideo/CVMetalTextureCache.h>
|
||||||
|
#import <CoreVideo/CoreVideo.h>
|
||||||
|
#import <Foundation/NSObject.h>
|
||||||
|
#import <Metal/Metal.h>
|
||||||
|
|
||||||
|
#ifndef __OBJC__
|
||||||
|
#error This class must be built as Objective-C++.
|
||||||
|
#endif // !__OBJC__
|
||||||
|
|
||||||
|
@interface MPPMetalSharedResources : NSObject {
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)init NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
|
@property(readonly) id<MTLDevice> mtlDevice;
|
||||||
|
@property(readonly) id<MTLCommandQueue> mtlCommandQueue;
|
||||||
|
#if COREVIDEO_SUPPORTS_METAL
|
||||||
|
@property(readonly) CVMetalTextureCacheRef mtlTextureCache;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
namespace mediapipe {
|
||||||
|
|
||||||
|
class MetalSharedResources {
|
||||||
|
public:
|
||||||
|
MetalSharedResources();
|
||||||
|
~MetalSharedResources();
|
||||||
|
MPPMetalSharedResources* resources() { return resources_; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
MPPMetalSharedResources* resources_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace mediapipe
|
||||||
|
|
||||||
|
#endif // MEDIAPIPE_GPU_METAL_SHARED_RESOURCES_H_
|
73
mediapipe/gpu/metal_shared_resources.mm
Normal file
73
mediapipe/gpu/metal_shared_resources.mm
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
#import "mediapipe/gpu/metal_shared_resources.h"
|
||||||
|
|
||||||
|
@interface MPPMetalSharedResources ()
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MPPMetalSharedResources {
|
||||||
|
}
|
||||||
|
|
||||||
|
@synthesize mtlDevice = _mtlDevice;
|
||||||
|
@synthesize mtlCommandQueue = _mtlCommandQueue;
|
||||||
|
#if COREVIDEO_SUPPORTS_METAL
|
||||||
|
@synthesize mtlTextureCache = _mtlTextureCache;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
- (instancetype)init {
|
||||||
|
self = [super init];
|
||||||
|
if (self) {
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
#if COREVIDEO_SUPPORTS_METAL
|
||||||
|
if (_mtlTextureCache) {
|
||||||
|
CFRelease(_mtlTextureCache);
|
||||||
|
_mtlTextureCache = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id<MTLDevice>)mtlDevice {
|
||||||
|
@synchronized(self) {
|
||||||
|
if (!_mtlDevice) {
|
||||||
|
_mtlDevice = MTLCreateSystemDefaultDevice();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _mtlDevice;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id<MTLCommandQueue>)mtlCommandQueue {
|
||||||
|
@synchronized(self) {
|
||||||
|
if (!_mtlCommandQueue) {
|
||||||
|
_mtlCommandQueue = [self.mtlDevice newCommandQueue];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _mtlCommandQueue;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if COREVIDEO_SUPPORTS_METAL
|
||||||
|
- (CVMetalTextureCacheRef)mtlTextureCache {
|
||||||
|
@synchronized(self) {
|
||||||
|
if (!_mtlTextureCache) {
|
||||||
|
CVReturn __unused err =
|
||||||
|
CVMetalTextureCacheCreate(NULL, NULL, self.mtlDevice, NULL, &_mtlTextureCache);
|
||||||
|
NSAssert(err == kCVReturnSuccess, @"Error at CVMetalTextureCacheCreate %d ; device %@", err,
|
||||||
|
self.mtlDevice);
|
||||||
|
// TODO: register and flush metal caches too.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _mtlTextureCache;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
namespace mediapipe {
|
||||||
|
|
||||||
|
MetalSharedResources::MetalSharedResources() {
|
||||||
|
resources_ = [[MPPMetalSharedResources alloc] init];
|
||||||
|
}
|
||||||
|
MetalSharedResources::~MetalSharedResources() {}
|
||||||
|
|
||||||
|
} // namespace mediapipe
|
49
mediapipe/gpu/metal_shared_resources_test.mm
Normal file
49
mediapipe/gpu/metal_shared_resources_test.mm
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
// Copyright 2019 The MediaPipe Authors.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import <XCTest/XCTest.h>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include "absl/memory/memory.h"
|
||||||
|
#include "mediapipe/framework/port/threadpool.h"
|
||||||
|
|
||||||
|
#import "mediapipe/gpu/gpu_shared_data_internal.h"
|
||||||
|
#import "mediapipe/gpu/metal_shared_resources.h"
|
||||||
|
|
||||||
|
@interface MPPMetalSharedResourcesTests : XCTestCase {
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MPPMetalSharedResourcesTests
|
||||||
|
|
||||||
|
// This test verifies that the internal Objective-C object is correctly
|
||||||
|
// released when the C++ wrapper is released.
|
||||||
|
- (void)testCorrectlyReleased {
|
||||||
|
__weak id metalRes = nil;
|
||||||
|
std::weak_ptr<mediapipe::GpuResources> weakGpuRes;
|
||||||
|
@autoreleasepool {
|
||||||
|
auto maybeGpuRes = mediapipe::GpuResources::Create();
|
||||||
|
XCTAssertTrue(maybeGpuRes.ok());
|
||||||
|
weakGpuRes = *maybeGpuRes;
|
||||||
|
metalRes = (**maybeGpuRes).metal_shared().resources();
|
||||||
|
XCTAssertNotEqual(weakGpuRes.lock(), nullptr);
|
||||||
|
XCTAssertNotNil(metalRes);
|
||||||
|
}
|
||||||
|
XCTAssertEqual(weakGpuRes.lock(), nullptr);
|
||||||
|
XCTAssertNil(metalRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
Loading…
Reference in New Issue
Block a user