Bug 1892041 - Part 1: Update test262 features. r=spidermonkey-reviewers,dminor
[gecko.git] / dom / canvas / WebGLParent.h
blobb3b4511e765f4027a04a6d3ba4cd9af80c54adad
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/ipc/IdType.h"
11 #include "mozilla/dom/PWebGLParent.h"
12 #include "mozilla/WeakPtr.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);
32 mozilla::ipc::IPCResult RecvInitialize(const webgl::InitContextDesc&,
33 webgl::InitContextResult* out);
35 explicit WebGLParent(const dom::ContentParentId& aContentId); // For IPDL
37 using IPCResult = mozilla::ipc::IPCResult;
39 template <class ResolveT>
40 IPCResult RecvPing(const ResolveT& Resolve) {
41 Resolve(void_t{});
42 return IPC_OK();
45 IPCResult RecvSyncPing() { return IPC_OK(); }
47 IPCResult RecvDispatchCommands(mozilla::ipc::BigBuffer&&, uint64_t);
48 IPCResult RecvTexImage(uint32_t level, uint32_t respecFormat,
49 const uvec3& offset, const webgl::PackingInfo&,
50 webgl::TexUnpackBlobDesc&&);
52 IPCResult RecvGetBufferSubData(GLenum target, uint64_t srcByteOffset,
53 uint64_t byteSize, mozilla::ipc::Shmem* ret);
54 IPCResult GetFrontBufferSnapshot(webgl::FrontBufferSnapshotIpc* ret,
55 IProtocol* aProtocol);
56 IPCResult RecvGetFrontBufferSnapshot(webgl::FrontBufferSnapshotIpc* ret);
57 IPCResult RecvReadPixels(const webgl::ReadPixelsDesc&,
58 ReadPixelsBuffer&& buffer,
59 webgl::ReadPixelsResultIpc* ret);
61 // -
63 using ObjectId = webgl::ObjectId;
65 IPCResult RecvCheckFramebufferStatus(GLenum target, GLenum* ret);
66 IPCResult RecvClientWaitSync(ObjectId id, GLbitfield flags, GLuint64 timeout,
67 GLenum* ret);
68 IPCResult RecvCreateOpaqueFramebuffer(ObjectId id,
69 const OpaqueFramebufferOptions&,
70 bool* ret);
71 IPCResult RecvDrawingBufferSize(uvec2* ret);
72 IPCResult RecvFinish();
73 IPCResult RecvGetBufferParameter(GLenum target, GLenum pname,
74 Maybe<double>* ret);
75 IPCResult RecvGetCompileResult(ObjectId id, webgl::CompileResult* ret);
76 IPCResult RecvGetError(GLenum* ret);
77 IPCResult RecvGetFragDataLocation(ObjectId id, const std::string& name,
78 GLint* ret);
79 IPCResult RecvGetFramebufferAttachmentParameter(ObjectId id,
80 GLenum attachment,
81 GLenum pname,
82 Maybe<double>* ret);
83 IPCResult RecvGetFrontBuffer(ObjectId fb, bool vr,
84 Maybe<layers::SurfaceDescriptor>* ret);
85 IPCResult RecvGetIndexedParameter(GLenum target, GLuint index,
86 Maybe<double>* ret);
87 IPCResult RecvGetInternalformatParameter(GLenum target, GLuint format,
88 GLuint pname,
89 Maybe<std::vector<int32_t>>* ret);
90 IPCResult RecvGetLinkResult(ObjectId id, webgl::LinkResult* ret);
91 IPCResult RecvGetNumber(GLenum pname, Maybe<double>* ret);
92 IPCResult RecvGetQueryParameter(ObjectId id, GLenum pname,
93 Maybe<double>* ret);
94 IPCResult RecvGetRenderbufferParameter(ObjectId id, GLenum pname,
95 Maybe<double>* ret);
96 IPCResult RecvGetSamplerParameter(ObjectId id, GLenum pname,
97 Maybe<double>* ret);
98 IPCResult RecvGetShaderPrecisionFormat(
99 GLenum shaderType, GLenum precisionType,
100 Maybe<webgl::ShaderPrecisionFormat>* ret);
101 IPCResult RecvGetString(GLenum pname, Maybe<std::string>* ret);
102 IPCResult RecvGetTexParameter(ObjectId id, GLenum pname, Maybe<double>* ret);
103 IPCResult RecvGetUniform(ObjectId id, uint32_t loc,
104 webgl::GetUniformData* ret);
105 IPCResult RecvGetVertexAttrib(GLuint index, GLenum pname, Maybe<double>* ret);
106 IPCResult RecvOnMemoryPressure();
107 IPCResult RecvValidateProgram(ObjectId id, bool* ret);
109 // -
111 const dom::ContentParentId mContentId;
113 private:
114 ~WebGLParent();
116 mozilla::ipc::IPCResult Recv__delete__() override;
118 void ActorDestroy(ActorDestroyReason aWhy) override;
120 mozilla::ipc::IPCResult RecvWaitForTxn(layers::RemoteTextureOwnerId aOwnerId,
121 layers::RemoteTextureTxnType aTxnType,
122 layers::RemoteTextureTxnId aTxnId);
124 UniquePtr<HostWebGLContext> mHost;
126 // Runnable that repeatedly processes our WebGL command queue
127 RefPtr<Runnable> mRunCommandsRunnable;
130 } // namespace dom
131 } // namespace mozilla
133 #endif // WEBGLPARENT_H_