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/. */
9 #include "mozilla/GfxMessageUtils.h"
10 #include "mozilla/dom/PWebGLParent.h"
11 #include "mozilla/WeakPtr.h"
15 class HostWebGLContext
;
19 class SharedSurfaceTextureClient
;
20 class SurfaceDescriptor
;
25 class WebGLParent
: public PWebGLParent
, public SupportsWeakPtr
{
29 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(WebGLParent
, override
);
31 mozilla::ipc::IPCResult
RecvInitialize(const webgl::InitContextDesc
&,
32 webgl::InitContextResult
* out
);
34 WebGLParent(); // For IPDL
36 using IPCResult
= mozilla::ipc::IPCResult
;
38 IPCResult
RecvDispatchCommands(mozilla::ipc::Shmem
&&, uint64_t);
39 IPCResult
RecvTexImage(uint32_t level
, uint32_t respecFormat
,
40 const uvec3
& offset
, const webgl::PackingInfo
&,
41 webgl::TexUnpackBlobDesc
&&);
43 IPCResult
RecvGetBufferSubData(GLenum target
, uint64_t srcByteOffset
,
44 uint64_t byteSize
, mozilla::ipc::Shmem
* ret
);
45 IPCResult
GetFrontBufferSnapshot(webgl::FrontBufferSnapshotIpc
* ret
,
46 IProtocol
* aProtocol
);
47 IPCResult
RecvGetFrontBufferSnapshot(webgl::FrontBufferSnapshotIpc
* ret
);
48 IPCResult
RecvReadPixels(const webgl::ReadPixelsDesc
&, uint64_t byteSize
,
49 webgl::ReadPixelsResultIpc
* ret
);
53 using ObjectId
= webgl::ObjectId
;
55 IPCResult
RecvCheckFramebufferStatus(GLenum target
, GLenum
* ret
);
56 IPCResult
RecvClientWaitSync(ObjectId id
, GLbitfield flags
, GLuint64 timeout
,
58 IPCResult
RecvCreateOpaqueFramebuffer(ObjectId id
,
59 const OpaqueFramebufferOptions
&,
61 IPCResult
RecvDrawingBufferSize(uvec2
* ret
);
62 IPCResult
RecvFinish();
63 IPCResult
RecvGetBufferParameter(GLenum target
, GLenum pname
,
65 IPCResult
RecvGetCompileResult(ObjectId id
, webgl::CompileResult
* ret
);
66 IPCResult
RecvGetError(GLenum
* ret
);
67 IPCResult
RecvGetFragDataLocation(ObjectId id
, const std::string
& name
,
69 IPCResult
RecvGetFramebufferAttachmentParameter(ObjectId id
,
73 IPCResult
RecvGetFrontBuffer(ObjectId fb
, bool vr
,
74 Maybe
<layers::SurfaceDescriptor
>* ret
);
75 IPCResult
RecvGetIndexedParameter(GLenum target
, GLuint index
,
77 IPCResult
RecvGetInternalformatParameter(GLenum target
, GLuint format
,
79 Maybe
<std::vector
<int32_t>>* ret
);
80 IPCResult
RecvGetLinkResult(ObjectId id
, webgl::LinkResult
* ret
);
81 IPCResult
RecvGetNumber(GLenum pname
, Maybe
<double>* ret
);
82 IPCResult
RecvGetQueryParameter(ObjectId id
, GLenum pname
,
84 IPCResult
RecvGetRenderbufferParameter(ObjectId id
, GLenum pname
,
86 IPCResult
RecvGetSamplerParameter(ObjectId id
, GLenum pname
,
88 IPCResult
RecvGetShaderPrecisionFormat(
89 GLenum shaderType
, GLenum precisionType
,
90 Maybe
<webgl::ShaderPrecisionFormat
>* ret
);
91 IPCResult
RecvGetString(GLenum pname
, Maybe
<std::string
>* ret
);
92 IPCResult
RecvGetTexParameter(ObjectId id
, GLenum pname
, Maybe
<double>* ret
);
93 IPCResult
RecvGetUniform(ObjectId id
, uint32_t loc
,
94 webgl::GetUniformData
* ret
);
95 IPCResult
RecvGetVertexAttrib(GLuint index
, GLenum pname
, Maybe
<double>* ret
);
96 IPCResult
RecvIsEnabled(GLenum cap
, bool* ret
);
97 IPCResult
RecvOnMemoryPressure();
98 IPCResult
RecvValidateProgram(ObjectId id
, bool* ret
);
105 mozilla::ipc::IPCResult
Recv__delete__() override
;
107 void ActorDestroy(ActorDestroyReason aWhy
) override
;
109 UniquePtr
<HostWebGLContext
> mHost
;
111 // Runnable that repeatedly processes our WebGL command queue
112 RefPtr
<Runnable
> mRunCommandsRunnable
;
116 } // namespace mozilla
118 #endif // WEBGLPARENT_H_