Index: third_party/npapi/bindings/npapi_extensions.h |
=================================================================== |
--- third_party/npapi/bindings/npapi_extensions.h (revision 44555) |
+++ third_party/npapi/bindings/npapi_extensions.h (working copy) |
@@ -157,6 +157,140 @@ |
// PLEASE REMOVE THIS WHEN THE NACL CODE IS UPDATED. |
typedef struct NPNExtensions NPExtensions; |
+ |
+/* New experimental device API. */ |
+ |
+/* Mode for calls to NPDeviceSynchronizeContext. */ |
+typedef enum { |
+ /* Get or set locally cached state without synchronizing or communicating */ |
+ /* with the service process (or thread). */ |
+ NPDeviceSynchronizationMode_Cached, |
+ |
+ /* Exchanges state with service process (or thread). Does not wait for any */ |
+ /* progress before returning. */ |
+ NPDeviceSynchronizationMode_Immediate, |
+ |
+ /* Exchanges state with service process (or thread). Blocks caller until */ |
+ /* further progress can be made. */ |
+ NPDeviceSynchronizationMode_Flush |
+} NPDeviceSynchronizationMode; |
+ |
+/* Get the number of configs supported by a given device. */ |
+typedef NPError (*NPDeviceGetNumConfigsPtr)(NPP instance, |
+ int32* numConfigs); |
+ |
+/* Get attribute values from a config. NPDeviceGetConfigs might return */ |
+/* multiple configs. This function can be used to examine them to */ |
+/* find the most suitable. For example, NPDeviceGetConfigs might return one */ |
+/* config with antialiasing enabled and one without. This can be determined */ |
+/* using this function. */ |
+/* Inputs: */ |
+/* config: The config index to extract the attributes from. */ |
+/* attribList: Array of input config attribute / value pairs */ |
+/* terminated with NPAttrib_End. */ |
+/* Outputs: */ |
+/* attribList: The values paired up with each attribute are filled in */ |
+/* on return. */ |
+typedef NPError (*NPDeviceGetConfigAttribsPtr)(NPP instance, |
+ int32 config, |
+ int32* attribList); |
+ |
+/* Create a device context based on a particular device configuration and a */ |
+/* list config input attributes. */ |
+/* Inputs: */ |
+/* config: The device configuration to use. */ |
+/* attribList: NULL or an array of context specific attribute / value */ |
+/* pairs terminated with NPAttrib_End. */ |
+/* Outputs: */ |
+/* context: The created context. */ |
+typedef NPError (*NPDeviceCreateContextPtr)(NPP instance, |
+ int32 config, |
+ const int32* attribList, |
+ NPDeviceContext** context); |
+ |
+/* Destroy a context. */ |
+/* Inputs: */ |
+/* context: The context to destroy. */ |
+/*typedef NPError (*NPDestroyContext)(NPP instance, */ |
+/* NPDeviceContext* context); */ |
+ |
+/* This type should be cast to the type associated with the particular */ |
+/* callback type */ |
+typedef void (*NPDeviceGenericCallbackPtr)(void); |
+ |
+/* Register a callback with a context. Callbacks are never invoked after the */ |
+/* associated context has been destroyed. The semantics of the particular */ |
+/* callback type determine which thread the callback is invoked on. It might */ |
+/* be the plugin thread, the thread RegisterCallback is invoked on or a */ |
+/* special thread created for servicing callbacks, such as an audio thread */ |
+/* Inputs: */ |
+/* callbackType: The device specific callback type */ |
+/* callback: The callback to invoke. The signature varies by type. Use */ |
+/* NULL to unregister the callback for a particular type. */ |
+/* callbackData: A value that is passed to the callback function. Other */ |
+/* callback arguments vary by type. */ |
+typedef NPError (*NPDeviceRegisterCallbackPtr)( |
+ NPP instance, |
+ NPDeviceContext* context, |
+ int32 callbackType, |
+ NPDeviceGenericCallbackPtr callback, |
+ void* callbackData); |
+ |
+/* Callback for NPDeviceSynchronizeContext. */ |
+/* Inputs: */ |
+/* instance: The associated plugin instance. */ |
+/* context: The context that was flushed. */ |
+/* error: Indicates success of flush operation. */ |
+/* data: The completion callback data that was passed to */ |
+/* NPDeviceSynchronizeContext. */ |
+typedef void (*NPDeviceSynchronizeContextCallbackPtr)( |
+ NPP instance, |
+ NPDeviceContext* context, |
+ NPError error, |
+ void* data); |
+ |
+/* Synchronize the state of a device context. Takes lists of input and output */ |
+/* attributes. Generally, the input attributes are copied into the context */ |
+/* and the output attributes are filled in the state of the context either */ |
+/* after (before) the synchronization depending on whether it is synchronous */ |
+/* (asynchronous). The get the state of the context after an asynchronous */ |
+/* synchronization, call this function a second time with Cached mode after */ |
+/* the callback has been invoked. */ |
+/* Inputs: */ |
+/* context: The context to synchronize. */ |
+/* mode: The type of synchronization to perform. */ |
+/* inputAttribList: NULL or an array of input synchronization attribute / */ |
+/* value pairs terminated with NPAttrib_End. */ |
+/* outputAttribList: NULL or an array of output synchronization */ |
+/* attributes / uninitialized value pairs terminated */ |
+/* with NPAttrib_End. */ |
+/* callback: NULL for synchronous operation or completion callback function */ |
+/* for asynchronous operation. */ |
+/* callbackData: Argument passed to callback function. */ |
+/* Outputs: */ |
+/* outputAttribList: The values paired up with each attribute are filled */ |
+/* in on return for synchronous operation. */ |
+typedef NPError (*NPDeviceSynchronizeContextPtr)( |
+ NPP instance, |
+ NPDeviceContext* context, |
+ NPDeviceSynchronizationMode mode, |
+ const int32* inputAttribList, |
+ int32* outputAttribList, |
+ NPDeviceSynchronizeContextCallbackPtr callback, |
+ void* callbackData); |
+ |
+/* All attributes shared between devices, with the exception of */ |
+/* NPDeviceContextAttrib_End, have bit 31 set. Device specific attributes */ |
+/* have the bit clear. */ |
+enum { |
+ /* Used to terminate arrays of attribute / value pairs. */ |
+ NPAttrib_End = 0, |
+ |
+ /* Error status of context. Non-zero means error. Shared by all devices, */ |
+ /* though error values are device specific. */ |
+ NPAttrib_Error = 0x80000000, |
+}; |
+ |
/* generic device interface */ |
struct NPDevice { |
NPDeviceQueryCapabilityPtr queryCapability; |
@@ -171,6 +305,17 @@ |
NPDeviceMapBufferPtr mapBuffer; |
NPDeviceThemeGetSize themeGetSize; |
NPDeviceThemePaint themePaint; |
+ |
+ /* Experimental device API */ |
+ NPDeviceGetNumConfigsPtr getNumConfigs; |
+ NPDeviceGetConfigAttribsPtr getConfigAttribs; |
+ NPDeviceCreateContextPtr createContext; |
+/* NPDeviceDestroyContextPtr destroyContext; */ |
+ NPDeviceRegisterCallbackPtr registerCallback; |
+ NPDeviceSynchronizeContextPtr synchronizeContext; |
+/* NPDeviceCreateBufferPtr createBuffer; */ |
+/* NPDeviceDestroyBufferPtr destroyBuffer; */ |
+/* NPDeviceMapBufferPtr mapBuffer; */ |
}; |
/* returns NULL if deviceID unavailable / unrecognized */ |
@@ -441,6 +586,8 @@ |
typedef void (*NPDeviceContext3DRepaintPtr)(NPP npp, |
NPDeviceContext3D* context); |
+// TODO(apatrick): this need not be exposed when we switch over to the new |
+// device API. It's layout can also be implementation dependent. |
typedef struct _NPDeviceContext3D |
{ |
void* reserved; |
@@ -477,6 +624,77 @@ |
NPDeviceContext3DError error; |
} NPDeviceContext3D; |
+ |
+/* Begin 3D specific portion of experimental device API */ |
+ |
+/* Device buffer ID reserved for command buffer */ |
+enum { |
+ NP3DCommandBufferId = 0 |
+}; |
+ |
+/* 3D attributes */ |
+enum { |
+ /* Example GetConfigAttribs attributes. See EGL 1.4 spec. */ |
+ /* These may be passed to GetConfigAttribs. */ |
+ NP3DAttrib_BufferSize = 0x3020, |
+ NP3DAttrib_AlphaSize = 0x3021, |
+ NP3DAttrib_BlueSize = 0x3022, |
+ NP3DAttrib_GreenSize = 0x3023, |
+ NP3DAttrib_RedSize = 0x3024, |
+ NP3DAttrib_DepthSize = 0x3025, |
+ NP3DAttrib_StencilSize = 0x3026, |
+ NP3DAttrib_SurfaceType = 0x3033, |
+ |
+ /* Example CreateContext attributes. See EGL 1.4 spec. */ |
+ /* These may be passed to CreateContext. */ |
+ NP3DAttrib_SwapBehavior = 0x3093, |
+ NP3DAttrib_MultisampleResolve = 0x3099, |
+ |
+ /* Size of command buffer in 32-bit entries. */ |
+ /* This may be passed to CreateContext as an input or SynchronizeContext as */ |
+ /* an output. */ |
+ NP3DAttrib_CommandBufferSize = 0x10000000, |
+ |
+ /* These may be passed to SynchronizeContext. */ |
+ |
+ /* Offset in command buffer writer has reached. In / out.*/ |
+ NP3DAttrib_PutOffset, |
+ |
+ /* Offset in command buffer reader has reached. Out only. */ |
+ NP3DAttrib_GetOffset, |
+ |
+ /* Last processed token. Out only. */ |
+ NP3DAttrib_Token, |
+}; |
+ |
+/* 3D callbacks */ |
+enum { |
+ /* This callback is invoked whenever the plugin must repaint everything. */ |
+ /* This might be because the window manager must repaint a window or */ |
+ /* the context has been lost, for example a power management event. */ |
+ NP3DCallback_Repaint = 1 |
+}; |
+ |
+/* Flags for NPConfig3DOutAttrib_SurfaceType */ |
+enum { |
+ NP3DSurfaceType_MultisampleResolveBox = 0x0200, |
+ NP3DSurfaceType_SwapBehaviorPreserved = 0x0400 |
+}; |
+ |
+/* Values for NPConfig3DInAttrib_SwapBehavior */ |
+enum { |
+ NP3DSwapBehavior_Preserved = 0x3094, |
+ NP3DSwapBehavior_Destroyed = 0x3095 |
+}; |
+ |
+/* Values for NPConfig3DInAttrib_MultisampleResolve */ |
+enum { |
+ NP3DMultisampleResolve_Default = 0x309A, |
+ NP3DMultisampleResolve_Box = 0x309B, |
+}; |
+ |
+/* End 3D specific API */ |
+ |
/* Audio --------------------------------------------------------------------*/ |
#define NPPepperAudioDevice 3 |