- Enable WebGL SwapChain pooling on Android. Creating and releasing Android Surfaces every frame causes a big performance hit due to AndroidSurface slow destructors bug.
- Add a separate SwapChain for WebVR. We are already using separate SwapChains for WebXR (WebGLFramebuffer::mOpaqueSwapChain) but not for WebVR (it uses the canvas backbuffer).
Differential Revision: https://phabricator.services.mozilla.com/D79840
- Do not apply mIsCanvasDirty bailout when presenting from a opaque FBO
back buffer.
- Create a separate WebGLContext::PresentInto with more specific XR
validations and logic.
- Use the Opaque FBO backbuffer as source when calling
BlitBackbufferToCurDriverFB
- Always invalidate OpaqueFBO regardless of the WebGL context's
preserveDrawingBuffer value.
Differential Revision: https://phabricator.services.mozilla.com/D78301
* Majorly simplity CanvasRenderer
* Replace GLScreenBuffer with trivial GLSwapChain
* Use descriptor structs so that future SharedSurface changes aren't so painful
to propagate
* Mortgage/strip out more OffscreenCanvas code for now
Differential Revision: https://phabricator.services.mozilla.com/D75055
- Do not apply mIsCanvasDirty bailout when presenting from a opaque FBO
back buffer.
- Create a separate WebGLContext::PresentInto with more specific XR
validations and logic.
- Use the Opaque FBO backbuffer as source when calling
BlitBackbufferToCurDriverFB
- Always invalidate OpaqueFBO regardless of the WebGL context's
preserveDrawingBuffer value.
Differential Revision: https://phabricator.services.mozilla.com/D78301
* Majorly simplity CanvasRenderer
* Replace GLScreenBuffer with trivial GLSwapChain
* Use descriptor structs so that future SharedSurface changes aren't so painful
to propagate
* Mortgage/strip out more OffscreenCanvas code for now
Differential Revision: https://phabricator.services.mozilla.com/D75055
- Do not apply mIsCanvasDirty bailout when presenting from a opaque FBO
back buffer.
- Create a separate WebGLContext::PresentInto with more specific XR
validations and logic.
- Use the Opaque FBO backbuffer as source when calling
BlitBackbufferToCurDriverFB
- Always invalidate OpaqueFBO regardless of the WebGL context's
preserveDrawingBuffer value.
Differential Revision: https://phabricator.services.mozilla.com/D78301
* Majorly simplity CanvasRenderer
* Replace GLScreenBuffer with trivial GLSwapChain
* Use descriptor structs so that future SharedSurface changes aren't so painful
to propagate
* Mortgage/strip out more OffscreenCanvas code for now
Differential Revision: https://phabricator.services.mozilla.com/D75055
- Do not apply mIsCanvasDirty bailout when presenting from a opaque FBO back buffer.
- Create a separate WebGLContext::PresentInto with more specific XR validations and logic.
- Use the Opaque FBO backbuffer as source when calling BlitBackbufferToCurDriverFB
- Always invalidate OpaqueFBO regardless of the WebGL context’s preserveDrawingBuffer value.
Differential Revision: https://phabricator.services.mozilla.com/D78301
* Majorly simplity CanvasRenderer
* Replace GLScreenBuffer with trivial GLSwapChain
* Use descriptor structs so that future SharedSurface changes aren't so painful
to propagate
* Mortgage/strip out more OffscreenCanvas code for now
Differential Revision: https://phabricator.services.mozilla.com/D75055
Currently WebGL xrCompatible flag is only set when enabling the xrCompatible attribute in the canvas.getContext() call. We also need to set it to true after succesful makeXRCompatible() calls
Differential Revision: https://phabricator.services.mozilla.com/D76849
Adds IpdlQueue capability to PWebGL actors. The WebGLChild, used in content processes, implements SyncProducerActor and AsyncConsumerActor because it sends (sync and async) messages and receives responses to them that it reads as async messages. The WebGLParent, used in the compositor process, is a SyncConsumerActor and AsyncProducerActor for dual reasons.
Differential Revision: https://phabricator.services.mozilla.com/D68264
We need to separate WebGL actor construction and initialization since IpdlQueue initialization needs the actor to already exist.
Differential Revision: https://phabricator.services.mozilla.com/D68262
* Templatize ProducerView/ConsumerView/(Sync)CommandSource/(Sync)CommandSink to allow both Pcq and Ipdl versions, as the client code is identical.
* Rename Producer/Consumer -> PcqProducer/PcqConsumer.
Differential Revision: https://phabricator.services.mozilla.com/D68259
* Remove CommandSink from WebGLMethodDispatcher. The parameter is unneeded.
* Make MethodDispatcher code simpler. This removes a layer of complexity (CommandDispatchDriver) involved in finding the correct method for a given ID number.
* Require WebGL methods whose signatures don't allow them to be remoted to directly call on the host object. They are: ReadPixels, GetVRFrame, GetInternalFormatParameter, GetBufferSubData, GetLinkResult and TexImage.
* Fix a bunch of compilation issues with busted PcqParamTraits.
* implement PcqParamTraits for some missing types
Differential Revision: https://phabricator.services.mozilla.com/D68257
A lot of simple changes to prepare for later patches in the series:
* PcqCommand -> QueueCommand, PcqStatus -> QueueStatus, PcqParamTraits -> QueueParamTraits
* Consolidate BasicSink/Source into CommandSink/Source
* SyncCommandSource::mConsumer -> mResponseSink, SyncCommandSink::mProducer -> mResponseSource, CommandSource::mProducer -> mSource, CommandSink::mConsumer -> mSink
* Rename WebGLPcqParamTraits.h to WebGLQueueParamTraits.h
* ProducerConsumerQueue struct -> class.
* ProducerConsumerQueue::mProducer/mConsumer access -> ProducerConsumerQueue::TakeProducer/TakeConsumer
* Rename QueueStatus enum elements to follow style convention.
* Rename Status() to GetStatus() in ProducerView and ConsumerView to appease Linux.
* Rename CommandResult enum values to fit convention (and avoid Linux conflict with Success).
Differential Revision: https://phabricator.services.mozilla.com/D68256
Adds IpdlQueue capability to PWebGL actors. The WebGLChild, used in content processes, implements SyncProducerActor and AsyncConsumerActor because it sends (sync and async) messages and receives responses to them that it reads as async messages. The WebGLParent, used in the compositor process, is a SyncConsumerActor and AsyncProducerActor for dual reasons.
Differential Revision: https://phabricator.services.mozilla.com/D68264
We need to separate WebGL actor construction and initialization since IpdlQueue initialization needs the actor to already exist.
Differential Revision: https://phabricator.services.mozilla.com/D68262
* Templatize ProducerView/ConsumerView/(Sync)CommandSource/(Sync)CommandSink to allow both Pcq and Ipdl versions, as the client code is identical.
* Rename Producer/Consumer -> PcqProducer/PcqConsumer.
Differential Revision: https://phabricator.services.mozilla.com/D68259
* Remove CommandSink from WebGLMethodDispatcher. The parameter is unneeded.
* Make MethodDispatcher code simpler. This removes a layer of complexity (CommandDispatchDriver) involved in finding the correct method for a given ID number.
* Require WebGL methods whose signatures don't allow them to be remoted to directly call on the host object. They are: ReadPixels, GetVRFrame, GetInternalFormatParameter, GetBufferSubData, GetLinkResult and TexImage.
* Fix a bunch of compilation issues with busted PcqParamTraits.
* implement PcqParamTraits for some missing types
Differential Revision: https://phabricator.services.mozilla.com/D68257
A lot of simple changes to prepare for later patches in the series:
* PcqCommand -> QueueCommand, PcqStatus -> QueueStatus, PcqParamTraits -> QueueParamTraits
* Consolidate BasicSink/Source into CommandSink/Source
* SyncCommandSource::mConsumer -> mResponseSink, SyncCommandSink::mProducer -> mResponseSource, CommandSource::mProducer -> mSource, CommandSink::mConsumer -> mSink
* Rename WebGLPcqParamTraits.h to WebGLQueueParamTraits.h
* ProducerConsumerQueue struct -> class.
* ProducerConsumerQueue::mProducer/mConsumer access -> ProducerConsumerQueue::TakeProducer/TakeConsumer
* Rename QueueStatus enum elements to follow style convention.
* Rename Status() to GetStatus() in ProducerView and ConsumerView to appease Linux.
* Rename CommandResult enum values to fit convention (and avoid Linux conflict with Success).
Differential Revision: https://phabricator.services.mozilla.com/D68256
This covers most cycle collected objects which support weak references, but
not the ones which inherit from a cycle collected class and don't do any cycle
collection on their own.
Differential Revision: https://phabricator.services.mozilla.com/D63962
GetSurfaceSnapshot (and similar) want to ReadPixels the backbuffer,
without having to navigate the GL PIXEL_PACK state.
Since this is cold cold code, it's nice to reduce the backend state by
making ReadPixelsDesc/PixelPackState per-call, and tracked by the
client. Arguably, PIXEL_PACK_BUFFER should be per-call as well.
Differential Revision: https://phabricator.services.mozilla.com/D63587