1*c8dee2aaSAndroid Build Coastguard Worker// Copyright 2019 Google LLC. 2*c8dee2aaSAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. 3*c8dee2aaSAndroid Build Coastguard Worker 4*c8dee2aaSAndroid Build Coastguard Worker#include "tools/skottie_ios_app/SkMetalViewBridge.h" 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Worker#include "include/core/SkColorSpace.h" 7*c8dee2aaSAndroid Build Coastguard Worker#include "include/core/SkColorType.h" 8*c8dee2aaSAndroid Build Coastguard Worker#include "include/core/SkSurface.h" 9*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/GrBackendSurface.h" 10*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/GrContextOptions.h" 11*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/GrDirectContext.h" 12*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/mtl/GrMtlBackendContext.h" 13*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/mtl/GrMtlDirectContext.h" 14*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/mtl/GrMtlTypes.h" 15*c8dee2aaSAndroid Build Coastguard Worker#include "include/gpu/ganesh/mtl/SkSurfaceMetal.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker#import <Metal/Metal.h> 18*c8dee2aaSAndroid Build Coastguard Worker#import <MetalKit/MetalKit.h> 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Workersk_sp<SkSurface> SkMtkViewToSurface(MTKView* mtkView, GrRecordingContext* rContext) { 21*c8dee2aaSAndroid Build Coastguard Worker if (!rContext || 22*c8dee2aaSAndroid Build Coastguard Worker MTLPixelFormatDepth32Float_Stencil8 != [mtkView depthStencilPixelFormat] || 23*c8dee2aaSAndroid Build Coastguard Worker MTLPixelFormatBGRA8Unorm != [mtkView colorPixelFormat]) { 24*c8dee2aaSAndroid Build Coastguard Worker return nullptr; 25*c8dee2aaSAndroid Build Coastguard Worker } 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker const SkColorType colorType = kBGRA_8888_SkColorType; // MTLPixelFormatBGRA8Unorm 28*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkColorSpace> colorSpace = nullptr; // MTLPixelFormatBGRA8Unorm 29*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceOrigin origin = kTopLeft_GrSurfaceOrigin; 30*c8dee2aaSAndroid Build Coastguard Worker const SkSurfaceProps surfaceProps; 31*c8dee2aaSAndroid Build Coastguard Worker int sampleCount = (int)[mtkView sampleCount]; 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker return SkSurfaces::WrapMTKView(rContext, 34*c8dee2aaSAndroid Build Coastguard Worker (__bridge GrMTLHandle)mtkView, 35*c8dee2aaSAndroid Build Coastguard Worker origin, 36*c8dee2aaSAndroid Build Coastguard Worker sampleCount, 37*c8dee2aaSAndroid Build Coastguard Worker colorType, 38*c8dee2aaSAndroid Build Coastguard Worker colorSpace, 39*c8dee2aaSAndroid Build Coastguard Worker &surfaceProps); 40*c8dee2aaSAndroid Build Coastguard Worker} 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard WorkerGrContextHolder SkMetalDeviceToGrContext(id<MTLDevice> device, id<MTLCommandQueue> queue) { 43*c8dee2aaSAndroid Build Coastguard Worker GrMtlBackendContext backendContext = {}; 44*c8dee2aaSAndroid Build Coastguard Worker backendContext.fDevice.reset((__bridge void*)device); 45*c8dee2aaSAndroid Build Coastguard Worker backendContext.fQueue.reset((__bridge void*)queue); 46*c8dee2aaSAndroid Build Coastguard Worker GrContextOptions grContextOptions; // set different options here. 47*c8dee2aaSAndroid Build Coastguard Worker return GrContextHolder(GrDirectContexts::MakeMetal(backendContext, grContextOptions).release()); 48*c8dee2aaSAndroid Build Coastguard Worker} 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Workervoid SkMtkViewConfigForSkia(MTKView* mtkView) { 51*c8dee2aaSAndroid Build Coastguard Worker [mtkView setDepthStencilPixelFormat:MTLPixelFormatDepth32Float_Stencil8]; 52*c8dee2aaSAndroid Build Coastguard Worker [mtkView setColorPixelFormat:MTLPixelFormatBGRA8Unorm]; 53*c8dee2aaSAndroid Build Coastguard Worker [mtkView setSampleCount:1]; 54*c8dee2aaSAndroid Build Coastguard Worker} 55