~mmach/netext73/webkit2gtk

« back to all changes in this revision

Viewing changes to Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_utils.h

  • Committer: mmach
  • Date: 2023-06-16 17:21:37 UTC
  • Revision ID: netbit73@gmail.com-20230616172137-2rqx6yr96ga9g3kp
1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
// Copyright 2019 The ANGLE Project Authors. All rights reserved.
 
3
// Use of this source code is governed by a BSD-style license that can be
 
4
// found in the LICENSE file.
 
5
//
 
6
// mtl_utils.h:
 
7
//    Declares utilities functions that create Metal shaders, convert from angle enums
 
8
//    to Metal enums and so on.
 
9
//
 
10
 
 
11
#ifndef LIBANGLE_RENDERER_METAL_MTL_UTILS_H_
 
12
#define LIBANGLE_RENDERER_METAL_MTL_UTILS_H_
 
13
 
 
14
#import <Metal/Metal.h>
 
15
 
 
16
#include "angle_gl.h"
 
17
#include "common/PackedEnums.h"
 
18
#include "libANGLE/Context.h"
 
19
#include "libANGLE/Texture.h"
 
20
#include "libANGLE/renderer/metal/mtl_format_utils.h"
 
21
#include "libANGLE/renderer/metal/mtl_resources.h"
 
22
#include "libANGLE/renderer/metal/mtl_state_cache.h"
 
23
 
 
24
namespace rx
 
25
{
 
26
namespace mtl
 
27
{
 
28
 
 
29
NS_ASSUME_NONNULL_BEGIN
 
30
 
 
31
angle::Result InitializeTextureContents(const gl::Context *context,
 
32
                                        const TextureRef &texture,
 
33
                                        const Format &textureObjFormat,
 
34
                                        const gl::ImageIndex &index);
 
35
 
 
36
MTLViewport GetViewport(const gl::Rectangle &rect, double znear = 0, double zfar = 1);
 
37
MTLViewport GetViewportFlipY(const gl::Rectangle &rect,
 
38
                             NSUInteger screenHeight,
 
39
                             double znear = 0,
 
40
                             double zfar  = 1);
 
41
MTLViewport GetViewport(const gl::Rectangle &rect,
 
42
                        NSUInteger screenHeight,
 
43
                        bool flipY,
 
44
                        double znear = 0,
 
45
                        double zfar  = 1);
 
46
MTLScissorRect GetScissorRect(const gl::Rectangle &rect,
 
47
                              NSUInteger screenHeight = 0,
 
48
                              bool flipY              = false);
 
49
 
 
50
AutoObjCPtr<id<MTLLibrary>> CreateShaderLibrary(id<MTLDevice> metalDevice,
 
51
                                                const std::string &source,
 
52
                                                AutoObjCPtr<NSError *> *error);
 
53
 
 
54
AutoObjCPtr<id<MTLLibrary>> CreateShaderLibrary(id<MTLDevice> metalDevice,
 
55
                                                const char *source,
 
56
                                                size_t sourceLen,
 
57
                                                AutoObjCPtr<NSError *> *error);
 
58
 
 
59
AutoObjCPtr<id<MTLLibrary>> CreateShaderLibraryFromBinary(id<MTLDevice> metalDevice,
 
60
                                                          const uint8_t *binarySource,
 
61
                                                          size_t binarySourceLen,
 
62
                                                          AutoObjCPtr<NSError *> *error);
 
63
 
 
64
// Need to define invalid enum value since Metal doesn't define it
 
65
constexpr MTLTextureType MTLTextureTypeInvalid = static_cast<MTLTextureType>(NSUIntegerMax);
 
66
static_assert(sizeof(MTLTextureType) == sizeof(NSUInteger),
 
67
              "MTLTextureType is supposed to be based on NSUInteger");
 
68
 
 
69
constexpr MTLPrimitiveType MTLPrimitiveTypeInvalid = static_cast<MTLPrimitiveType>(NSUIntegerMax);
 
70
static_assert(sizeof(MTLPrimitiveType) == sizeof(NSUInteger),
 
71
              "MTLPrimitiveType is supposed to be based on NSUInteger");
 
72
 
 
73
constexpr MTLIndexType MTLIndexTypeInvalid = static_cast<MTLIndexType>(NSUIntegerMax);
 
74
static_assert(sizeof(MTLIndexType) == sizeof(NSUInteger),
 
75
              "MTLIndexType is supposed to be based on NSUInteger");
 
76
 
 
77
MTLTextureType GetTextureType(gl::TextureType glType);
 
78
 
 
79
MTLSamplerMinMagFilter GetFilter(GLenum filter);
 
80
MTLSamplerMipFilter GetMipmapFilter(GLenum filter);
 
81
MTLSamplerAddressMode GetSamplerAddressMode(GLenum wrap);
 
82
 
 
83
MTLBlendFactor GetBlendFactor(GLenum factor);
 
84
MTLBlendOperation GetBlendOp(GLenum op);
 
85
 
 
86
MTLCompareFunction GetCompareFunc(GLenum func);
 
87
MTLStencilOperation GetStencilOp(GLenum op);
 
88
 
 
89
MTLWinding GetFontfaceWinding(GLenum frontFaceMode, bool invert);
 
90
 
 
91
PrimitiveTopologyClass GetPrimitiveTopologyClass(gl::PrimitiveMode mode);
 
92
MTLPrimitiveType GetPrimitiveType(gl::PrimitiveMode mode);
 
93
MTLIndexType GetIndexType(gl::DrawElementsType type);
 
94
 
 
95
// Useful to set clear color for texture originally having no alpha in GL, but backend's format
 
96
// has alpha channel.
 
97
MTLClearColor EmulatedAlphaClearColor(MTLClearColor color, MTLColorWriteMask colorMask);
 
98
 
 
99
NS_ASSUME_NONNULL_END
 
100
}  // namespace mtl
 
101
}  // namespace rx
 
102
 
 
103
#endif /* LIBANGLE_RENDERER_METAL_MTL_UTILS_H_ */