Bug 1729395 - Handle message sender going away during message processing r=robwu
[gecko.git] / dom / canvas / WebGLParent.h
blobff79b7234c2cfc4f6bffaecce092f0ad8ab989f4
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef WEBGLPARENT_H_
7 #define WEBGLPARENT_H_
9 #include "mozilla/GfxMessageUtils.h"
10 #include "mozilla/dom/PWebGLParent.h"
11 #include "mozilla/WeakPtr.h"
12 #include "mozilla/dom/IpdlQueue.h"
14 namespace mozilla {
16 class HostWebGLContext;
17 class WebGLChild;
19 namespace layers {
20 class SharedSurfaceTextureClient;
21 class SurfaceDescriptor;
22 } // namespace layers
24 namespace dom {
26 class WebGLParent : public PWebGLParent, public SupportsWeakPtr {
27 friend PWebGLParent;
29 public:
30 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(WebGLParent, override);
31 using OtherSideActor = WebGLChild;
33 mozilla::ipc::IPCResult RecvInitialize(const webgl::InitContextDesc&,
34 webgl::InitContextResult* out);
36 WebGLParent(); // For IPDL
38 using IPCResult = mozilla::ipc::IPCResult;
40 IPCResult RecvDispatchCommands(mozilla::ipc::Shmem&&, uint64_t);
42 IPCResult RecvGetBufferSubData(GLenum target, uint64_t srcByteOffset,
43 uint64_t byteSize, mozilla::ipc::Shmem* ret);
44 IPCResult RecvGetFrontBufferSnapshot(webgl::FrontBufferSnapshotIpc* ret);
45 IPCResult RecvReadPixels(const webgl::ReadPixelsDesc&, uint64_t byteSize,
46 webgl::ReadPixelsResultIpc* ret);
48 // -
50 using ObjectId = webgl::ObjectId;
52 IPCResult RecvCheckFramebufferStatus(GLenum target, GLenum* ret);
53 IPCResult RecvClientWaitSync(ObjectId id, GLbitfield flags, GLuint64 timeout,
54 GLenum* ret);
55 IPCResult RecvCreateOpaqueFramebuffer(ObjectId id,
56 const OpaqueFramebufferOptions&,
57 bool* ret);
58 IPCResult RecvDrawingBufferSize(uvec2* ret);
59 IPCResult RecvFinish();
60 IPCResult RecvGetBufferParameter(GLenum target, GLenum pname,
61 Maybe<double>* ret);
62 IPCResult RecvGetCompileResult(ObjectId id, webgl::CompileResult* ret);
63 IPCResult RecvGetError(GLenum* ret);
64 IPCResult RecvGetFragDataLocation(ObjectId id, const std::string& name,
65 GLint* ret);
66 IPCResult RecvGetFramebufferAttachmentParameter(ObjectId id,
67 GLenum attachment,
68 GLenum pname,
69 Maybe<double>* ret);
70 IPCResult RecvGetFrontBuffer(ObjectId fb, bool vr,
71 Maybe<layers::SurfaceDescriptor>* ret);
72 IPCResult RecvGetIndexedParameter(GLenum target, GLuint index,
73 Maybe<double>* ret);
74 IPCResult RecvGetInternalformatParameter(GLenum target, GLuint format,
75 GLuint pname,
76 Maybe<std::vector<int32_t>>* ret);
77 IPCResult RecvGetLinkResult(ObjectId id, webgl::LinkResult* ret);
78 IPCResult RecvGetNumber(GLenum pname, Maybe<double>* ret);
79 IPCResult RecvGetQueryParameter(ObjectId id, GLenum pname,
80 Maybe<double>* ret);
81 IPCResult RecvGetRenderbufferParameter(ObjectId id, GLenum pname,
82 Maybe<double>* ret);
83 IPCResult RecvGetSamplerParameter(ObjectId id, GLenum pname,
84 Maybe<double>* ret);
85 IPCResult RecvGetShaderPrecisionFormat(
86 GLenum shaderType, GLenum precisionType,
87 Maybe<webgl::ShaderPrecisionFormat>* ret);
88 IPCResult RecvGetString(GLenum pname, Maybe<std::string>* ret);
89 IPCResult RecvGetTexParameter(ObjectId id, GLenum pname, Maybe<double>* ret);
90 IPCResult RecvGetUniform(ObjectId id, uint32_t loc,
91 webgl::GetUniformData* ret);
92 IPCResult RecvGetVertexAttrib(GLuint index, GLenum pname, Maybe<double>* ret);
93 IPCResult RecvIsEnabled(GLenum cap, bool* ret);
94 IPCResult RecvOnMemoryPressure();
95 IPCResult RecvValidateProgram(ObjectId id, bool* ret);
97 // -
99 private:
100 ~WebGLParent();
102 mozilla::ipc::IPCResult Recv__delete__() override;
104 void ActorDestroy(ActorDestroyReason aWhy) override;
106 UniquePtr<HostWebGLContext> mHost;
108 // Runnable that repeatedly processes our WebGL command queue
109 RefPtr<Runnable> mRunCommandsRunnable;
112 } // namespace dom
113 } // namespace mozilla
115 #endif // WEBGLPARENT_H_