[SOUP] Certificate decoder always returns GByteArray with zero size
[WebKit-https.git] / Source / WebCore / platform / graphics / metal / GPULegacyDeviceMetal.mm
1 /*
2  * Copyright (C) 2017 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import "config.h"
27 #import "GPULegacyDevice.h"
28
29 #if ENABLE(WEBMETAL)
30
31 #import "Logging.h"
32 #import "WebMetalLayer.h"
33 #import <JavaScriptCore/ArrayBuffer.h>
34 #import <Metal/Metal.h>
35 #import <wtf/BlockObjCExceptions.h>
36
37 namespace WebCore {
38
39 GPULegacyDevice::GPULegacyDevice()
40     : m_metal { adoptNS(MTLCreateSystemDefaultDevice()) }
41 {
42
43     if (!m_metal) {
44         LOG(WebMetal, "GPULegacyDevice::GPULegacyDevice -- could not create the device. This usually means Metal is not available on this hardware.");
45         return;
46     }
47
48     LOG(WebMetal, "GPULegacyDevice::GPULegacyDevice Metal device is %p", m_metal.get());
49
50     BEGIN_BLOCK_OBJC_EXCEPTIONS
51
52     m_layer = adoptNS([[WebMetalLayer alloc] initWithGPUDevice:this]);
53     [m_layer setOpaque:0];
54     [m_layer setName:@"WebMetal Layer"];
55
56     // FIXME: WebMetal - Should this be in the WebMetalLayer initializer?
57     [m_layer setDevice:m_metal.get()];
58     [m_layer setPixelFormat:MTLPixelFormatBGRA8Unorm];
59     [m_layer setFramebufferOnly:YES];
60
61     END_BLOCK_OBJC_EXCEPTIONS
62 }
63
64 void GPULegacyDevice::disconnect()
65 {
66     m_layer.get().context = nullptr;
67     // FIXME: Should we also clear out the device property, which has the MTLDevice?
68 }
69
70 void GPULegacyDevice::reshape(int width, int height) const
71 {
72     [m_layer setBounds:CGRectMake(0, 0, width, height)];
73     [m_layer setDrawableSize:CGSizeMake(width, height)];
74
75     // FIXME: WebMetal - Lots of reshape stuff should go here. See GC3D.
76 }
77
78 CALayer *GPULegacyDevice::platformLayer() const
79 {
80     return m_layer.get();
81 }
82
83 bool GPULegacyDevice::operator!() const
84 {
85     return !m_metal;
86 }
87
88 } // namespace WebCore
89
90 #endif