Commit 1a1a1427 by Jonah Ryan-Davis Committed by Commit Bot

Expose eglGetMscRateCHROMIUM from EGL_CHROMIUM_sync_control

When ANGLE is using the GL backend on GLX, we can expose eglGetMscRateCHROMIUM via glXGetMscRateOML. Otherwise, this function should return false. Bug: chromium:1042393 Change-Id: Id9b308c2217e07ee9860e2869be0e23b7a0c7411 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2017048 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent a1f1cce6
Name
CHROMIUM_get_sync_values
CHROMIUM_sync_control
Name Strings
EGL_CHROMIUM_get_sync_values
EGL_CHROMIUM_sync_control
Contact
......@@ -16,7 +16,7 @@ Status
Version
Last Modified Date: N/A Revision: 1.0
Version 3, 2020-01-23
Based on GLX_OML_sync_control Revision 6.0
......@@ -70,6 +70,11 @@ New Procedures and Functions
int64_t* msc,
int64_t* sbc)
Bool eglGetMscRateCHROMIUM(EGLDisplay* dpy,
EGLSurface surface,
int32_t* numerator,
int32_t* denominator)
New Tokens
......@@ -107,16 +112,23 @@ Additions to the EGL 1.3 Specification
is located. If the surface spans multiple monitors, the monitor used
to determine MSC is the one with the biggest coverage in pixels.
The function eglGetSyncValuesCHROMIUM will return TRUE if the function
completed successfully, FALSE otherwise.
eglGetMscRateCHROMIUM returns the rate at which the MSC will be incremented
for the display associated with <hdc>. The rate is expressed in Hertz
as <numerator> / <denominator>. If the MSC rate in Hertz is an
integer, then <denominator> will be 1 and <numerator> will be
the MSC rate.
The functions eglGetSyncValuesCHROMIUM, and eglGetMscRateCHROMIUM will
return TRUE if the function completed successfully, FALSE otherwise.
Each time eglSwapBuffer succeeds, the SBC will be increased within a
finite time period.
Errors
eglGetSyncValuesCHROMIUM will return FALSE if there is no current
EGLContext.
The functions eglGetSyncValuesCHROMIUM, and eglGetMscRateCHROMIUM will
return FALSE if there is no current EGLContext.
New State
......@@ -129,3 +141,17 @@ New State
New Implementation Dependent State
None
Revision History
Version 3, 2020-01-23 (Jonah Ryan-Davis)
- Add the function eglGetMscRateCHROMIUM based on glXGetMscRateOML from
GLX_OML_sync_control revision 6.0.
Version 2, 2015-05-05 (Chad Versace)
- Rename to EGL_CHROMIUM_sync_control from EGL_CHROMIUM_get_sync_values.
EGL_CHROMIUM_sync_control is the de facto extension name because all
users query that extension string.
Version 1, 2014-08-15 (Stéphane Marchesin)
- Initial draft, based on GLX_OML_sync_control revision 6.0.
......@@ -204,21 +204,29 @@ EGLAPI EGLint EGLAPIENTRY eglProgramCacheResizeANGLE(EGLDisplay dpy, EGLint limi
#define EGL_EXTENSIONS_ENABLED_ANGLE 0x345F
#endif /* EGL_ANGLE_create_context_extensions_enabled */
#ifndef EGL_CHROMIUM_get_sync_values
#define EGL_CHROMIUM_get_sync_values 1
#ifndef EGL_CHROMIUM_sync_control
#define EGL_CHROMIUM_sync_control 1
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCVALUESCHROMIUMPROC) (EGLDisplay dpy,
EGLSurface surface,
EGLuint64KHR *ust,
EGLuint64KHR *msc,
EGLuint64KHR *sbc);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETMSCRATECHROMIUMPROC) (EGLDisplay dpy,
EGLSurface surface,
EGLint *numerator,
EGLint *denominator);
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncValuesCHROMIUM(EGLDisplay dpy,
EGLSurface surface,
EGLuint64KHR *ust,
EGLuint64KHR *msc,
EGLuint64KHR *sbc);
EGLAPI EGLBoolean EGLAPIENTRY eglGetMscRateCHROMIUM(EGLDisplay dpy,
EGLSurface surface,
EGLint *numerator,
EGLint *denominator);
#endif
#endif /* EGL_CHROMIUM_get_sync_values */
#endif /* EGL_CHROMIUM_sync_control */
#ifndef EGL_ANGLE_power_preference
#define EGL_ANGLE_power_preference 1
......
......@@ -2,21 +2,21 @@
"scripts/egl.xml":
"842e24514c4cfe09fba703c17a0fd292",
"scripts/egl_angle_ext.xml":
"24d4348e6c064b6837f46c955cc219a8",
"63f18dc9b7183ead4ddd3dfd1571973a",
"scripts/generate_loader.py":
"48c60c668bec42a80378179aae2acc61",
"scripts/registry_xml.py":
"bb42c64fca03e00c058148fffe094cbe",
"467ae1a9988049a429d8202e5d2cf73c",
"scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4",
"src/libEGL/egl_loader_autogen.cpp":
"d8ef7af0d95a1daebfa736d739b2ef84",
"6de27557530d1dff3780d83745c0a0fd",
"src/libEGL/egl_loader_autogen.h":
"e1ed9b6ef76d61bcd81df0f270531d77",
"2fca11a29bb6e5cadb25d4862360ddd8",
"util/egl_loader_autogen.cpp":
"d04cb6b5b131088edfe52956bdd3c00f",
"780b317fbd6ac03e300a7ee0122ab3cf",
"util/egl_loader_autogen.h":
"25b8ba6af5a3d3fcccc58c746de11dc1",
"55b54071e61b3e7beab28178dc20fd28",
"util/gles_loader_autogen.cpp":
"6e5c9c20677fb0957c84fcc909f07496",
"util/gles_loader_autogen.h":
......
......@@ -2,7 +2,7 @@
"scripts/egl.xml":
"842e24514c4cfe09fba703c17a0fd292",
"scripts/egl_angle_ext.xml":
"24d4348e6c064b6837f46c955cc219a8",
"63f18dc9b7183ead4ddd3dfd1571973a",
"scripts/entry_point_packed_gl_enums.json":
"bcf97f16fd4cd4d4e50d66622982e67e",
"scripts/generate_entry_points.py":
......@@ -12,7 +12,7 @@
"scripts/gl_angle_ext.xml":
"d6907cd84d95ac0b32a164194eadcf53",
"scripts/registry_xml.py":
"bb42c64fca03e00c058148fffe094cbe",
"467ae1a9988049a429d8202e5d2cf73c",
"scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4",
"src/libANGLE/Context_gl_1_0_autogen.h":
......@@ -256,9 +256,9 @@
"src/libGLESv2/libGLESv2_autogen.cpp":
"181d2ce0efeaf2e11ab197f6458f0249",
"src/libGLESv2/libGLESv2_autogen.def":
"5696d4f900d8c5bee41a04ad84dce6c5",
"7db7f3a09c464ce939608d95b57d402b",
"src/libGLESv2/libGLESv2_no_capture_autogen.def":
"13fcb5a82d976a7a24f900140390e618",
"f0019a67bd1ae1f2745dde53f316a919",
"src/libGLESv2/libGLESv2_with_capture_autogen.def":
"2a97be84ec8c166f1e549e35bb186580"
"94376e67d0c4c87d9c097cf88cdc8036"
}
\ No newline at end of file
......@@ -6,7 +6,7 @@
"scripts/gl_angle_ext.xml":
"d6907cd84d95ac0b32a164194eadcf53",
"scripts/registry_xml.py":
"bb42c64fca03e00c058148fffe094cbe",
"467ae1a9988049a429d8202e5d2cf73c",
"src/libANGLE/gl_enum_utils_autogen.cpp":
"fc023ad21e10d2279c8f14686bf838b6",
"src/libANGLE/gl_enum_utils_autogen.h":
......
......@@ -2,7 +2,7 @@
"scripts/egl.xml":
"842e24514c4cfe09fba703c17a0fd292",
"scripts/egl_angle_ext.xml":
"24d4348e6c064b6837f46c955cc219a8",
"63f18dc9b7183ead4ddd3dfd1571973a",
"scripts/gen_proc_table.py":
"24dbcc78fd3f000f58ca98237ccc0da4",
"scripts/gl.xml":
......@@ -10,11 +10,11 @@
"scripts/gl_angle_ext.xml":
"d6907cd84d95ac0b32a164194eadcf53",
"scripts/registry_xml.py":
"bb42c64fca03e00c058148fffe094cbe",
"467ae1a9988049a429d8202e5d2cf73c",
"scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4",
"src/libGL/proc_table_wgl_autogen.cpp":
"03c05f20c57c1de822b0ddaf6d4f9607",
"src/libGLESv2/proc_table_egl_autogen.cpp":
"4be09580fa1b215c2eb5406823079eed"
"9515c5c0bef251b94b3316b3ec81f1e2"
}
\ No newline at end of file
......@@ -34,6 +34,13 @@
<param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param>
</command>
<command>
<proto><ptype>EGLBoolean</ptype> <name>eglGetMscRateCHROMIUM</name></proto>
<param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
<param><ptype>EGLSurface</ptype> <name>surface</name></param>
<param><ptype>EGLint</ptype> *<name>numerator</name></param>
<param><ptype>EGLint</ptype> *<name>denominator</name></param>
</command>
<command>
<proto><ptype>EGLBoolean</ptype> <name>eglGetSyncValuesCHROMIUM</name></proto>
<param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
<param><ptype>EGLSurface</ptype> <name>surface</name></param>
......@@ -108,9 +115,10 @@
<command name="eglStreamPostD3DTextureANGLE"/>
</require>
</extension>
<extension name="EGL_CHROMIUM_get_sync_values" supported="egl">
<extension name="EGL_CHROMIUM_sync_control" supported="egl">
<require>
<command name="eglGetSyncValuesCHROMIUM"/>
<command name="eglGetMscRateCHROMIUM"/>
</require>
</extension>
<extension name="EGL_ANGLE_program_cache_control" supported="egl">
......
......@@ -122,7 +122,7 @@ supported_egl_extensions = [
"EGL_ANGLE_surface_d3d_texture_2d_share_handle",
"EGL_ANGLE_swap_with_frame_token",
"EGL_ANGLE_window_fixed_size",
"EGL_CHROMIUM_get_sync_values",
"EGL_CHROMIUM_sync_control",
"EGL_EXT_create_context_robustness",
"EGL_EXT_device_query",
"EGL_EXT_pixel_format_float",
......
......@@ -482,6 +482,11 @@ Error Surface::getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR
return mImplementation->getSyncValues(ust, msc, sbc);
}
Error Surface::getMscRate(EGLint *numerator, EGLint *denominator)
{
return mImplementation->getMscRate(numerator, denominator);
}
Error Surface::releaseTexImageFromTexture(const gl::Context *context)
{
ASSERT(mTexture);
......
......@@ -85,6 +85,7 @@ class Surface : public LabeledObject, public gl::FramebufferAttachmentObject
Error releaseTexImage(const gl::Context *context, EGLint buffer);
Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc);
Error getMscRate(EGLint *numerator, EGLint *denominator);
EGLint isPostSubBufferSupported() const;
......
......@@ -39,6 +39,7 @@ class MockSurfaceImpl : public rx::SurfaceImpl
MOCK_METHOD3(bindTexImage, egl::Error(const gl::Context *context, gl::Texture *, EGLint));
MOCK_METHOD2(releaseTexImage, egl::Error(const gl::Context *context, EGLint));
MOCK_METHOD3(getSyncValues, egl::Error(EGLuint64KHR *, EGLuint64KHR *, EGLuint64KHR *));
MOCK_METHOD2(getMscRate, egl::Error(EGLint *, EGLint *));
MOCK_METHOD1(setSwapInterval, void(EGLint));
MOCK_CONST_METHOD0(getWidth, EGLint());
MOCK_CONST_METHOD0(getHeight, EGLint());
......
......@@ -71,6 +71,7 @@ class SurfaceImpl : public FramebufferAttachmentObjectImpl
EGLint buffer) = 0;
virtual egl::Error releaseTexImage(const gl::Context *context, EGLint buffer) = 0;
virtual egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) = 0;
virtual egl::Error getMscRate(EGLint *numerator, EGLint *denominator) = 0;
virtual void setSwapInterval(EGLint interval) = 0;
virtual void setFixedWidth(EGLint width);
virtual void setFixedHeight(EGLint height);
......
......@@ -169,6 +169,12 @@ egl::Error SurfaceD3D::getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLui
return mSwapChain->getSyncValues(ust, msc, sbc);
}
egl::Error SurfaceD3D::getMscRate(EGLint *numerator, EGLint *denominator)
{
UNIMPLEMENTED();
return egl::EglBadAccess();
}
egl::Error SurfaceD3D::resetSwapChain(const egl::Display *display)
{
ASSERT(!mSwapChain);
......
......@@ -45,6 +45,7 @@ class SurfaceD3D : public SurfaceImpl
EGLint buffer) override;
egl::Error releaseTexImage(const gl::Context *context, EGLint buffer) override;
egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override;
egl::Error getMscRate(EGLint *numerator, EGLint *denominator) override;
void setSwapInterval(EGLint interval) override;
void setFixedWidth(EGLint width) override;
void setFixedHeight(EGLint height) override;
......
......@@ -34,6 +34,12 @@ egl::Error SurfaceGL::getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuin
return egl::EglBadSurface();
}
egl::Error SurfaceGL::getMscRate(EGLint *numerator, EGLint *denominator)
{
UNIMPLEMENTED();
return egl::EglBadAccess();
}
angle::Result SurfaceGL::initializeContents(const gl::Context *context,
const gl::ImageIndex &imageIndex)
{
......
......@@ -23,6 +23,7 @@ class SurfaceGL : public SurfaceImpl
FramebufferImpl *createDefaultFramebuffer(const gl::Context *context,
const gl::FramebufferState &data) override;
egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override;
egl::Error getMscRate(EGLint *numerator, EGLint *denominator) override;
angle::Result initializeContents(const gl::Context *context,
const gl::ImageIndex &imageIndex) override;
......
......@@ -60,7 +60,8 @@ struct FunctionsGLX::GLXFunctionTable
swapIntervalEXTPtr(nullptr),
swapIntervalMESAPtr(nullptr),
swapIntervalSGIPtr(nullptr),
getSyncValuesOMLPtr(nullptr)
getSyncValuesOMLPtr(nullptr),
getMscRateOMLPtr(nullptr)
{}
// GLX 1.0
......@@ -104,6 +105,7 @@ struct FunctionsGLX::GLXFunctionTable
// GLX_OML_sync_control
PFNGLXGETSYNCVALUESOMLPROC getSyncValuesOMLPtr;
PFNGLXGETMSCRATEOMLPROC getMscRateOMLPtr;
};
FunctionsGLX::FunctionsGLX()
......@@ -247,6 +249,7 @@ bool FunctionsGLX::initialize(Display *xDisplay, int screen, std::string *errorS
if (hasExtension("GLX_OML_sync_control"))
{
GET_PROC_OR_ERROR(&mFnPtrs->getSyncValuesOMLPtr, glXGetSyncValuesOML);
GET_PROC_OR_ERROR(&mFnPtrs->getMscRateOMLPtr, glXGetMscRateOML);
}
#undef GET_FNPTR_OR_ERROR
......@@ -416,4 +419,11 @@ bool FunctionsGLX::getSyncValuesOML(glx::Drawable drawable,
return mFnPtrs->getSyncValuesOMLPtr(mXDisplay, drawable, ust, msc, sbc);
}
bool FunctionsGLX::getMscRateOML(glx::Drawable drawable,
int32_t *numerator,
int32_t *denominator) const
{
return mFnPtrs->getMscRateOMLPtr(mXDisplay, drawable, numerator, denominator);
}
} // namespace rx
......@@ -80,6 +80,7 @@ class FunctionsGLX
// GLX_OML_sync_control
bool getSyncValuesOML(glx::Drawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc) const;
bool getMscRateOML(glx::Drawable drawable, int32_t *numerator, int32_t *denominator) const;
private:
// So as to isolate GLX from angle we do not include angleutils.h and cannot
......
......@@ -255,4 +255,14 @@ egl::Error WindowSurfaceGLX::getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc,
return egl::NoError();
}
egl::Error WindowSurfaceGLX::getMscRate(EGLint *numerator, EGLint *denominator)
{
if (!mGLX.getMscRateOML(mGLXWindow, reinterpret_cast<int32_t *>(numerator),
reinterpret_cast<int32_t *>(denominator)))
{
return egl::EglBadSurface() << "glXGetMscRateOML failed.";
}
return egl::NoError();
}
} // namespace rx
......@@ -56,6 +56,7 @@ class WindowSurfaceGLX : public SurfaceGLX
glx::Drawable getDrawable() const override;
egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override;
egl::Error getMscRate(EGLint *numerator, EGLint *denominator) override;
private:
bool getWindowDimensions(Window window, unsigned int *width, unsigned int *height) const;
......
......@@ -54,6 +54,7 @@ class SurfaceMtl : public SurfaceImpl
EGLint buffer) override;
egl::Error releaseTexImage(const gl::Context *context, EGLint buffer) override;
egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override;
egl::Error getMscRate(EGLint *numerator, EGLint *denominator) override;
void setSwapInterval(EGLint interval) override;
void setFixedWidth(EGLint width) override;
void setFixedHeight(EGLint height) override;
......
......@@ -340,6 +340,12 @@ egl::Error SurfaceMtl::getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLui
return egl::EglBadAccess();
}
egl::Error SurfaceMtl::getMscRate(EGLint *numerator, EGLint *denominator)
{
UNIMPLEMENTED();
return egl::EglBadAccess();
}
void SurfaceMtl::setSwapInterval(EGLint interval) {}
void SurfaceMtl::setFixedWidth(EGLint width)
......
......@@ -69,6 +69,12 @@ egl::Error SurfaceNULL::getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLu
return egl::EglBadAccess();
}
egl::Error SurfaceNULL::getMscRate(EGLint *numerator, EGLint *denominator)
{
UNIMPLEMENTED();
return egl::EglBadAccess();
}
void SurfaceNULL::setSwapInterval(EGLint interval) {}
EGLint SurfaceNULL::getWidth() const
......
......@@ -36,6 +36,7 @@ class SurfaceNULL : public SurfaceImpl
EGLint buffer) override;
egl::Error releaseTexImage(const gl::Context *context, EGLint buffer) override;
egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override;
egl::Error getMscRate(EGLint *numerator, EGLint *denominator) override;
void setSwapInterval(EGLint interval) override;
// width and height can change with client window resizing
......
......@@ -269,6 +269,12 @@ egl::Error OffscreenSurfaceVk::getSyncValues(EGLuint64KHR * /*ust*/,
return egl::EglBadAccess();
}
egl::Error OffscreenSurfaceVk::getMscRate(EGLint * /*numerator*/, EGLint * /*denominator*/)
{
UNIMPLEMENTED();
return egl::EglBadAccess();
}
void OffscreenSurfaceVk::setSwapInterval(EGLint /*interval*/) {}
EGLint OffscreenSurfaceVk::getWidth() const
......@@ -1274,6 +1280,12 @@ egl::Error WindowSurfaceVk::getSyncValues(EGLuint64KHR * /*ust*/,
return egl::EglBadAccess();
}
egl::Error WindowSurfaceVk::getMscRate(EGLint * /*numerator*/, EGLint * /*denominator*/)
{
UNIMPLEMENTED();
return egl::EglBadAccess();
}
void WindowSurfaceVk::setSwapInterval(EGLint interval)
{
const EGLint minSwapInterval = mState.config->minSwapInterval;
......
......@@ -60,6 +60,7 @@ class OffscreenSurfaceVk : public SurfaceVk
EGLint buffer) override;
egl::Error releaseTexImage(const gl::Context *context, EGLint buffer) override;
egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override;
egl::Error getMscRate(EGLint *numerator, EGLint *denominator) override;
void setSwapInterval(EGLint interval) override;
// width and height can change with client window resizing
......@@ -196,6 +197,7 @@ class WindowSurfaceVk : public SurfaceVk
EGLint buffer) override;
egl::Error releaseTexImage(const gl::Context *context, EGLint buffer) override;
egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override;
egl::Error getMscRate(EGLint *numerator, EGLint *denominator) override;
void setSwapInterval(EGLint interval) override;
// width and height can change with client window resizing
......
......@@ -3126,11 +3126,7 @@ Error ValidateStreamPostD3DTextureANGLE(const Display *display,
return stream->validateD3D11Texture(texture, attribs);
}
Error ValidateGetSyncValuesCHROMIUM(const Display *display,
const Surface *eglSurface,
const EGLuint64KHR *ust,
const EGLuint64KHR *msc,
const EGLuint64KHR *sbc)
Error ValidateSyncControlCHROMIUM(const Display *display, const Surface *eglSurface)
{
ANGLE_TRY(ValidateDisplay(display));
ANGLE_TRY(ValidateSurface(display, eglSurface));
......@@ -3141,6 +3137,36 @@ Error ValidateGetSyncValuesCHROMIUM(const Display *display,
return EglBadAccess() << "syncControlCHROMIUM extension not active";
}
return NoError();
}
Error ValidateGetMscRateCHROMIUM(const Display *display,
const Surface *eglSurface,
const EGLint *numerator,
const EGLint *denominator)
{
ANGLE_TRY(ValidateSyncControlCHROMIUM(display, eglSurface));
if (numerator == nullptr)
{
return EglBadParameter() << "numerator is null";
}
if (denominator == nullptr)
{
return EglBadParameter() << "denominator is null";
}
return NoError();
}
Error ValidateGetSyncValuesCHROMIUM(const Display *display,
const Surface *eglSurface,
const EGLuint64KHR *ust,
const EGLuint64KHR *msc,
const EGLuint64KHR *sbc)
{
ANGLE_TRY(ValidateSyncControlCHROMIUM(display, eglSurface));
if (ust == nullptr)
{
return EglBadParameter() << "ust is null";
......
......@@ -174,6 +174,10 @@ Error ValidateStreamPostD3DTextureANGLE(const Display *display,
void *texture,
const AttributeMap &attribs);
Error ValidateGetMscRateCHROMIUM(const Display *display,
const Surface *surface,
const EGLint *numerator,
const EGLint *denominator);
Error ValidateGetSyncValuesCHROMIUM(const Display *display,
const Surface *surface,
const EGLuint64KHR *ust,
......
......@@ -75,6 +75,7 @@ PFNEGLQUERYSURFACEPOINTERANGLEPROC EGL_QuerySurfacePointerANGLE;
PFNEGLCREATESTREAMPRODUCERD3DTEXTUREANGLEPROC EGL_CreateStreamProducerD3DTextureANGLE;
PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC EGL_StreamPostD3DTextureANGLE;
PFNEGLSWAPBUFFERSWITHFRAMETOKENANGLEPROC EGL_SwapBuffersWithFrameTokenANGLE;
PFNEGLGETMSCRATECHROMIUMPROC EGL_GetMscRateCHROMIUM;
PFNEGLGETSYNCVALUESCHROMIUMPROC EGL_GetSyncValuesCHROMIUM;
PFNEGLQUERYDEVICEATTRIBEXTPROC EGL_QueryDeviceAttribEXT;
PFNEGLQUERYDEVICESTRINGEXTPROC EGL_QueryDeviceStringEXT;
......@@ -209,6 +210,8 @@ void LoadEGL_EGL(LoadProc loadProc)
loadProc("EGL_StreamPostD3DTextureANGLE"));
EGL_SwapBuffersWithFrameTokenANGLE = reinterpret_cast<PFNEGLSWAPBUFFERSWITHFRAMETOKENANGLEPROC>(
loadProc("EGL_SwapBuffersWithFrameTokenANGLE"));
EGL_GetMscRateCHROMIUM =
reinterpret_cast<PFNEGLGETMSCRATECHROMIUMPROC>(loadProc("EGL_GetMscRateCHROMIUM"));
EGL_GetSyncValuesCHROMIUM =
reinterpret_cast<PFNEGLGETSYNCVALUESCHROMIUMPROC>(loadProc("EGL_GetSyncValuesCHROMIUM"));
EGL_QueryDeviceAttribEXT =
......
......@@ -83,6 +83,7 @@ ANGLE_NO_EXPORT extern PFNEGLCREATESTREAMPRODUCERD3DTEXTUREANGLEPROC
EGL_CreateStreamProducerD3DTextureANGLE;
ANGLE_NO_EXPORT extern PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC EGL_StreamPostD3DTextureANGLE;
ANGLE_NO_EXPORT extern PFNEGLSWAPBUFFERSWITHFRAMETOKENANGLEPROC EGL_SwapBuffersWithFrameTokenANGLE;
ANGLE_NO_EXPORT extern PFNEGLGETMSCRATECHROMIUMPROC EGL_GetMscRateCHROMIUM;
ANGLE_NO_EXPORT extern PFNEGLGETSYNCVALUESCHROMIUMPROC EGL_GetSyncValuesCHROMIUM;
ANGLE_NO_EXPORT extern PFNEGLQUERYDEVICEATTRIBEXTPROC EGL_QueryDeviceAttribEXT;
ANGLE_NO_EXPORT extern PFNEGLQUERYDEVICESTRINGEXTPROC EGL_QueryDeviceStringEXT;
......
......@@ -572,6 +572,15 @@ EGLBoolean EGLAPIENTRY eglGetSyncValuesCHROMIUM(EGLDisplay dpy,
return EGL_GetSyncValuesCHROMIUM(dpy, surface, ust, msc, sbc);
}
EGLBoolean EGLAPIENTRY eglGetMscRateCHROMIUM(EGLDisplay dpy,
EGLSurface surface,
EGLint *numerator,
EGLint *denominator)
{
EnsureEGLLoaded();
return EGL_GetMscRateCHROMIUM(dpy, surface, numerator, denominator);
}
EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR(EGLDisplay dpy,
EGLSurface surface,
EGLint *rects,
......
......@@ -74,6 +74,7 @@ EXPORTS
eglQueryStringiANGLE @80
eglGetNativeClientBufferANDROID @81
eglDupNativeFenceFDANDROID @82
eglGetMscRateCHROMIUM @83
; 1.5 entry points
eglCreateSync @38
......
......@@ -1020,6 +1020,42 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_WaitSyncKHR(EGLDisplay dpy, EGLSync sync
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY EGL_GetMscRateCHROMIUM(EGLDisplay dpy,
EGLSurface surface,
EGLint *numerator,
EGLint *denominator)
{
ANGLE_SCOPED_GLOBAL_LOCK();
FUNC_EVENT("EGLDisplay dpy = 0x%016" PRIxPTR ", EGLSurface surface = 0x%016" PRIxPTR
", EGLint* numerator = 0x%016" PRIxPTR
", "
"EGLint* denomintor = 0x%016" PRIxPTR "",
(uintptr_t)dpy, (uintptr_t)surface, (uintptr_t)numerator, (uintptr_t)denominator);
Thread *thread = egl::GetCurrentThread();
egl::Display *display = static_cast<egl::Display *>(dpy);
Surface *eglSurface = static_cast<Surface *>(surface);
Error error = ValidateGetMscRateCHROMIUM(display, eglSurface, numerator, denominator);
if (error.isError())
{
thread->setError(error, GetDebug(), "eglGetMscRateCHROMIUM",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
error = eglSurface->getMscRate(numerator, denominator);
if (error.isError())
{
thread->setError(error, GetDebug(), "eglGetMscRateCHROMIUM",
GetSurfaceIfValid(display, eglSurface));
return EGL_FALSE;
}
thread->setSuccess();
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY EGL_GetSyncValuesCHROMIUM(EGLDisplay dpy,
EGLSurface surface,
EGLuint64KHR *ust,
......
......@@ -128,12 +128,16 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetSyncAttribKHR(EGLDisplay dpy,
// EGL_KHR_wait_sync
ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_WaitSyncKHR(EGLDisplay dpy, EGLSync sync, EGLint flags);
// EGL_CHROMIUM_get_sync_values
// EGL_CHROMIUM_sync_control
ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetSyncValuesCHROMIUM(EGLDisplay dpy,
EGLSurface surface,
EGLuint64KHR *ust,
EGLuint64KHR *msc,
EGLuint64KHR *sbc);
ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetMscRateCHROMIUM(EGLDisplay dpy,
EGLSurface surface,
EGLint *numerator,
EGLint *denominator);
// EGL_KHR_swap_buffers_with_damage
ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_SwapBuffersWithDamageKHR(EGLDisplay dpy,
......
......@@ -1676,7 +1676,8 @@ EXPORTS
; EGL_ANGLE_swap_with_frame_token
EGL_SwapBuffersWithFrameTokenANGLE
; EGL_CHROMIUM_get_sync_values
; EGL_CHROMIUM_sync_control
EGL_GetMscRateCHROMIUM
EGL_GetSyncValuesCHROMIUM
; EGL_EXT_device_query
......
......@@ -1676,7 +1676,8 @@ EXPORTS
; EGL_ANGLE_swap_with_frame_token
EGL_SwapBuffersWithFrameTokenANGLE
; EGL_CHROMIUM_get_sync_values
; EGL_CHROMIUM_sync_control
EGL_GetMscRateCHROMIUM
EGL_GetSyncValuesCHROMIUM
; EGL_EXT_device_query
......
......@@ -1676,7 +1676,8 @@ EXPORTS
; EGL_ANGLE_swap_with_frame_token
EGL_SwapBuffersWithFrameTokenANGLE
; EGL_CHROMIUM_get_sync_values
; EGL_CHROMIUM_sync_control
EGL_GetMscRateCHROMIUM
EGL_GetSyncValuesCHROMIUM
; EGL_EXT_device_query
......
......@@ -71,6 +71,7 @@ ProcEntry g_procTable[] = {
{"eglGetError", P(EGL_GetError)},
{"eglGetFrameTimestampSupportedANDROID", P(EGL_GetFrameTimestampSupportedANDROID)},
{"eglGetFrameTimestampsANDROID", P(EGL_GetFrameTimestampsANDROID)},
{"eglGetMscRateCHROMIUM", P(EGL_GetMscRateCHROMIUM)},
{"eglGetNativeClientBufferANDROID", P(EGL_GetNativeClientBufferANDROID)},
{"eglGetNextFrameIdANDROID", P(EGL_GetNextFrameIdANDROID)},
{"eglGetPlatformDisplay", P(EGL_GetPlatformDisplay)},
......@@ -1539,5 +1540,5 @@ ProcEntry g_procTable[] = {
{"glWeightPointerOES", P(gl::WeightPointerOES)},
{"glWeightPointerOESContextANGLE", P(gl::WeightPointerOESContextANGLE)}};
size_t g_numProcs = 1435;
size_t g_numProcs = 1436;
} // namespace egl
......@@ -77,6 +77,7 @@ ANGLE_UTIL_EXPORT PFNEGLCREATESTREAMPRODUCERD3DTEXTUREANGLEPROC
eglCreateStreamProducerD3DTextureANGLE;
ANGLE_UTIL_EXPORT PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC eglStreamPostD3DTextureANGLE;
ANGLE_UTIL_EXPORT PFNEGLSWAPBUFFERSWITHFRAMETOKENANGLEPROC eglSwapBuffersWithFrameTokenANGLE;
ANGLE_UTIL_EXPORT PFNEGLGETMSCRATECHROMIUMPROC eglGetMscRateCHROMIUM;
ANGLE_UTIL_EXPORT PFNEGLGETSYNCVALUESCHROMIUMPROC eglGetSyncValuesCHROMIUM;
ANGLE_UTIL_EXPORT PFNEGLQUERYDEVICEATTRIBEXTPROC eglQueryDeviceAttribEXT;
ANGLE_UTIL_EXPORT PFNEGLQUERYDEVICESTRINGEXTPROC eglQueryDeviceStringEXT;
......@@ -213,6 +214,8 @@ void LoadEGL(LoadProc loadProc)
loadProc("eglStreamPostD3DTextureANGLE"));
eglSwapBuffersWithFrameTokenANGLE = reinterpret_cast<PFNEGLSWAPBUFFERSWITHFRAMETOKENANGLEPROC>(
loadProc("eglSwapBuffersWithFrameTokenANGLE"));
eglGetMscRateCHROMIUM =
reinterpret_cast<PFNEGLGETMSCRATECHROMIUMPROC>(loadProc("eglGetMscRateCHROMIUM"));
eglGetSyncValuesCHROMIUM =
reinterpret_cast<PFNEGLGETSYNCVALUESCHROMIUMPROC>(loadProc("eglGetSyncValuesCHROMIUM"));
eglQueryDeviceAttribEXT =
......
......@@ -84,6 +84,7 @@ ANGLE_UTIL_EXPORT extern PFNEGLCREATESTREAMPRODUCERD3DTEXTUREANGLEPROC
eglCreateStreamProducerD3DTextureANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC eglStreamPostD3DTextureANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLSWAPBUFFERSWITHFRAMETOKENANGLEPROC eglSwapBuffersWithFrameTokenANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLGETMSCRATECHROMIUMPROC eglGetMscRateCHROMIUM;
ANGLE_UTIL_EXPORT extern PFNEGLGETSYNCVALUESCHROMIUMPROC eglGetSyncValuesCHROMIUM;
ANGLE_UTIL_EXPORT extern PFNEGLQUERYDEVICEATTRIBEXTPROC eglQueryDeviceAttribEXT;
ANGLE_UTIL_EXPORT extern PFNEGLQUERYDEVICESTRINGEXTPROC eglQueryDeviceStringEXT;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment