tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

WebGLParent.h (5427B)


      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/. */
      5 
      6 #ifndef WEBGLPARENT_H_
      7 #define WEBGLPARENT_H_
      8 
      9 #include "mozilla/GfxMessageUtils.h"
     10 #include "mozilla/WeakPtr.h"
     11 #include "mozilla/dom/PWebGLParent.h"
     12 #include "mozilla/dom/ipc/IdType.h"
     13 
     14 namespace mozilla {
     15 
     16 class HostWebGLContext;
     17 class WebGLChild;
     18 
     19 namespace layers {
     20 class SharedSurfacesHolder;
     21 class SharedSurfaceTextureClient;
     22 class SurfaceDescriptor;
     23 }  // namespace layers
     24 
     25 namespace dom {
     26 
     27 class WebGLParent : public PWebGLParent, public SupportsWeakPtr {
     28  friend PWebGLParent;
     29 
     30 public:
     31  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(WebGLParent, override);
     32 
     33  mozilla::ipc::IPCResult RecvInitialize(const webgl::InitContextDesc&,
     34                                         webgl::InitContextResult* out);
     35 
     36  WebGLParent(layers::SharedSurfacesHolder* aSharedSurfacesHolder,
     37              const dom::ContentParentId& aContentId);  // For IPDL
     38 
     39  using IPCResult = mozilla::ipc::IPCResult;
     40 
     41  template <class ResolveT>
     42  IPCResult RecvPing(const ResolveT& Resolve) {
     43    Resolve(void_t{});
     44    return IPC_OK();
     45  }
     46 
     47  IPCResult RecvSyncPing() { return IPC_OK(); }
     48 
     49  IPCResult RecvDispatchCommands(mozilla::ipc::BigBuffer&&, uint64_t);
     50  IPCResult RecvTexImage(uint32_t level, uint32_t respecFormat,
     51                         const uvec3& offset, const webgl::PackingInfo&,
     52                         webgl::TexUnpackBlobDesc&&);
     53 
     54  IPCResult RecvGetBufferSubData(GLenum target, uint64_t srcByteOffset,
     55                                 uint64_t byteSize, mozilla::ipc::Shmem* ret);
     56  IPCResult GetFrontBufferSnapshot(webgl::FrontBufferSnapshotIpc* ret,
     57                                   IProtocol* aProtocol);
     58  IPCResult RecvGetFrontBufferSnapshot(webgl::FrontBufferSnapshotIpc* ret);
     59  IPCResult RecvReadPixels(const webgl::ReadPixelsDesc&,
     60                           ReadPixelsBuffer&& buffer,
     61                           webgl::ReadPixelsResultIpc* ret);
     62 
     63  // -
     64 
     65  using ObjectId = webgl::ObjectId;
     66 
     67  IPCResult RecvCheckFramebufferStatus(GLenum target, GLenum* ret);
     68  IPCResult RecvClientWaitSync(ObjectId id, GLbitfield flags, GLuint64 timeout,
     69                               GLenum* ret);
     70  IPCResult RecvCreateOpaqueFramebuffer(ObjectId id,
     71                                        const OpaqueFramebufferOptions&,
     72                                        bool* ret);
     73  IPCResult RecvDrawingBufferSize(uvec2* ret);
     74  IPCResult RecvFinish();
     75  IPCResult RecvGetBufferParameter(GLenum target, GLenum pname,
     76                                   Maybe<double>* ret);
     77  IPCResult RecvGetCompileResult(ObjectId id, webgl::CompileResult* ret);
     78  IPCResult RecvGetError(GLenum* ret);
     79  IPCResult RecvGetFragDataLocation(ObjectId id, const std::string& name,
     80                                    GLint* ret);
     81  IPCResult RecvGetFramebufferAttachmentParameter(ObjectId id,
     82                                                  GLenum attachment,
     83                                                  GLenum pname,
     84                                                  Maybe<double>* ret);
     85  IPCResult RecvGetFrontBuffer(ObjectId fb, bool vr,
     86                               Maybe<layers::SurfaceDescriptor>* ret);
     87  IPCResult RecvGetIndexedParameter(GLenum target, GLuint index,
     88                                    Maybe<double>* ret);
     89  IPCResult RecvGetInternalformatParameter(GLenum target, GLuint format,
     90                                           GLuint pname,
     91                                           Maybe<std::vector<int32_t>>* ret);
     92  IPCResult RecvGetLinkResult(ObjectId id, webgl::LinkResult* ret);
     93  IPCResult RecvGetNumber(GLenum pname, Maybe<double>* ret);
     94  IPCResult RecvGetQueryParameter(ObjectId id, GLenum pname,
     95                                  Maybe<double>* ret);
     96  IPCResult RecvGetRenderbufferParameter(ObjectId id, GLenum pname,
     97                                         Maybe<double>* ret);
     98  IPCResult RecvGetSamplerParameter(ObjectId id, GLenum pname,
     99                                    Maybe<double>* ret);
    100  IPCResult RecvGetString(GLenum pname, Maybe<std::string>* ret);
    101  IPCResult RecvGetTexParameter(ObjectId id, GLenum pname, Maybe<double>* ret);
    102  IPCResult RecvGetUniform(ObjectId id, uint32_t loc,
    103                           webgl::GetUniformData* ret);
    104  IPCResult RecvGetVertexAttrib(GLuint index, GLenum pname, Maybe<double>* ret);
    105  IPCResult RecvOnMemoryPressure();
    106  IPCResult RecvValidateProgram(ObjectId id, bool* ret);
    107 
    108  // -
    109 
    110  const RefPtr<layers::SharedSurfacesHolder> mSharedSurfacesHolder;
    111  const dom::ContentParentId mContentId;
    112 
    113  HostWebGLContext* GetHostWebGLContext() const { return mHost.get(); }
    114 
    115 private:
    116  ~WebGLParent();
    117 
    118  mozilla::ipc::IPCResult Recv__delete__() override;
    119 
    120  void ActorDestroy(ActorDestroyReason aWhy) override;
    121 
    122  mozilla::ipc::IPCResult RecvWaitForTxn(layers::RemoteTextureOwnerId aOwnerId,
    123                                         layers::RemoteTextureTxnType aTxnType,
    124                                         layers::RemoteTextureTxnId aTxnId);
    125 
    126  std::unique_ptr<HostWebGLContext> mHost;
    127 
    128  // Runnable that repeatedly processes our WebGL command queue
    129  RefPtr<Runnable> mRunCommandsRunnable;
    130 };
    131 
    132 }  // namespace dom
    133 }  // namespace mozilla
    134 
    135 #endif  // WEBGLPARENT_H_