-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflip_y.patch
67 lines (63 loc) · 2.96 KB
/
flip_y.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
diff --git a/src/libANGLE/renderer/metal/ContextMtl.mm b/src/libANGLE/renderer/metal/ContextMtl.mm
index c013093ec0..d04ad9c52c 100644
--- a/src/libANGLE/renderer/metal/ContextMtl.mm
+++ b/src/libANGLE/renderer/metal/ContextMtl.mm
@@ -1505,7 +1505,7 @@ ProgramExecutableImpl *ContextMtl::createProgramExecutable(const gl::ProgramExec
// Framebuffer creation
FramebufferImpl *ContextMtl::createFramebuffer(const gl::FramebufferState &state)
{
- return new FramebufferMtl(state, this, /* flipY */ false);
+ return new FramebufferMtl(state, this);
}
// Texture creation
diff --git a/src/libANGLE/renderer/metal/DisplayMtl.mm b/src/libANGLE/renderer/metal/DisplayMtl.mm
index 6d24b3273b..81fedacb55 100644
--- a/src/libANGLE/renderer/metal/DisplayMtl.mm
+++ b/src/libANGLE/renderer/metal/DisplayMtl.mm
@@ -910,6 +910,8 @@ void DisplayMtl::initializeExtensions() const
// Reset
mNativeExtensions = gl::Extensions();
+ mNativeExtensions.framebufferFlipYMESA = true;
+
// Enable this for simple buffer readback testing, but some functionality is missing.
// NOTE(hqle): Support full mapBufferRangeEXT extension.
mNativeExtensions.mapbufferOES = true;
diff --git a/src/libANGLE/renderer/metal/FrameBufferMtl.h b/src/libANGLE/renderer/metal/FrameBufferMtl.h
index 84e5326b72..29d0c3d4d7 100644
--- a/src/libANGLE/renderer/metal/FrameBufferMtl.h
+++ b/src/libANGLE/renderer/metal/FrameBufferMtl.h
@@ -29,7 +29,7 @@ class SurfaceMtl;
class FramebufferMtl : public FramebufferImpl
{
public:
- explicit FramebufferMtl(const gl::FramebufferState &state, ContextMtl *context, bool flipY);
+ explicit FramebufferMtl(const gl::FramebufferState &state, ContextMtl *context);
~FramebufferMtl() override;
void destroy(const gl::Context *context) override;
diff --git a/src/libANGLE/renderer/metal/FrameBufferMtl.mm b/src/libANGLE/renderer/metal/FrameBufferMtl.mm
index f97f7b0af7..bf36c29df7 100644
--- a/src/libANGLE/renderer/metal/FrameBufferMtl.mm
+++ b/src/libANGLE/renderer/metal/FrameBufferMtl.mm
@@ -125,11 +125,11 @@ angle::Result Copy2DTextureSlice0Level0ToTempTexture(const gl::Context *context,
} // namespace
// FramebufferMtl implementation
-FramebufferMtl::FramebufferMtl(const gl::FramebufferState &state, ContextMtl *context, bool flipY)
+FramebufferMtl::FramebufferMtl(const gl::FramebufferState &state, ContextMtl *context)
: FramebufferImpl(state),
mColorRenderTargets(context->getNativeCaps().maxColorAttachments, nullptr),
mBackbuffer(nullptr),
- mFlipY(flipY)
+ mFlipY(state.getFlipY())
{
reset();
}
@@ -707,6 +707,9 @@ angle::Result FramebufferMtl::syncState(const gl::Context *context,
{
switch (dirtyBit)
{
+ case gl::Framebuffer::DIRTY_BIT_FLIP_Y:
+ mFlipY = mState.getFlipY();
+ break;
case gl::Framebuffer::DIRTY_BIT_DEPTH_ATTACHMENT:
ANGLE_TRY(updateDepthRenderTarget(context));
break;