diff options
| author | 2022-08-15 22:03:21 -0700 | |
|---|---|---|
| committer | 2022-08-15 22:03:21 -0700 | |
| commit | 98bb5a14bb2adf2d02822c0089b1f45f6b2e2950 (patch) | |
| tree | b6447f8ca23d43ac373f07bb074c33879b0503ea /opengl/java | |
| parent | f6e4707393508648635b2f34bec869f2604b3112 (diff) | |
| parent | ca9ea94b2d24d658fe5c54d3571ffe6a7959b399 (diff) | |
DO NOT MERGE - Merge Android 13
Bug: 242648940
Merged-In: I2d525d59c24df63429ef090e41e45952506c1c59
Change-Id: I2a6d4e66fb340c995bf4a004f22bd44ddeae6267
Diffstat (limited to 'opengl/java')
| -rw-r--r-- | opengl/java/android/opengl/EGLExt.java | 40 | 
1 files changed, 40 insertions, 0 deletions
| diff --git a/opengl/java/android/opengl/EGLExt.java b/opengl/java/android/opengl/EGLExt.java index 74b64ead77bb..1570e0e22f50 100644 --- a/opengl/java/android/opengl/EGLExt.java +++ b/opengl/java/android/opengl/EGLExt.java @@ -18,6 +18,11 @@  package android.opengl; +import android.annotation.NonNull; +import android.hardware.SyncFence; +import android.os.ParcelFileDescriptor; +import android.util.Log; +  /**   * EGL Extensions   */ @@ -30,6 +35,12 @@ public class EGLExt {      public static final int EGL_OPENGL_ES3_BIT_KHR          = 0x0040;      public static final int EGL_RECORDABLE_ANDROID          = 0x3142; +    // EGL_ANDROID_native_fence_sync +    public static final int EGL_SYNC_NATIVE_FENCE_ANDROID     = 0x3144; +    public static final int EGL_SYNC_NATIVE_FENCE_FD_ANDROID  = 0x3145; +    public static final int EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID = 0x3146; +    public static final int EGL_NO_NATIVE_FENCE_FD_ANDROID    = -1; +      native private static void _nativeClassInit();      static {          _nativeClassInit(); @@ -43,4 +54,33 @@ public class EGLExt {          long time      ); +    /** +     * Retrieves the SyncFence for an EGLSync created with EGL_SYNC_NATIVE_FENCE_ANDROID +     * +     * See <a href="https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt"> +     *     EGL_ANDROID_native_fence_sync</a> extension for more details +     * @param display The EGLDisplay connection +     * @param sync The EGLSync to fetch the SyncFence from +     * @return A SyncFence representing the native fence. +     *       * If <sync> is not a valid sync object for <display>, +     *         an {@link SyncFence#isValid() invalid} SyncFence is returned and an EGL_BAD_PARAMETER +     *         error is generated. +     *       * If the EGL_SYNC_NATIVE_FENCE_FD_ANDROID attribute of <sync> is +     *         EGL_NO_NATIVE_FENCE_FD_ANDROID, an {@link SyncFence#isValid() invalid} SyncFence is +     *         returned and an EGL_BAD_PARAMETER error is generated. +     *       * If <display> does not match the display passed to eglCreateSync +     *         when <sync> was created, the behaviour is undefined. +     */ +    public static @NonNull SyncFence eglDupNativeFenceFDANDROID(@NonNull EGLDisplay display, +            @NonNull EGLSync sync) { +        int fd = eglDupNativeFenceFDANDROIDImpl(display, sync); +        Log.d("EGL", "eglDupNativeFence returned " + fd); +        if (fd >= 0) { +            return SyncFence.create(ParcelFileDescriptor.adoptFd(fd)); +        } else { +            return SyncFence.createEmpty(); +        } +    } + +    private static native int eglDupNativeFenceFDANDROIDImpl(EGLDisplay display, EGLSync sync);  } |