diff options
Diffstat (limited to 'opengl/libs')
-rw-r--r-- | opengl/libs/Android.bp | 16 | ||||
-rw-r--r-- | opengl/libs/EGL/BlobCache.cpp | 2 | ||||
-rw-r--r-- | opengl/libs/EGL/BlobCache.h | 15 | ||||
-rw-r--r-- | opengl/libs/EGL/FileBlobCache.cpp | 186 | ||||
-rw-r--r-- | opengl/libs/EGL/FileBlobCache.h | 43 | ||||
-rw-r--r-- | opengl/libs/EGL/eglApi.cpp | 443 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_cache.cpp | 170 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_cache.h | 12 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_display.cpp | 29 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_display.h | 3 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_object.cpp | 187 | ||||
-rw-r--r-- | opengl/libs/EGL/egl_object.h | 34 | ||||
-rw-r--r-- | opengl/libs/EGL/getProcAddress.cpp | 44 | ||||
-rw-r--r-- | opengl/libs/GLES2/gl2ext_api.in | 379 | ||||
-rw-r--r-- | opengl/libs/GLES_CM/glext_api.in | 9 | ||||
-rw-r--r-- | opengl/libs/entries.in | 125 | ||||
-rw-r--r-- | opengl/libs/enums.in | 135 | ||||
-rw-r--r-- | opengl/libs/libGLESv2.map.txt | 2 | ||||
-rw-r--r-- | opengl/libs/libGLESv3.map.txt | 7 |
19 files changed, 1419 insertions, 422 deletions
diff --git a/opengl/libs/Android.bp b/opengl/libs/Android.bp index 32c2d7e0d5..d43c1648be 100644 --- a/opengl/libs/Android.bp +++ b/opengl/libs/Android.bp @@ -122,6 +122,16 @@ cc_library_static { }, } +cc_library_static { + name: "libEGL_blobCache", + defaults: ["egl_libs_defaults"], + srcs: [ + "EGL/BlobCache.cpp", + "EGL/FileBlobCache.cpp", + ], + export_include_dirs: ["EGL"], +} + cc_library_shared { name: "libEGL", defaults: ["egl_libs_defaults"], @@ -133,7 +143,6 @@ cc_library_shared { "EGL/egl.cpp", "EGL/eglApi.cpp", "EGL/Loader.cpp", - "EGL/BlobCache.cpp", ], shared_libs: [ "libvndksupport", @@ -143,7 +152,10 @@ cc_library_shared { "libhidltransport", "libutils", ], - static_libs: ["libEGL_getProcAddress"], + static_libs: [ + "libEGL_getProcAddress", + "libEGL_blobCache", + ], ldflags: ["-Wl,--exclude-libs=ALL"], export_include_dirs: ["EGL/include"], } diff --git a/opengl/libs/EGL/BlobCache.cpp b/opengl/libs/EGL/BlobCache.cpp index 0624b609ce..b3752f5bcc 100644 --- a/opengl/libs/EGL/BlobCache.cpp +++ b/opengl/libs/EGL/BlobCache.cpp @@ -37,9 +37,9 @@ static const uint32_t blobCacheVersion = 3; static const uint32_t blobCacheDeviceVersion = 1; BlobCache::BlobCache(size_t maxKeySize, size_t maxValueSize, size_t maxTotalSize): + mMaxTotalSize(maxTotalSize), mMaxKeySize(maxKeySize), mMaxValueSize(maxValueSize), - mMaxTotalSize(maxTotalSize), mTotalSize(0) { int64_t now = std::chrono::steady_clock::now().time_since_epoch().count(); #ifdef _WIN32 diff --git a/opengl/libs/EGL/BlobCache.h b/opengl/libs/EGL/BlobCache.h index a0a270a5fe..1f5d5357e6 100644 --- a/opengl/libs/EGL/BlobCache.h +++ b/opengl/libs/EGL/BlobCache.h @@ -97,6 +97,14 @@ public: // int unflatten(void const* buffer, size_t size); +protected: + // mMaxTotalSize is the maximum size that all cache entries can occupy. This + // includes space for both keys and values. When a call to BlobCache::set + // would otherwise cause this limit to be exceeded, either the key/value + // pair passed to BlobCache::set will not be cached or other cache entries + // will be evicted from the cache to make room for the new entry. + const size_t mMaxTotalSize; + private: // Copying is disallowed. BlobCache(const BlobCache&); @@ -220,13 +228,6 @@ private: // simply not add the key/value pair to the cache. const size_t mMaxValueSize; - // mMaxTotalSize is the maximum size that all cache entries can occupy. This - // includes space for both keys and values. When a call to BlobCache::set - // would otherwise cause this limit to be exceeded, either the key/value - // pair passed to BlobCache::set will not be cached or other cache entries - // will be evicted from the cache to make room for the new entry. - const size_t mMaxTotalSize; - // mTotalSize is the total combined size of all keys and values currently in // the cache. size_t mTotalSize; diff --git a/opengl/libs/EGL/FileBlobCache.cpp b/opengl/libs/EGL/FileBlobCache.cpp new file mode 100644 index 0000000000..79237159bf --- /dev/null +++ b/opengl/libs/EGL/FileBlobCache.cpp @@ -0,0 +1,186 @@ +/* + ** Copyright 2017, The Android Open Source Project + ** + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** + ** http://www.apache.org/licenses/LICENSE-2.0 + ** + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + */ + +#include "FileBlobCache.h" + +#include <errno.h> +#include <inttypes.h> +#include <log/log.h> +#include <sys/mman.h> +#include <sys/stat.h> + + +// Cache file header +static const char* cacheFileMagic = "EGL$"; +static const size_t cacheFileHeaderSize = 8; + +namespace android { + +static uint32_t crc32c(const uint8_t* buf, size_t len) { + const uint32_t polyBits = 0x82F63B78; + uint32_t r = 0; + for (size_t i = 0; i < len; i++) { + r ^= buf[i]; + for (int j = 0; j < 8; j++) { + if (r & 1) { + r = (r >> 1) ^ polyBits; + } else { + r >>= 1; + } + } + } + return r; +} + +FileBlobCache::FileBlobCache(size_t maxKeySize, size_t maxValueSize, size_t maxTotalSize, + const std::string& filename) + : BlobCache(maxKeySize, maxValueSize, maxTotalSize) + , mFilename(filename) { + if (mFilename.length() > 0) { + size_t headerSize = cacheFileHeaderSize; + + int fd = open(mFilename.c_str(), O_RDONLY, 0); + if (fd == -1) { + if (errno != ENOENT) { + ALOGE("error opening cache file %s: %s (%d)", mFilename.c_str(), + strerror(errno), errno); + } + return; + } + + struct stat statBuf; + if (fstat(fd, &statBuf) == -1) { + ALOGE("error stat'ing cache file: %s (%d)", strerror(errno), errno); + close(fd); + return; + } + + // Sanity check the size before trying to mmap it. + size_t fileSize = statBuf.st_size; + if (fileSize > mMaxTotalSize * 2) { + ALOGE("cache file is too large: %#" PRIx64, + static_cast<off64_t>(statBuf.st_size)); + close(fd); + return; + } + + uint8_t* buf = reinterpret_cast<uint8_t*>(mmap(NULL, fileSize, + PROT_READ, MAP_PRIVATE, fd, 0)); + if (buf == MAP_FAILED) { + ALOGE("error mmaping cache file: %s (%d)", strerror(errno), + errno); + close(fd); + return; + } + + // Check the file magic and CRC + size_t cacheSize = fileSize - headerSize; + if (memcmp(buf, cacheFileMagic, 4) != 0) { + ALOGE("cache file has bad mojo"); + close(fd); + return; + } + uint32_t* crc = reinterpret_cast<uint32_t*>(buf + 4); + if (crc32c(buf + headerSize, cacheSize) != *crc) { + ALOGE("cache file failed CRC check"); + close(fd); + return; + } + + int err = unflatten(buf + headerSize, cacheSize); + if (err < 0) { + ALOGE("error reading cache contents: %s (%d)", strerror(-err), + -err); + munmap(buf, fileSize); + close(fd); + return; + } + + munmap(buf, fileSize); + close(fd); + } +} + +void FileBlobCache::writeToFile() { + if (mFilename.length() > 0) { + size_t cacheSize = getFlattenedSize(); + size_t headerSize = cacheFileHeaderSize; + const char* fname = mFilename.c_str(); + + // Try to create the file with no permissions so we can write it + // without anyone trying to read it. + int fd = open(fname, O_CREAT | O_EXCL | O_RDWR, 0); + if (fd == -1) { + if (errno == EEXIST) { + // The file exists, delete it and try again. + if (unlink(fname) == -1) { + // No point in retrying if the unlink failed. + ALOGE("error unlinking cache file %s: %s (%d)", fname, + strerror(errno), errno); + return; + } + // Retry now that we've unlinked the file. + fd = open(fname, O_CREAT | O_EXCL | O_RDWR, 0); + } + if (fd == -1) { + ALOGE("error creating cache file %s: %s (%d)", fname, + strerror(errno), errno); + return; + } + } + + size_t fileSize = headerSize + cacheSize; + + uint8_t* buf = new uint8_t [fileSize]; + if (!buf) { + ALOGE("error allocating buffer for cache contents: %s (%d)", + strerror(errno), errno); + close(fd); + unlink(fname); + return; + } + + int err = flatten(buf + headerSize, cacheSize); + if (err < 0) { + ALOGE("error writing cache contents: %s (%d)", strerror(-err), + -err); + delete [] buf; + close(fd); + unlink(fname); + return; + } + + // Write the file magic and CRC + memcpy(buf, cacheFileMagic, 4); + uint32_t* crc = reinterpret_cast<uint32_t*>(buf + 4); + *crc = crc32c(buf + headerSize, cacheSize); + + if (write(fd, buf, fileSize) == -1) { + ALOGE("error writing cache file: %s (%d)", strerror(errno), + errno); + delete [] buf; + close(fd); + unlink(fname); + return; + } + + delete [] buf; + fchmod(fd, S_IRUSR); + close(fd); + } +} + +} diff --git a/opengl/libs/EGL/FileBlobCache.h b/opengl/libs/EGL/FileBlobCache.h new file mode 100644 index 0000000000..393703f234 --- /dev/null +++ b/opengl/libs/EGL/FileBlobCache.h @@ -0,0 +1,43 @@ +/* + ** Copyright 2017, The Android Open Source Project + ** + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** + ** http://www.apache.org/licenses/LICENSE-2.0 + ** + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + */ + +#ifndef ANDROID_FILE_BLOB_CACHE_H +#define ANDROID_FILE_BLOB_CACHE_H + +#include "BlobCache.h" +#include <string> + +namespace android { + +class FileBlobCache : public BlobCache { +public: + // FileBlobCache attempts to load the saved cache contents from disk into + // BlobCache. + FileBlobCache(size_t maxKeySize, size_t maxValueSize, size_t maxTotalSize, + const std::string& filename); + + // writeToFile attempts to save the current contents of BlobCache to + // disk. + void writeToFile(); + +private: + // mFilename is the name of the file for storing cache contents. + std::string mFilename; +}; + +} // namespace android + +#endif // ANDROID_BLOB_CACHE_H diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp index 94dfe6a9de..c65bddfbb3 100644 --- a/opengl/libs/EGL/eglApi.cpp +++ b/opengl/libs/EGL/eglApi.cpp @@ -80,6 +80,7 @@ extern char const * const gBuiltinExtensionString; extern char const * const gExtensionString; // clang-format off +// Extensions implemented by the EGL wrapper. char const * const gBuiltinExtensionString = "EGL_KHR_get_all_proc_addresses " "EGL_ANDROID_presentation_time " @@ -87,11 +88,15 @@ char const * const gBuiltinExtensionString = "EGL_ANDROID_get_native_client_buffer " "EGL_ANDROID_front_buffer_auto_refresh " "EGL_ANDROID_get_frame_timestamps " + "EGL_EXT_surface_SMPTE2086_metadata " + "EGL_EXT_surface_CTA861_3_metadata " ; +// Whitelist of extensions exposed to applications if implemented in the vendor driver. char const * const gExtensionString = "EGL_KHR_image " // mandatory "EGL_KHR_image_base " // mandatory + "EGL_EXT_image_gl_colorspace " "EGL_KHR_image_pixmap " "EGL_KHR_lock_surface " "EGL_KHR_gl_colorspace " @@ -240,8 +245,6 @@ static const extention_map_t sExtensionMap[] = { !strcmp((procname), "eglHibernateProcessIMG") || \ !strcmp((procname), "eglAwakenProcessIMG")) - - // accesses protected by sExtensionMapMutex static std::unordered_map<std::string, __eglMustCastToProperFunctionPointerType> sGLExtentionMap; @@ -450,12 +453,8 @@ EGLBoolean eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, // surfaces // ---------------------------------------------------------------------------- -// Turn linear formats into corresponding sRGB formats when colorspace is -// EGL_GL_COLORSPACE_SRGB_KHR, or turn sRGB formats into corresponding linear -// formats when colorspace is EGL_GL_COLORSPACE_LINEAR_KHR. In any cases where -// the modification isn't possible, the original dataSpace is returned. -static android_dataspace modifyBufferDataspace(android_dataspace dataSpace, - EGLint colorspace) { +// Translates EGL color spaces to Android data spaces. +static android_dataspace dataSpaceFromEGLColorSpace(EGLint colorspace) { if (colorspace == EGL_GL_COLORSPACE_LINEAR_KHR) { return HAL_DATASPACE_SRGB_LINEAR; } else if (colorspace == EGL_GL_COLORSPACE_SRGB_KHR) { @@ -468,144 +467,147 @@ static android_dataspace modifyBufferDataspace(android_dataspace dataSpace, return HAL_DATASPACE_V0_SCRGB; } else if (colorspace == EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT) { return HAL_DATASPACE_V0_SCRGB_LINEAR; + } else if (colorspace == EGL_GL_COLORSPACE_BT2020_LINEAR_EXT) { + return HAL_DATASPACE_BT2020_LINEAR; + } else if (colorspace == EGL_GL_COLORSPACE_BT2020_PQ_EXT) { + return HAL_DATASPACE_BT2020_PQ; + } + return HAL_DATASPACE_UNKNOWN; +} + +// Get the colorspace value that should be reported from queries. When the colorspace +// is unknown (no attribute passed), default to reporting LINEAR. +static EGLint getReportedColorSpace(EGLint colorspace) { + return colorspace == EGL_UNKNOWN ? EGL_GL_COLORSPACE_LINEAR_KHR : colorspace; +} + +// Returns a list of color spaces understood by the vendor EGL driver. +static std::vector<EGLint> getDriverColorSpaces(egl_display_ptr dp, + android_pixel_format format) { + std::vector<EGLint> colorSpaces; + if (!dp->hasColorSpaceSupport) return colorSpaces; + + // OpenGL drivers only support sRGB encoding with 8-bit formats. + // RGB_888 is never returned by getNativePixelFormat, but is included for completeness. + const bool formatSupportsSRGBEncoding = + format == HAL_PIXEL_FORMAT_RGBA_8888 || format == HAL_PIXEL_FORMAT_RGBX_8888 || + format == HAL_PIXEL_FORMAT_RGB_888; + const bool formatIsFloatingPoint = format == HAL_PIXEL_FORMAT_RGBA_FP16; + + if (formatSupportsSRGBEncoding) { + // sRGB and linear are always supported when color space support is present. + colorSpaces.push_back(EGL_GL_COLORSPACE_SRGB_KHR); + colorSpaces.push_back(EGL_GL_COLORSPACE_LINEAR_KHR); + // DCI-P3 uses the sRGB transfer function, so it's only relevant for 8-bit formats. + if (findExtension(dp->disp.queryString.extensions, + "EGL_EXT_gl_colorspace_display_p3")) { + colorSpaces.push_back(EGL_GL_COLORSPACE_DISPLAY_P3_EXT); + } } - return dataSpace; -} - -// Return true if we stripped any EGL_GL_COLORSPACE_KHR attributes. -static EGLBoolean stripColorSpaceAttribute(egl_display_ptr dp, const EGLint* attrib_list, - EGLint format, - std::vector<EGLint>& stripped_attrib_list) { - std::vector<EGLint> allowedColorSpaces; - switch (format) { - case HAL_PIXEL_FORMAT_RGBA_8888: - case HAL_PIXEL_FORMAT_RGB_565: - // driver okay with linear & sRGB for 8888, but can't handle - // Display-P3 or other spaces. - allowedColorSpaces.push_back(EGL_GL_COLORSPACE_SRGB_KHR); - allowedColorSpaces.push_back(EGL_GL_COLORSPACE_LINEAR_KHR); - break; - case HAL_PIXEL_FORMAT_RGBA_FP16: - case HAL_PIXEL_FORMAT_RGBA_1010102: - default: - // driver does not want to see colorspace attributes for 1010102 or fp16. - // Future: if driver supports XXXX extension, we can pass down that colorspace - break; + // According to the spec, scRGB is only supported for floating point formats. + // For non-linear scRGB, the application is responsible for applying the + // transfer function. + if (formatIsFloatingPoint) { + if (findExtension(dp->disp.queryString.extensions, + "EGL_EXT_gl_colorspace_scrgb")) { + colorSpaces.push_back(EGL_GL_COLORSPACE_SCRGB_EXT); + } + if (findExtension(dp->disp.queryString.extensions, + "EGL_EXT_gl_colorspace_scrgb_linear")) { + colorSpaces.push_back(EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT); + } } - bool stripped = false; - if (attrib_list && dp->haveExtension("EGL_KHR_gl_colorspace")) { - for (const EGLint* attr = attrib_list; attr[0] != EGL_NONE; attr += 2) { - if (attr[0] == EGL_GL_COLORSPACE_KHR) { - EGLint colorSpace = attr[1]; - bool found = false; - // Verify that color space is allowed - for (auto it : allowedColorSpaces) { - if (colorSpace == it) { - found = true; - } - } - if (!found) { - stripped = true; - } else { - stripped_attrib_list.push_back(attr[0]); - stripped_attrib_list.push_back(attr[1]); + // BT2020 can be used with any pixel format. PQ encoding must be applied by the + // application and does not affect the behavior of OpenGL. + if (findExtension(dp->disp.queryString.extensions, + "EGL_EXT_gl_colorspace_bt2020_linear")) { + colorSpaces.push_back(EGL_GL_COLORSPACE_BT2020_LINEAR_EXT); + } + if (findExtension(dp->disp.queryString.extensions, + "EGL_EXT_gl_colorspace_bt2020_pq")) { + colorSpaces.push_back(EGL_GL_COLORSPACE_BT2020_PQ_EXT); + } + + // Linear DCI-P3 simply uses different primaries than standard RGB and thus + // can be used with any pixel format. + if (findExtension(dp->disp.queryString.extensions, + "EGL_EXT_gl_colorspace_display_p3_linear")) { + colorSpaces.push_back(EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT); + } + return colorSpaces; +} + +// Cleans up color space related parameters that the driver does not understand. +// If there is no color space attribute in attrib_list, colorSpace is left +// unmodified. +static EGLBoolean processAttributes(egl_display_ptr dp, NativeWindowType window, + android_pixel_format format, const EGLint* attrib_list, + EGLint* colorSpace, + std::vector<EGLint>* strippedAttribList) { + for (const EGLint* attr = attrib_list; attr && attr[0] != EGL_NONE; attr += 2) { + bool copyAttribute = true; + if (attr[0] == EGL_GL_COLORSPACE_KHR) { + // Fail immediately if the driver doesn't have color space support at all. + if (!dp->hasColorSpaceSupport) return false; + *colorSpace = attr[1]; + + // Strip the attribute if the driver doesn't understand it. + copyAttribute = false; + std::vector<EGLint> driverColorSpaces = getDriverColorSpaces(dp, format); + for (auto driverColorSpace : driverColorSpaces) { + if (attr[1] == driverColorSpace) { + copyAttribute = true; + break; } - } else { - stripped_attrib_list.push_back(attr[0]); - stripped_attrib_list.push_back(attr[1]); } } + if (copyAttribute) { + strippedAttribList->push_back(attr[0]); + strippedAttribList->push_back(attr[1]); + } } - if (stripped) { - stripped_attrib_list.push_back(EGL_NONE); - stripped_attrib_list.push_back(EGL_NONE); - } - return stripped; -} - -static EGLBoolean getColorSpaceAttribute(egl_display_ptr dp, NativeWindowType window, - const EGLint* attrib_list, EGLint& colorSpace, - android_dataspace& dataSpace) { - colorSpace = EGL_GL_COLORSPACE_LINEAR_KHR; - dataSpace = HAL_DATASPACE_UNKNOWN; - - if (attrib_list && dp->haveExtension("EGL_KHR_gl_colorspace")) { - for (const EGLint* attr = attrib_list; *attr != EGL_NONE; attr += 2) { - if (*attr == EGL_GL_COLORSPACE_KHR) { - colorSpace = attr[1]; - bool found = false; - bool verify = true; - // Verify that color space is allowed - if (colorSpace == EGL_GL_COLORSPACE_SRGB_KHR || - colorSpace == EGL_GL_COLORSPACE_LINEAR_KHR) { - // SRGB and LINEAR are always supported when EGL_KHR_gl_colorspace - // is available, so no need to verify. - found = true; - verify = false; - } else if (colorSpace == EGL_EXT_gl_colorspace_bt2020_linear && - dp->haveExtension("EGL_EXT_gl_colorspace_bt2020_linear")) { - found = true; - } else if (colorSpace == EGL_EXT_gl_colorspace_bt2020_pq && - dp->haveExtension("EGL_EXT_gl_colorspace_bt2020_pq")) { - found = true; - } else if (colorSpace == EGL_GL_COLORSPACE_SCRGB_EXT && - dp->haveExtension("EGL_EXT_gl_colorspace_scrgb")) { - found = true; - } else if (colorSpace == EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT && - dp->haveExtension("EGL_EXT_gl_colorspace_scrgb_linear")) { - found = true; - } else if (colorSpace == EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT && - dp->haveExtension("EGL_EXT_gl_colorspace_display_p3_linear")) { - found = true; - } else if (colorSpace == EGL_GL_COLORSPACE_DISPLAY_P3_EXT && - dp->haveExtension("EGL_EXT_gl_colorspace_display_p3")) { - found = true; - } - if (!found) { - return false; - } - if (verify && window) { - bool wide_color_support = true; - // Ordinarily we'd put a call to native_window_get_wide_color_support - // at the beginning of the function so that we'll have the - // result when needed elsewhere in the function. - // However, because eglCreateWindowSurface is called by SurfaceFlinger and - // SurfaceFlinger is required to answer the call below we would - // end up in a deadlock situation. By moving the call to only happen - // if the application has specifically asked for wide-color we avoid - // the deadlock with SurfaceFlinger since it will not ask for a - // wide-color surface. - int err = native_window_get_wide_color_support(window, &wide_color_support); - - if (err) { - ALOGE("getColorSpaceAttribute: invalid window (win=%p) " - "failed (%#x) (already connected to another API?)", - window, err); - return false; - } - if (!wide_color_support) { - // Application has asked for a wide-color colorspace but - // wide-color support isn't available on the display the window is on. - return false; - } - } - // Only change the dataSpace from default if the application - // has explicitly set the color space with a EGL_GL_COLORSPACE_KHR attribute. - dataSpace = modifyBufferDataspace(dataSpace, colorSpace); - } + // Terminate the attribute list. + strippedAttribList->push_back(EGL_NONE); + + // If the passed color space has wide color gamut, check whether the target native window + // supports wide color. + const bool colorSpaceIsNarrow = + *colorSpace == EGL_GL_COLORSPACE_SRGB_KHR || + *colorSpace == EGL_GL_COLORSPACE_LINEAR_KHR || + *colorSpace == EGL_UNKNOWN; + if (window && !colorSpaceIsNarrow) { + bool windowSupportsWideColor = true; + // Ordinarily we'd put a call to native_window_get_wide_color_support + // at the beginning of the function so that we'll have the + // result when needed elsewhere in the function. + // However, because eglCreateWindowSurface is called by SurfaceFlinger and + // SurfaceFlinger is required to answer the call below we would + // end up in a deadlock situation. By moving the call to only happen + // if the application has specifically asked for wide-color we avoid + // the deadlock with SurfaceFlinger since it will not ask for a + // wide-color surface. + int err = native_window_get_wide_color_support(window, &windowSupportsWideColor); + + if (err) { + ALOGE("processAttributes: invalid window (win=%p) " + "failed (%#x) (already connected to another API?)", + window, err); + return false; + } + if (!windowSupportsWideColor) { + // Application has asked for a wide-color colorspace but + // wide-color support isn't available on the display the window is on. + return false; } } return true; } -static EGLBoolean getColorSpaceAttribute(egl_display_ptr dp, const EGLint* attrib_list, - EGLint& colorSpace, android_dataspace& dataSpace) { - return getColorSpaceAttribute(dp, NULL, attrib_list, colorSpace, dataSpace); -} - -void getNativePixelFormat(EGLDisplay dpy, egl_connection_t* cnx, EGLConfig config, EGLint& format) { +// Gets the native pixel format corrsponding to the passed EGLConfig. +void getNativePixelFormat(EGLDisplay dpy, egl_connection_t* cnx, EGLConfig config, + android_pixel_format* format) { // Set the native window's buffers format to match what this config requests. // Whether to use sRGB gamma is not part of the EGLconfig, but is part // of our native format. So if sRGB gamma is requested, we have to @@ -639,42 +641,67 @@ void getNativePixelFormat(EGLDisplay dpy, egl_connection_t* cnx, EGLConfig confi // endif if (a == 0) { if (colorDepth <= 16) { - format = HAL_PIXEL_FORMAT_RGB_565; + *format = HAL_PIXEL_FORMAT_RGB_565; } else { if (componentType == EGL_COLOR_COMPONENT_TYPE_FIXED_EXT) { if (colorDepth > 24) { - format = HAL_PIXEL_FORMAT_RGBA_1010102; + *format = HAL_PIXEL_FORMAT_RGBA_1010102; } else { - format = HAL_PIXEL_FORMAT_RGBX_8888; + *format = HAL_PIXEL_FORMAT_RGBX_8888; } } else { - format = HAL_PIXEL_FORMAT_RGBA_FP16; + *format = HAL_PIXEL_FORMAT_RGBA_FP16; } } } else { if (componentType == EGL_COLOR_COMPONENT_TYPE_FIXED_EXT) { if (colorDepth > 24) { - format = HAL_PIXEL_FORMAT_RGBA_1010102; + *format = HAL_PIXEL_FORMAT_RGBA_1010102; } else { - format = HAL_PIXEL_FORMAT_RGBA_8888; + *format = HAL_PIXEL_FORMAT_RGBA_8888; } } else { - format = HAL_PIXEL_FORMAT_RGBA_FP16; + *format = HAL_PIXEL_FORMAT_RGBA_FP16; } } } +EGLBoolean sendSurfaceMetadata(egl_surface_t* s) { + android_smpte2086_metadata smpteMetadata; + if (s->getSmpte2086Metadata(smpteMetadata)) { + int err = + native_window_set_buffers_smpte2086_metadata(s->getNativeWindow(), &smpteMetadata); + s->resetSmpte2086Metadata(); + if (err != 0) { + ALOGE("error setting native window smpte2086 metadata: %s (%d)", + strerror(-err), err); + return EGL_FALSE; + } + } + android_cta861_3_metadata cta8613Metadata; + if (s->getCta8613Metadata(cta8613Metadata)) { + int err = + native_window_set_buffers_cta861_3_metadata(s->getNativeWindow(), &cta8613Metadata); + s->resetCta8613Metadata(); + if (err != 0) { + ALOGE("error setting native window CTS 861.3 metadata: %s (%d)", + strerror(-err), err); + return EGL_FALSE; + } + } + return EGL_TRUE; +} + EGLSurface eglCreateWindowSurface( EGLDisplay dpy, EGLConfig config, NativeWindowType window, const EGLint *attrib_list) { + const EGLint *origAttribList = attrib_list; clearError(); egl_connection_t* cnx = NULL; egl_display_ptr dp = validate_display_connection(dpy, cnx); if (dp) { - EGLDisplay iDpy = dp->disp.dpy; - if (!window) { return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); } @@ -693,39 +720,36 @@ EGLSurface eglCreateWindowSurface( EGLDisplay dpy, EGLConfig config, return setError(EGL_BAD_ALLOC, EGL_NO_SURFACE); } - EGLint format; - getNativePixelFormat(iDpy, cnx, config, format); + EGLDisplay iDpy = dp->disp.dpy; + android_pixel_format format; + getNativePixelFormat(iDpy, cnx, config, &format); // now select correct colorspace and dataspace based on user's attribute list - EGLint colorSpace; - android_dataspace dataSpace; - if (!getColorSpaceAttribute(dp, window, attrib_list, colorSpace, dataSpace)) { + EGLint colorSpace = EGL_UNKNOWN; + std::vector<EGLint> strippedAttribList; + if (!processAttributes(dp, window, format, attrib_list, &colorSpace, + &strippedAttribList)) { ALOGE("error invalid colorspace: %d", colorSpace); return setError(EGL_BAD_ATTRIBUTE, EGL_NO_SURFACE); } + attrib_list = strippedAttribList.data(); - std::vector<EGLint> strippedAttribList; - if (stripColorSpaceAttribute(dp, attrib_list, format, strippedAttribList)) { - // Had to modify the attribute list due to use of color space. - // Use modified list from here on. - attrib_list = strippedAttribList.data(); - } - - if (format != 0) { + { int err = native_window_set_buffers_format(window, format); if (err != 0) { ALOGE("error setting native window pixel format: %s (%d)", - strerror(-err), err); + strerror(-err), err); native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL); return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); } } - if (dataSpace != 0) { + android_dataspace dataSpace = dataSpaceFromEGLColorSpace(colorSpace); + if (dataSpace != HAL_DATASPACE_UNKNOWN) { int err = native_window_set_buffers_data_space(window, dataSpace); if (err != 0) { ALOGE("error setting native window pixel dataSpace: %s (%d)", - strerror(-err), err); + strerror(-err), err); native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL); return setError(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); } @@ -740,7 +764,8 @@ EGLSurface eglCreateWindowSurface( EGLDisplay dpy, EGLConfig config, iDpy, config, window, attrib_list); if (surface != EGL_NO_SURFACE) { egl_surface_t* s = - new egl_surface_t(dp.get(), config, window, surface, colorSpace, cnx); + new egl_surface_t(dp.get(), config, window, surface, + getReportedColorSpace(colorSpace), cnx); return s; } @@ -759,19 +784,27 @@ EGLSurface eglCreatePixmapSurface( EGLDisplay dpy, EGLConfig config, egl_connection_t* cnx = NULL; egl_display_ptr dp = validate_display_connection(dpy, cnx); - EGLint colorSpace; - android_dataspace dataSpace; if (dp) { + EGLDisplay iDpy = dp->disp.dpy; + android_pixel_format format; + getNativePixelFormat(iDpy, cnx, config, &format); + // now select a corresponding sRGB format if needed - if (!getColorSpaceAttribute(dp, attrib_list, colorSpace, dataSpace)) { + EGLint colorSpace = EGL_UNKNOWN; + std::vector<EGLint> strippedAttribList; + if (!processAttributes(dp, nullptr, format, attrib_list, &colorSpace, + &strippedAttribList)) { ALOGE("error invalid colorspace: %d", colorSpace); return setError(EGL_BAD_ATTRIBUTE, EGL_NO_SURFACE); } + attrib_list = strippedAttribList.data(); EGLSurface surface = cnx->egl.eglCreatePixmapSurface( dp->disp.dpy, config, pixmap, attrib_list); if (surface != EGL_NO_SURFACE) { - egl_surface_t* s = new egl_surface_t(dp.get(), config, NULL, surface, colorSpace, cnx); + egl_surface_t* s = + new egl_surface_t(dp.get(), config, NULL, surface, + getReportedColorSpace(colorSpace), cnx); return s; } } @@ -787,31 +820,25 @@ EGLSurface eglCreatePbufferSurface( EGLDisplay dpy, EGLConfig config, egl_display_ptr dp = validate_display_connection(dpy, cnx); if (dp) { EGLDisplay iDpy = dp->disp.dpy; - EGLint format; - getNativePixelFormat(iDpy, cnx, config, format); + android_pixel_format format; + getNativePixelFormat(iDpy, cnx, config, &format); - // now select correct colorspace and dataspace based on user's attribute list - EGLint colorSpace; - android_dataspace dataSpace; - if (!getColorSpaceAttribute(dp, attrib_list, colorSpace, dataSpace)) { + // Select correct colorspace based on user's attribute list + EGLint colorSpace = EGL_UNKNOWN; + std::vector<EGLint> strippedAttribList; + if (!processAttributes(dp, nullptr, format, attrib_list, &colorSpace, + &strippedAttribList)) { ALOGE("error invalid colorspace: %d", colorSpace); return setError(EGL_BAD_ATTRIBUTE, EGL_NO_SURFACE); } - - // Pbuffers are not displayed so we don't need to store the - // colorspace. We do need to filter out color spaces the - // driver doesn't know how to process. - std::vector<EGLint> strippedAttribList; - if (stripColorSpaceAttribute(dp, attrib_list, format, strippedAttribList)) { - // Had to modify the attribute list due to use of color space. - // Use modified list from here on. - attrib_list = strippedAttribList.data(); - } + attrib_list = strippedAttribList.data(); EGLSurface surface = cnx->egl.eglCreatePbufferSurface( dp->disp.dpy, config, attrib_list); if (surface != EGL_NO_SURFACE) { - egl_surface_t* s = new egl_surface_t(dp.get(), config, NULL, surface, colorSpace, cnx); + egl_surface_t* s = + new egl_surface_t(dp.get(), config, NULL, surface, + getReportedColorSpace(colorSpace), cnx); return s; } } @@ -850,12 +877,14 @@ EGLBoolean eglQuerySurface( EGLDisplay dpy, EGLSurface surface, return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); egl_surface_t const * const s = get_surface(surface); - if (attribute == EGL_GL_COLORSPACE_KHR) { - *value = s->getColorSpace(); + if (s->getColorSpaceAttribute(attribute, value)) { + return EGL_TRUE; + } else if (s->getSmpte2086Attribute(attribute, value)) { + return EGL_TRUE; + } else if (s->getCta8613Attribute(attribute, value)) { return EGL_TRUE; } - return s->cnx->egl.eglQuerySurface( - dp->disp.dpy, s->surface, attribute, value); + return s->cnx->egl.eglQuerySurface(dp->disp.dpy, s->surface, attribute, value); } void EGLAPI eglBeginFrame(EGLDisplay dpy, EGLSurface surface) { @@ -1347,7 +1376,7 @@ EGLBoolean eglSwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface draw, if (!_s.get()) return setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); - egl_surface_t const * const s = get_surface(draw); + egl_surface_t* const s = get_surface(draw); if (CC_UNLIKELY(dp->traceGpuCompletion)) { EGLSyncKHR sync = eglCreateSyncKHR(dpy, EGL_SYNC_FENCE_KHR, NULL); @@ -1366,6 +1395,11 @@ EGLBoolean eglSwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface draw, } } + if (!sendSurfaceMetadata(s)) { + native_window_api_disconnect(s->getNativeWindow(), NATIVE_WINDOW_API_EGL); + return setError(EGL_BAD_NATIVE_WINDOW, (EGLBoolean)EGL_FALSE); + } + if (n_rects == 0) { return s->cnx->egl.eglSwapBuffers(dp->disp.dpy, s->surface); } @@ -1503,7 +1537,11 @@ EGLBoolean eglSurfaceAttrib( return (err == 0) ? EGL_TRUE : setError(EGL_BAD_SURFACE, (EGLBoolean)EGL_FALSE); } - if (s->cnx->egl.eglSurfaceAttrib) { + if (s->setSmpte2086Attribute(attribute, value)) { + return EGL_TRUE; + } else if (s->setCta8613Attribute(attribute, value)) { + return EGL_TRUE; + } else if (s->cnx->egl.eglSurfaceAttrib) { return s->cnx->egl.eglSurfaceAttrib( dp->disp.dpy, s->surface, attribute, value); } @@ -1707,13 +1745,31 @@ EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, ContextRef _c(dp.get(), ctx); egl_context_t * const c = _c.get(); + // Temporary hack: eglImageCreateKHR should accept EGL_GL_COLORSPACE_LINEAR_KHR, + // EGL_GL_COLORSPACE_SRGB_KHR and EGL_GL_COLORSPACE_DEFAULT_EXT if + // EGL_EXT_image_gl_colorspace is supported, but some drivers don't like + // the DEFAULT value and generate an error. + std::vector<EGLint> strippedAttribList; + for (const EGLint *attr = attrib_list; attr && attr[0] != EGL_NONE; attr += 2) { + if (attr[0] == EGL_GL_COLORSPACE_KHR && + dp->haveExtension("EGL_EXT_image_gl_colorspace")) { + if (attr[1] != EGL_GL_COLORSPACE_LINEAR_KHR && + attr[1] != EGL_GL_COLORSPACE_SRGB_KHR) { + continue; + } + } + strippedAttribList.push_back(attr[0]); + strippedAttribList.push_back(attr[1]); + } + strippedAttribList.push_back(EGL_NONE); + EGLImageKHR result = EGL_NO_IMAGE_KHR; egl_connection_t* const cnx = &gEGLImpl; if (cnx->dso && cnx->egl.eglCreateImageKHR) { result = cnx->egl.eglCreateImageKHR( dp->disp.dpy, c ? c->context : EGL_NO_CONTEXT, - target, buffer, attrib_list); + target, buffer, strippedAttribList.data()); } return result; } @@ -1925,22 +1981,13 @@ EGLSurface eglCreateStreamProducerSurfaceKHR(EGLDisplay dpy, EGLConfig config, egl_display_ptr dp = validate_display(dpy); if (!dp) return EGL_NO_SURFACE; - EGLint colorSpace = EGL_GL_COLORSPACE_LINEAR_KHR; - android_dataspace dataSpace = HAL_DATASPACE_UNKNOWN; - // TODO: Probably need to update EGL_KHR_stream_producer_eglsurface to - // indicate support for EGL_GL_COLORSPACE_KHR. - // now select a corresponding sRGB format if needed - if (!getColorSpaceAttribute(dp, attrib_list, colorSpace, dataSpace)) { - ALOGE("error invalid colorspace: %d", colorSpace); - return setError(EGL_BAD_ATTRIBUTE, EGL_NO_SURFACE); - } - egl_connection_t* const cnx = &gEGLImpl; if (cnx->dso && cnx->egl.eglCreateStreamProducerSurfaceKHR) { EGLSurface surface = cnx->egl.eglCreateStreamProducerSurfaceKHR( dp->disp.dpy, config, stream, attrib_list); if (surface != EGL_NO_SURFACE) { - egl_surface_t* s = new egl_surface_t(dp.get(), config, NULL, surface, colorSpace, cnx); + egl_surface_t* s = new egl_surface_t(dp.get(), config, NULL, surface, + EGL_GL_COLORSPACE_LINEAR_KHR, cnx); return s; } } diff --git a/opengl/libs/EGL/egl_cache.cpp b/opengl/libs/EGL/egl_cache.cpp index 579e422c1a..ec548f3121 100644 --- a/opengl/libs/EGL/egl_cache.cpp +++ b/opengl/libs/EGL/egl_cache.cpp @@ -20,12 +20,8 @@ #include "egl_display.h" - #include <private/EGL/cache.h> -#include <inttypes.h> -#include <sys/mman.h> -#include <sys/stat.h> #include <unistd.h> #include <thread> @@ -37,10 +33,6 @@ static const size_t maxKeySize = 12 * 1024; static const size_t maxValueSize = 64 * 1024; static const size_t maxTotalSize = 2 * 1024 * 1024; -// Cache file header -static const char* cacheFileMagic = "EGL$"; -static const size_t cacheFileHeaderSize = 8; - // The time in seconds to wait before saving newly inserted cache entries. static const unsigned int deferredSaveDelay = 4; @@ -124,7 +116,9 @@ void egl_cache_t::initialize(egl_display_t *display) { void egl_cache_t::terminate() { std::lock_guard<std::mutex> lock(mMutex); - saveBlobCacheLocked(); + if (mBlobCache) { + mBlobCache->writeToFile(); + } mBlobCache = NULL; } @@ -146,8 +140,8 @@ void egl_cache_t::setBlob(const void* key, EGLsizeiANDROID keySize, std::thread deferredSaveThread([this]() { sleep(deferredSaveDelay); std::lock_guard<std::mutex> lock(mMutex); - if (mInitialized) { - saveBlobCacheLocked(); + if (mInitialized && mBlobCache) { + mBlobCache->writeToFile(); } mSavePending = false; }); @@ -179,163 +173,11 @@ void egl_cache_t::setCacheFilename(const char* filename) { BlobCache* egl_cache_t::getBlobCacheLocked() { if (mBlobCache == nullptr) { - mBlobCache.reset(new BlobCache(maxKeySize, maxValueSize, maxTotalSize)); - loadBlobCacheLocked(); + mBlobCache.reset(new FileBlobCache(maxKeySize, maxValueSize, maxTotalSize, mFilename)); } return mBlobCache.get(); } -static uint32_t crc32c(const uint8_t* buf, size_t len) { - const uint32_t polyBits = 0x82F63B78; - uint32_t r = 0; - for (size_t i = 0; i < len; i++) { - r ^= buf[i]; - for (int j = 0; j < 8; j++) { - if (r & 1) { - r = (r >> 1) ^ polyBits; - } else { - r >>= 1; - } - } - } - return r; -} - -void egl_cache_t::saveBlobCacheLocked() { - if (mFilename.length() > 0 && mBlobCache != NULL) { - size_t cacheSize = mBlobCache->getFlattenedSize(); - size_t headerSize = cacheFileHeaderSize; - const char* fname = mFilename.c_str(); - - // Try to create the file with no permissions so we can write it - // without anyone trying to read it. - int fd = open(fname, O_CREAT | O_EXCL | O_RDWR, 0); - if (fd == -1) { - if (errno == EEXIST) { - // The file exists, delete it and try again. - if (unlink(fname) == -1) { - // No point in retrying if the unlink failed. - ALOGE("error unlinking cache file %s: %s (%d)", fname, - strerror(errno), errno); - return; - } - // Retry now that we've unlinked the file. - fd = open(fname, O_CREAT | O_EXCL | O_RDWR, 0); - } - if (fd == -1) { - ALOGE("error creating cache file %s: %s (%d)", fname, - strerror(errno), errno); - return; - } - } - - size_t fileSize = headerSize + cacheSize; - - uint8_t* buf = new uint8_t [fileSize]; - if (!buf) { - ALOGE("error allocating buffer for cache contents: %s (%d)", - strerror(errno), errno); - close(fd); - unlink(fname); - return; - } - - int err = mBlobCache->flatten(buf + headerSize, cacheSize); - if (err < 0) { - ALOGE("error writing cache contents: %s (%d)", strerror(-err), - -err); - delete [] buf; - close(fd); - unlink(fname); - return; - } - - // Write the file magic and CRC - memcpy(buf, cacheFileMagic, 4); - uint32_t* crc = reinterpret_cast<uint32_t*>(buf + 4); - *crc = crc32c(buf + headerSize, cacheSize); - - if (write(fd, buf, fileSize) == -1) { - ALOGE("error writing cache file: %s (%d)", strerror(errno), - errno); - delete [] buf; - close(fd); - unlink(fname); - return; - } - - delete [] buf; - fchmod(fd, S_IRUSR); - close(fd); - } -} - -void egl_cache_t::loadBlobCacheLocked() { - if (mFilename.length() > 0) { - size_t headerSize = cacheFileHeaderSize; - - int fd = open(mFilename.c_str(), O_RDONLY, 0); - if (fd == -1) { - if (errno != ENOENT) { - ALOGE("error opening cache file %s: %s (%d)", mFilename.c_str(), - strerror(errno), errno); - } - return; - } - - struct stat statBuf; - if (fstat(fd, &statBuf) == -1) { - ALOGE("error stat'ing cache file: %s (%d)", strerror(errno), errno); - close(fd); - return; - } - - // Sanity check the size before trying to mmap it. - size_t fileSize = statBuf.st_size; - if (fileSize > maxTotalSize * 2) { - ALOGE("cache file is too large: %#" PRIx64, - static_cast<off64_t>(statBuf.st_size)); - close(fd); - return; - } - - uint8_t* buf = reinterpret_cast<uint8_t*>(mmap(NULL, fileSize, - PROT_READ, MAP_PRIVATE, fd, 0)); - if (buf == MAP_FAILED) { - ALOGE("error mmaping cache file: %s (%d)", strerror(errno), - errno); - close(fd); - return; - } - - // Check the file magic and CRC - size_t cacheSize = fileSize - headerSize; - if (memcmp(buf, cacheFileMagic, 4) != 0) { - ALOGE("cache file has bad mojo"); - close(fd); - return; - } - uint32_t* crc = reinterpret_cast<uint32_t*>(buf + 4); - if (crc32c(buf + headerSize, cacheSize) != *crc) { - ALOGE("cache file failed CRC check"); - close(fd); - return; - } - - int err = mBlobCache->unflatten(buf + headerSize, cacheSize); - if (err < 0) { - ALOGE("error reading cache contents: %s (%d)", strerror(-err), - -err); - munmap(buf, fileSize); - close(fd); - return; - } - - munmap(buf, fileSize); - close(fd); - } -} - // ---------------------------------------------------------------------------- }; // namespace android // ---------------------------------------------------------------------------- diff --git a/opengl/libs/EGL/egl_cache.h b/opengl/libs/EGL/egl_cache.h index 56360f0bc8..7382b913fa 100644 --- a/opengl/libs/EGL/egl_cache.h +++ b/opengl/libs/EGL/egl_cache.h @@ -20,7 +20,7 @@ #include <EGL/egl.h> #include <EGL/eglext.h> -#include "BlobCache.h" +#include "FileBlobCache.h" #include <memory> #include <mutex> @@ -82,14 +82,6 @@ private: // possible. BlobCache* getBlobCacheLocked(); - // saveBlobCache attempts to save the current contents of mBlobCache to - // disk. - void saveBlobCacheLocked(); - - // loadBlobCache attempts to load the saved cache contents from disk into - // mBlobCache. - void loadBlobCacheLocked(); - // mInitialized indicates whether the egl_cache_t is in the initialized // state. It is initialized to false at construction time, and gets set to // true when initialize is called. It is set back to false when terminate @@ -101,7 +93,7 @@ private: // mBlobCache is the cache in which the key/value blob pairs are stored. It // is initially NULL, and will be initialized by getBlobCacheLocked the // first time it's needed. - std::unique_ptr<BlobCache> mBlobCache; + std::unique_ptr<FileBlobCache> mBlobCache; // mFilename is the name of the file for storing cache contents in between // program invocations. It is initialized to an empty string at diff --git a/opengl/libs/EGL/egl_display.cpp b/opengl/libs/EGL/egl_display.cpp index 3c1edd148a..2aec249aa5 100644 --- a/opengl/libs/EGL/egl_display.cpp +++ b/opengl/libs/EGL/egl_display.cpp @@ -51,8 +51,11 @@ extern void setGLHooksThreadSpecific(gl_hooks_t const *value); // ---------------------------------------------------------------------------- -static bool findExtension(const char* exts, const char* name, size_t nameLen) { +bool findExtension(const char* exts, const char* name, size_t nameLen) { if (exts) { + if (!nameLen) { + nameLen = strlen(name); + } for (const char* match = strstr(exts, name); match; match = strstr(match + nameLen, name)) { if (match[nameLen] == '\0' || match[nameLen] == ' ') { return true; @@ -203,17 +206,33 @@ EGLBoolean egl_display_t::initialize(EGLint *major, EGLint *minor) { mExtensionString = gBuiltinExtensionString; + hasColorSpaceSupport = findExtension(disp.queryString.extensions, "EGL_KHR_gl_colorspace"); + + // Note: CDD requires that devices supporting wide color and/or HDR color also support + // the EGL_KHR_gl_colorspace extension. bool wideColorBoardConfig = getBool<ISurfaceFlingerConfigs, &ISurfaceFlingerConfigs::hasWideColorDisplay>( false); // Add wide-color extensions if device can support wide-color - if (wideColorBoardConfig) { + if (wideColorBoardConfig && hasColorSpaceSupport) { mExtensionString.append( "EGL_EXT_gl_colorspace_scrgb EGL_EXT_gl_colorspace_scrgb_linear " "EGL_EXT_gl_colorspace_display_p3_linear EGL_EXT_gl_colorspace_display_p3 "); } + bool hasHdrBoardConfig = + getBool<ISurfaceFlingerConfigs, &ISurfaceFlingerConfigs::hasHDRDisplay>(false); + + if (hasHdrBoardConfig && hasColorSpaceSupport) { + // hasHDRBoardConfig indicates the system is capable of supporting HDR content. + // Typically that means there is an HDR capable display attached, but could be + // support for attaching an HDR display. In either case, advertise support for + // HDR color spaces. + mExtensionString.append( + "EGL_EXT_gl_colorspace_bt2020_linear EGL_EXT_gl_colorspace_bt2020_pq "); + } + char const* start = gExtensionString; do { // length of the extension name @@ -221,6 +240,12 @@ EGLBoolean egl_display_t::initialize(EGLint *major, EGLint *minor) { if (len) { // NOTE: we could avoid the copy if we had strnstr. const std::string ext(start, len); + // Temporary hack: Adreno 530 driver exposes this extension under the draft + // KHR name, but during Khronos review it was decided to demote it to EXT. + if (ext == "EGL_EXT_image_gl_colorspace" && + findExtension(disp.queryString.extensions, "EGL_KHR_image_gl_colorspace")) { + mExtensionString.append("EGL_EXT_image_gl_colorspace "); + } if (findExtension(disp.queryString.extensions, ext.c_str(), len)) { mExtensionString.append(ext + " "); } diff --git a/opengl/libs/EGL/egl_display.h b/opengl/libs/EGL/egl_display.h index 661f47e2f3..79a9f082a6 100644 --- a/opengl/libs/EGL/egl_display.h +++ b/opengl/libs/EGL/egl_display.h @@ -42,6 +42,8 @@ class egl_object_t; class egl_context_t; struct egl_connection_t; +bool findExtension(const char* exts, const char* name, size_t nameLen = 0); + // ---------------------------------------------------------------------------- class EGLAPI egl_display_t { // marked as EGLAPI for testing purposes @@ -111,6 +113,7 @@ public: DisplayImpl disp; bool finishOnSwap; // property: debug.egl.finish bool traceGpuCompletion; // property: debug.egl.traceGpuCompletion + bool hasColorSpaceSupport; private: friend class egl_display_ptr; diff --git a/opengl/libs/EGL/egl_object.cpp b/opengl/libs/EGL/egl_object.cpp index 72b4823ea0..f879254f76 100644 --- a/opengl/libs/EGL/egl_object.cpp +++ b/opengl/libs/EGL/egl_object.cpp @@ -63,7 +63,18 @@ egl_surface_t::egl_surface_t(egl_display_t* dpy, EGLConfig config, EGLNativeWind win(win), cnx(cnx), connected(true), - colorSpace(colorSpace) { + colorSpace(colorSpace), + egl_smpte2086_dirty(false), + egl_cta861_3_dirty(false) { + egl_smpte2086_metadata.displayPrimaryRed = { EGL_DONT_CARE, EGL_DONT_CARE }; + egl_smpte2086_metadata.displayPrimaryGreen = { EGL_DONT_CARE, EGL_DONT_CARE }; + egl_smpte2086_metadata.displayPrimaryBlue = { EGL_DONT_CARE, EGL_DONT_CARE }; + egl_smpte2086_metadata.whitePoint = { EGL_DONT_CARE, EGL_DONT_CARE }; + egl_smpte2086_metadata.maxLuminance = EGL_DONT_CARE; + egl_smpte2086_metadata.minLuminance = EGL_DONT_CARE; + egl_cta861_3_metadata.maxFrameAverageLightLevel = EGL_DONT_CARE; + egl_cta861_3_metadata.maxContentLightLevel = EGL_DONT_CARE; + if (win) { win->incStrong(this); } @@ -86,6 +97,180 @@ void egl_surface_t::disconnect() { } } +EGLBoolean egl_surface_t::setSmpte2086Attribute(EGLint attribute, EGLint value) { + switch (attribute) { + case EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT: + egl_smpte2086_metadata.displayPrimaryRed.x = value; + egl_smpte2086_dirty = true; + return EGL_TRUE; + case EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT: + egl_smpte2086_metadata.displayPrimaryRed.y = value; + egl_smpte2086_dirty = true; + return EGL_TRUE; + case EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT: + egl_smpte2086_metadata.displayPrimaryGreen.x = value; + egl_smpte2086_dirty = true; + return EGL_TRUE; + case EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT: + egl_smpte2086_metadata.displayPrimaryGreen.y = value; + egl_smpte2086_dirty = true; + return EGL_TRUE; + case EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT: + egl_smpte2086_metadata.displayPrimaryBlue.x = value; + egl_smpte2086_dirty = true; + return EGL_TRUE; + case EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT: + egl_smpte2086_metadata.displayPrimaryBlue.y = value; + egl_smpte2086_dirty = true; + return EGL_TRUE; + case EGL_SMPTE2086_WHITE_POINT_X_EXT: + egl_smpte2086_metadata.whitePoint.x = value; + egl_smpte2086_dirty = true; + return EGL_TRUE; + case EGL_SMPTE2086_WHITE_POINT_Y_EXT: + egl_smpte2086_metadata.whitePoint.y = value; + egl_smpte2086_dirty = true; + return EGL_TRUE; + case EGL_SMPTE2086_MAX_LUMINANCE_EXT: + egl_smpte2086_metadata.maxLuminance = value; + egl_smpte2086_dirty = true; + return EGL_TRUE; + case EGL_SMPTE2086_MIN_LUMINANCE_EXT: + egl_smpte2086_metadata.minLuminance = value; + egl_smpte2086_dirty = true; + return EGL_TRUE; + } + return EGL_FALSE; +} + +EGLBoolean egl_surface_t::setCta8613Attribute(EGLint attribute, EGLint value) { + switch (attribute) { + case EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT: + egl_cta861_3_metadata.maxContentLightLevel = value; + egl_cta861_3_dirty = true; + return EGL_TRUE; + case EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT: + egl_cta861_3_metadata.maxFrameAverageLightLevel = value; + egl_cta861_3_dirty = true; + return EGL_TRUE; + } + return EGL_FALSE; +} + +EGLBoolean egl_surface_t::getSmpte2086Metadata(android_smpte2086_metadata& metadata) const { + if (!egl_smpte2086_dirty) return EGL_FALSE; + if (egl_smpte2086_metadata.displayPrimaryRed.x == EGL_DONT_CARE || + egl_smpte2086_metadata.displayPrimaryRed.y == EGL_DONT_CARE || + egl_smpte2086_metadata.displayPrimaryGreen.x == EGL_DONT_CARE || + egl_smpte2086_metadata.displayPrimaryGreen.y == EGL_DONT_CARE || + egl_smpte2086_metadata.displayPrimaryBlue.x == EGL_DONT_CARE || + egl_smpte2086_metadata.displayPrimaryBlue.y == EGL_DONT_CARE || + egl_smpte2086_metadata.whitePoint.x == EGL_DONT_CARE || + egl_smpte2086_metadata.whitePoint.y == EGL_DONT_CARE || + egl_smpte2086_metadata.maxLuminance == EGL_DONT_CARE || + egl_smpte2086_metadata.minLuminance == EGL_DONT_CARE) { + ALOGW("egl_surface_t: incomplete SMPTE 2086 metadata!"); + return EGL_FALSE; + } + + metadata.displayPrimaryRed.x = static_cast<float>(egl_smpte2086_metadata.displayPrimaryRed.x) / EGL_METADATA_SCALING_EXT; + metadata.displayPrimaryRed.y = static_cast<float>(egl_smpte2086_metadata.displayPrimaryRed.y) / EGL_METADATA_SCALING_EXT; + metadata.displayPrimaryGreen.x = static_cast<float>(egl_smpte2086_metadata.displayPrimaryGreen.x) / EGL_METADATA_SCALING_EXT; + metadata.displayPrimaryGreen.y = static_cast<float>(egl_smpte2086_metadata.displayPrimaryGreen.y) / EGL_METADATA_SCALING_EXT; + metadata.displayPrimaryBlue.x = static_cast<float>(egl_smpte2086_metadata.displayPrimaryBlue.x) / EGL_METADATA_SCALING_EXT; + metadata.displayPrimaryBlue.y = static_cast<float>(egl_smpte2086_metadata.displayPrimaryBlue.y) / EGL_METADATA_SCALING_EXT; + metadata.whitePoint.x = static_cast<float>(egl_smpte2086_metadata.whitePoint.x) / EGL_METADATA_SCALING_EXT; + metadata.whitePoint.y = static_cast<float>(egl_smpte2086_metadata.whitePoint.y) / EGL_METADATA_SCALING_EXT; + metadata.maxLuminance = static_cast<float>(egl_smpte2086_metadata.maxLuminance) / EGL_METADATA_SCALING_EXT; + metadata.minLuminance = static_cast<float>(egl_smpte2086_metadata.minLuminance) / EGL_METADATA_SCALING_EXT; + + return EGL_TRUE; +} + +EGLBoolean egl_surface_t::getCta8613Metadata(android_cta861_3_metadata& metadata) const { + if (!egl_cta861_3_dirty) return EGL_FALSE; + + if (egl_cta861_3_metadata.maxContentLightLevel == EGL_DONT_CARE || + egl_cta861_3_metadata.maxFrameAverageLightLevel == EGL_DONT_CARE) { + ALOGW("egl_surface_t: incomplete CTA861.3 metadata!"); + return EGL_FALSE; + } + + metadata.maxContentLightLevel = static_cast<float>(egl_cta861_3_metadata.maxContentLightLevel) / EGL_METADATA_SCALING_EXT; + metadata.maxFrameAverageLightLevel = static_cast<float>(egl_cta861_3_metadata.maxFrameAverageLightLevel) / EGL_METADATA_SCALING_EXT; + + return EGL_TRUE; +} + + +EGLBoolean egl_surface_t::getColorSpaceAttribute(EGLint attribute, EGLint* value) const { + if (attribute == EGL_GL_COLORSPACE_KHR) { + *value = colorSpace; + return EGL_TRUE; + } + return EGL_FALSE; +} + +EGLBoolean egl_surface_t::getSmpte2086Attribute(EGLint attribute, EGLint *value) const { + switch (attribute) { + case EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT: + *value = egl_smpte2086_metadata.displayPrimaryRed.x; + return EGL_TRUE; + break; + case EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT: + *value = egl_smpte2086_metadata.displayPrimaryRed.y; + return EGL_TRUE; + break; + case EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT: + *value = egl_smpte2086_metadata.displayPrimaryGreen.x; + return EGL_TRUE; + break; + case EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT: + *value = egl_smpte2086_metadata.displayPrimaryGreen.y; + return EGL_TRUE; + break; + case EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT: + *value = egl_smpte2086_metadata.displayPrimaryBlue.x; + return EGL_TRUE; + break; + case EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT: + *value = egl_smpte2086_metadata.displayPrimaryBlue.y; + return EGL_TRUE; + break; + case EGL_SMPTE2086_WHITE_POINT_X_EXT: + *value = egl_smpte2086_metadata.whitePoint.x; + return EGL_TRUE; + break; + case EGL_SMPTE2086_WHITE_POINT_Y_EXT: + *value = egl_smpte2086_metadata.whitePoint.y; + return EGL_TRUE; + break; + case EGL_SMPTE2086_MAX_LUMINANCE_EXT: + *value = egl_smpte2086_metadata.maxLuminance; + return EGL_TRUE; + break; + case EGL_SMPTE2086_MIN_LUMINANCE_EXT: + *value = egl_smpte2086_metadata.minLuminance; + return EGL_TRUE; + break; + } + return EGL_FALSE; +} + +EGLBoolean egl_surface_t::getCta8613Attribute(EGLint attribute, EGLint *value) const { + switch (attribute) { + case EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT: + *value = egl_cta861_3_metadata.maxContentLightLevel; + return EGL_TRUE; + break; + case EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT: + *value = egl_cta861_3_metadata.maxFrameAverageLightLevel; + return EGL_TRUE; + break; + } + return EGL_FALSE; +} + void egl_surface_t::terminate() { disconnect(); egl_object_t::terminate(); diff --git a/opengl/libs/EGL/egl_object.h b/opengl/libs/EGL/egl_object.h index 7c3075c9fc..4e1de5cec4 100644 --- a/opengl/libs/EGL/egl_object.h +++ b/opengl/libs/EGL/egl_object.h @@ -137,6 +137,15 @@ public: ANativeWindow* getNativeWindow() { return win; } ANativeWindow* getNativeWindow() const { return win; } EGLint getColorSpace() const { return colorSpace; } + EGLBoolean setSmpte2086Attribute(EGLint attribute, EGLint value); + EGLBoolean setCta8613Attribute(EGLint attribute, EGLint value); + EGLBoolean getColorSpaceAttribute(EGLint attribute, EGLint* value) const; + EGLBoolean getSmpte2086Attribute(EGLint attribute, EGLint* value) const; + EGLBoolean getCta8613Attribute(EGLint attribute, EGLint* value) const; + EGLBoolean getSmpte2086Metadata(android_smpte2086_metadata& smpte2086) const; + EGLBoolean getCta8613Metadata(android_cta861_3_metadata& cta861_3) const; + void resetSmpte2086Metadata() { egl_smpte2086_dirty = false; } + void resetCta8613Metadata() { egl_cta861_3_dirty = false; } // Try to keep the order of these fields and size unchanged. It's not public API, but // it's not hard to imagine native games accessing them. @@ -150,6 +159,31 @@ private: bool connected; void disconnect(); EGLint colorSpace; + + struct egl_xy_color { + EGLint x; + EGLint y; + }; + + struct egl_smpte2086_metadata { + struct egl_xy_color displayPrimaryRed; + struct egl_xy_color displayPrimaryGreen; + struct egl_xy_color displayPrimaryBlue; + struct egl_xy_color whitePoint; + EGLint maxLuminance; + EGLint minLuminance; + }; + + struct egl_cta861_3_metadata { + EGLint maxContentLightLevel; + EGLint maxFrameAverageLightLevel; + }; + + bool egl_smpte2086_dirty; + bool egl_cta861_3_dirty; + + egl_smpte2086_metadata egl_smpte2086_metadata; + egl_cta861_3_metadata egl_cta861_3_metadata; }; class egl_context_t: public egl_object_t { diff --git a/opengl/libs/EGL/getProcAddress.cpp b/opengl/libs/EGL/getProcAddress.cpp index c05e840f32..fedc7893db 100644 --- a/opengl/libs/EGL/getProcAddress.cpp +++ b/opengl/libs/EGL/getProcAddress.cpp @@ -54,7 +54,7 @@ namespace android { : [tls] "J"(TLS_SLOT_OPENGL_API*4), \ [ext] "J"(__builtin_offsetof(gl_hooks_t, \ ext.extensions[0])), \ - [api] "J"(_api*sizeof(void*)) \ + [api] "I"(_api*sizeof(void*)) \ : "r12" \ ); @@ -80,46 +80,44 @@ namespace android { #elif defined(__i386__) - #define API_ENTRY(_api) __attribute__((noinline,optimize("omit-frame-pointer"))) _api + #define API_ENTRY(_api) __attribute__((naked)) _api #define CALL_GL_EXTENSION_API(_api) \ - register void** fn; \ __asm__ volatile( \ - "mov %%gs:0, %[fn]\n" \ - "mov %P[tls](%[fn]), %[fn]\n" \ - "test %[fn], %[fn]\n" \ - "cmovne %P[api](%[fn]), %[fn]\n" \ - "test %[fn], %[fn]\n" \ + "mov %%gs:0, %%eax\n" \ + "mov %P[tls](%%eax), %%eax\n" \ + "test %%eax, %%eax\n" \ + "cmovne %P[api](%%eax), %%eax\n" \ + "test %%eax, %%eax\n" \ "je 1f\n" \ - "jmp *%[fn]\n" \ - "1:\n" \ - : [fn] "=r" (fn) \ + "jmp *%%eax\n" \ + "1: ret\n" \ + : \ : [tls] "i" (TLS_SLOT_OPENGL_API*sizeof(void*)), \ [api] "i" (__builtin_offsetof(gl_hooks_t, \ ext.extensions[_api])) \ - : "cc" \ + : "eax", "cc" \ ); #elif defined(__x86_64__) - #define API_ENTRY(_api) __attribute__((noinline,optimize("omit-frame-pointer"))) _api + #define API_ENTRY(_api) __attribute__((naked)) _api #define CALL_GL_EXTENSION_API(_api) \ - register void** fn; \ __asm__ volatile( \ - "mov %%fs:0, %[fn]\n" \ - "mov %P[tls](%[fn]), %[fn]\n" \ - "test %[fn], %[fn]\n" \ - "cmovne %P[api](%[fn]), %[fn]\n" \ - "test %[fn], %[fn]\n" \ + "mov %%fs:0, %%rax\n" \ + "mov %P[tls](%%rax), %%rax\n" \ + "test %%rax, %%rax\n" \ + "cmovne %P[api](%%rax), %%rax\n" \ + "test %%rax, %%rax\n" \ "je 1f\n" \ - "jmp *%[fn]\n" \ - "1:\n" \ - : [fn] "=r" (fn) \ + "jmp *%%rax\n" \ + "1: ret\n" \ + : \ : [tls] "i" (TLS_SLOT_OPENGL_API*sizeof(void*)), \ [api] "i" (__builtin_offsetof(gl_hooks_t, \ ext.extensions[_api])) \ - : "cc" \ + : "rax", "cc" \ ); #elif defined(__mips64) diff --git a/opengl/libs/GLES2/gl2ext_api.in b/opengl/libs/GLES2/gl2ext_api.in index fc368f2fc2..4a0d4b9e08 100644 --- a/opengl/libs/GLES2/gl2ext_api.in +++ b/opengl/libs/GLES2/gl2ext_api.in @@ -34,6 +34,9 @@ void API_ENTRY(glGetObjectPtrLabelKHR)(const void *ptr, GLsizei bufSize, GLsizei void API_ENTRY(glGetPointervKHR)(GLenum pname, void **params) { CALL_GL_API(glGetPointervKHR, pname, params); } +void API_ENTRY(glMaxShaderCompilerThreadsKHR)(GLuint count) { + CALL_GL_API(glMaxShaderCompilerThreadsKHR, count); +} GLenum API_ENTRY(glGetGraphicsResetStatusKHR)(void) { CALL_GL_API_RETURN(glGetGraphicsResetStatusKHR); } @@ -91,8 +94,8 @@ void API_ENTRY(glDrawRangeElementsBaseVertexOES)(GLenum mode, GLuint start, GLui void API_ENTRY(glDrawElementsInstancedBaseVertexOES)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex) { CALL_GL_API(glDrawElementsInstancedBaseVertexOES, mode, count, type, indices, instancecount, basevertex); } -void API_ENTRY(glMultiDrawElementsBaseVertexOES)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex) { - CALL_GL_API(glMultiDrawElementsBaseVertexOES, mode, count, type, indices, primcount, basevertex); +void API_ENTRY(glMultiDrawElementsBaseVertexEXT)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex) { + CALL_GL_API(glMultiDrawElementsBaseVertexEXT, mode, count, type, indices, primcount, basevertex); } void API_ENTRY(glFramebufferTextureOES)(GLenum target, GLenum attachment, GLuint texture, GLint level) { CALL_GL_API(glFramebufferTextureOES, target, attachment, texture, level); @@ -187,6 +190,33 @@ void API_ENTRY(glGenVertexArraysOES)(GLsizei n, GLuint *arrays) { GLboolean API_ENTRY(glIsVertexArrayOES)(GLuint array) { CALL_GL_API_RETURN(glIsVertexArrayOES, array); } +void API_ENTRY(glViewportArrayvOES)(GLuint first, GLsizei count, const GLfloat *v) { + CALL_GL_API(glViewportArrayvOES, first, count, v); +} +void API_ENTRY(glViewportIndexedfOES)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) { + CALL_GL_API(glViewportIndexedfOES, index, x, y, w, h); +} +void API_ENTRY(glViewportIndexedfvOES)(GLuint index, const GLfloat *v) { + CALL_GL_API(glViewportIndexedfvOES, index, v); +} +void API_ENTRY(glScissorArrayvOES)(GLuint first, GLsizei count, const GLint *v) { + CALL_GL_API(glScissorArrayvOES, first, count, v); +} +void API_ENTRY(glScissorIndexedOES)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) { + CALL_GL_API(glScissorIndexedOES, index, left, bottom, width, height); +} +void API_ENTRY(glScissorIndexedvOES)(GLuint index, const GLint *v) { + CALL_GL_API(glScissorIndexedvOES, index, v); +} +void API_ENTRY(glDepthRangeArrayfvOES)(GLuint first, GLsizei count, const GLfloat *v) { + CALL_GL_API(glDepthRangeArrayfvOES, first, count, v); +} +void API_ENTRY(glDepthRangeIndexedfOES)(GLuint index, GLfloat n, GLfloat f) { + CALL_GL_API(glDepthRangeIndexedfOES, index, n, f); +} +void API_ENTRY(glGetFloati_vOES)(GLenum target, GLuint index, GLfloat *data) { + CALL_GL_API(glGetFloati_vOES, target, index, data); +} void API_ENTRY(glGetPerfMonitorGroupsAMD)(GLint *numGroups, GLsizei groupsSize, GLuint *groups) { CALL_GL_API(glGetPerfMonitorGroupsAMD, numGroups, groupsSize, groups); } @@ -268,6 +298,12 @@ void API_ENTRY(glGetInteger64vAPPLE)(GLenum pname, GLint64 *params) { void API_ENTRY(glGetSyncivAPPLE)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) { CALL_GL_API(glGetSyncivAPPLE, sync, pname, bufSize, length, values); } +void API_ENTRY(glEGLImageTargetTexStorageEXT)(GLenum target, GLeglImageOES image, const GLint* attrib_list) { + CALL_GL_API(glEGLImageTargetTexStorageEXT, target, image, attrib_list); +} +void API_ENTRY(glEGLImageTargetTextureStorageEXT)(GLuint texture, GLeglImageOES image, const GLint* attrib_list) { + CALL_GL_API(glEGLImageTargetTextureStorageEXT, texture, image, attrib_list); +} void API_ENTRY(glDrawArraysInstancedBaseInstanceEXT)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance) { CALL_GL_API(glDrawArraysInstancedBaseInstanceEXT, mode, first, count, instancecount, baseinstance); } @@ -292,6 +328,15 @@ GLint API_ENTRY(glGetFragDataIndexEXT)(GLuint program, const GLchar *name) { void API_ENTRY(glBufferStorageEXT)(GLenum target, GLsizeiptr size, const void *data, GLbitfield flags) { CALL_GL_API(glBufferStorageEXT, target, size, data, flags); } +void API_ENTRY(glClearTexImageEXT)(GLuint texture, GLint level, GLenum format, GLenum type, const void *data) { + CALL_GL_API(glClearTexImageEXT, texture, level, format, type, data); +} +void API_ENTRY(glClearTexSubImageEXT)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data) { + CALL_GL_API(glClearTexSubImageEXT, texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data); +} +void API_ENTRY(glClipControlEXT)(GLenum origin, GLenum depth) { + CALL_GL_API(glClipControlEXT, origin, depth); +} void API_ENTRY(glCopyImageSubDataEXT)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) { CALL_GL_API(glCopyImageSubDataEXT, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); } @@ -382,8 +427,8 @@ void API_ENTRY(glDrawRangeElementsBaseVertexEXT)(GLenum mode, GLuint start, GLui void API_ENTRY(glDrawElementsInstancedBaseVertexEXT)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex) { CALL_GL_API(glDrawElementsInstancedBaseVertexEXT, mode, count, type, indices, instancecount, basevertex); } -void API_ENTRY(glMultiDrawElementsBaseVertexEXT)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex) { - CALL_GL_API(glMultiDrawElementsBaseVertexEXT, mode, count, type, indices, primcount, basevertex); +void API_ENTRY(glMultiDrawElementsBaseVertexOES)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, const GLint *basevertex) { + CALL_GL_API(glMultiDrawElementsBaseVertexOES, mode, count, type, indices, primcount, basevertex); } void API_ENTRY(glDrawArraysInstancedEXT)(GLenum mode, GLint start, GLsizei count, GLsizei primcount) { CALL_GL_API(glDrawArraysInstancedEXT, mode, start, count, primcount); @@ -391,6 +436,18 @@ void API_ENTRY(glDrawArraysInstancedEXT)(GLenum mode, GLint start, GLsizei count void API_ENTRY(glDrawElementsInstancedEXT)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount) { CALL_GL_API(glDrawElementsInstancedEXT, mode, count, type, indices, primcount); } +void API_ENTRY(glDrawTransformFeedbackEXT)(GLenum mode, GLuint id) { + CALL_GL_API(glDrawTransformFeedbackEXT, mode, id); +} +void API_ENTRY(glDrawTransformFeedbackInstancedEXT)(GLenum mode, GLuint id, GLsizei instancecount) { + CALL_GL_API(glDrawTransformFeedbackInstancedEXT, mode, id, instancecount); +} +void API_ENTRY(glBufferStorageExternalEXT)(GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags) { + CALL_GL_API(glBufferStorageExternalEXT, target, offset, size, clientBuffer, flags); +} +void API_ENTRY(glNamedBufferStorageExternalEXT)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags) { + CALL_GL_API(glNamedBufferStorageExternalEXT, buffer, offset, size, clientBuffer, flags); +} void API_ENTRY(glFramebufferTextureEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level) { CALL_GL_API(glFramebufferTextureEXT, target, attachment, texture, level); } @@ -403,6 +460,60 @@ void * API_ENTRY(glMapBufferRangeEXT)(GLenum target, GLintptr offset, GLsizeiptr void API_ENTRY(glFlushMappedBufferRangeEXT)(GLenum target, GLintptr offset, GLsizeiptr length) { CALL_GL_API(glFlushMappedBufferRangeEXT, target, offset, length); } +void API_ENTRY(glGetUnsignedBytevEXT)(GLenum pname, GLubyte *data) { + CALL_GL_API(glGetUnsignedBytevEXT, pname, data); +} +void API_ENTRY(glGetUnsignedBytei_vEXT)(GLenum target, GLuint index, GLubyte *data) { + CALL_GL_API(glGetUnsignedBytei_vEXT, target, index, data); +} +void API_ENTRY(glDeleteMemoryObjectsEXT)(GLsizei n, const GLuint *memoryObjects) { + CALL_GL_API(glDeleteMemoryObjectsEXT, n, memoryObjects); +} +GLboolean API_ENTRY(glIsMemoryObjectEXT)(GLuint memoryObject) { + CALL_GL_API_RETURN(glIsMemoryObjectEXT, memoryObject); +} +void API_ENTRY(glCreateMemoryObjectsEXT)(GLsizei n, GLuint *memoryObjects) { + CALL_GL_API(glCreateMemoryObjectsEXT, n, memoryObjects); +} +void API_ENTRY(glMemoryObjectParameterivEXT)(GLuint memoryObject, GLenum pname, const GLint *params) { + CALL_GL_API(glMemoryObjectParameterivEXT, memoryObject, pname, params); +} +void API_ENTRY(glGetMemoryObjectParameterivEXT)(GLuint memoryObject, GLenum pname, GLint *params) { + CALL_GL_API(glGetMemoryObjectParameterivEXT, memoryObject, pname, params); +} +void API_ENTRY(glTexStorageMem2DEXT)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset) { + CALL_GL_API(glTexStorageMem2DEXT, target, levels, internalFormat, width, height, memory, offset); +} +void API_ENTRY(glTexStorageMem2DMultisampleEXT)(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) { + CALL_GL_API(glTexStorageMem2DMultisampleEXT, target, samples, internalFormat, width, height, fixedSampleLocations, memory, offset); +} +void API_ENTRY(glTexStorageMem3DEXT)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset) { + CALL_GL_API(glTexStorageMem3DEXT, target, levels, internalFormat, width, height, depth, memory, offset); +} +void API_ENTRY(glTexStorageMem3DMultisampleEXT)(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) { + CALL_GL_API(glTexStorageMem3DMultisampleEXT, target, samples, internalFormat, width, height, depth, fixedSampleLocations, memory, offset); +} +void API_ENTRY(glBufferStorageMemEXT)(GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset) { + CALL_GL_API(glBufferStorageMemEXT, target, size, memory, offset); +} +void API_ENTRY(glTextureStorageMem2DEXT)(GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset) { + CALL_GL_API(glTextureStorageMem2DEXT, texture, levels, internalFormat, width, height, memory, offset); +} +void API_ENTRY(glTextureStorageMem2DMultisampleEXT)(GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) { + CALL_GL_API(glTextureStorageMem2DMultisampleEXT, texture, samples, internalFormat, width, height, fixedSampleLocations, memory, offset); +} +void API_ENTRY(glTextureStorageMem3DEXT)(GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset) { + CALL_GL_API(glTextureStorageMem3DEXT, texture, levels, internalFormat, width, height, depth, memory, offset); +} +void API_ENTRY(glTextureStorageMem3DMultisampleEXT)(GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) { + CALL_GL_API(glTextureStorageMem3DMultisampleEXT, texture, samples, internalFormat, width, height, depth, fixedSampleLocations, memory, offset); +} +void API_ENTRY(glNamedBufferStorageMemEXT)(GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset) { + CALL_GL_API(glNamedBufferStorageMemEXT, buffer, size, memory, offset); +} +void API_ENTRY(glImportMemoryFdEXT)(GLuint memory, GLuint64 size, GLenum handleType, GLint fd) { + CALL_GL_API(glImportMemoryFdEXT, memory, size, handleType, fd); +} void API_ENTRY(glMultiDrawArraysEXT)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount) { CALL_GL_API(glMultiDrawArraysEXT, mode, first, count, primcount); } @@ -430,6 +541,9 @@ void API_ENTRY(glDrawBuffersIndexedEXT)(GLint n, const GLenum *location, const G void API_ENTRY(glGetIntegeri_vEXT)(GLenum target, GLuint index, GLint *data) { CALL_GL_API(glGetIntegeri_vEXT, target, index, data); } +void API_ENTRY(glPolygonOffsetClampEXT)(GLfloat factor, GLfloat units, GLfloat clamp) { + CALL_GL_API(glPolygonOffsetClampEXT, factor, units, clamp); +} void API_ENTRY(glPrimitiveBoundingBoxEXT)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW) { CALL_GL_API(glPrimitiveBoundingBoxEXT, minX, minY, minZ, minW, maxX, maxY, maxZ, maxW); } @@ -448,6 +562,30 @@ void API_ENTRY(glGetnUniformfvEXT)(GLuint program, GLint location, GLsizei bufSi void API_ENTRY(glGetnUniformivEXT)(GLuint program, GLint location, GLsizei bufSize, GLint *params) { CALL_GL_API(glGetnUniformivEXT, program, location, bufSize, params); } +void API_ENTRY(glGenSemaphoresEXT)(GLsizei n, GLuint *semaphores) { + CALL_GL_API(glGenSemaphoresEXT, n, semaphores); +} +void API_ENTRY(glDeleteSemaphoresEXT)(GLsizei n, const GLuint *semaphores) { + CALL_GL_API(glDeleteSemaphoresEXT, n, semaphores); +} +GLboolean API_ENTRY(glIsSemaphoreEXT)(GLuint semaphore) { + CALL_GL_API_RETURN(glIsSemaphoreEXT, semaphore); +} +void API_ENTRY(glSemaphoreParameterui64vEXT)(GLuint semaphore, GLenum pname, const GLuint64 *params) { + CALL_GL_API(glSemaphoreParameterui64vEXT, semaphore, pname, params); +} +void API_ENTRY(glGetSemaphoreParameterui64vEXT)(GLuint semaphore, GLenum pname, GLuint64 *params) { + CALL_GL_API(glGetSemaphoreParameterui64vEXT, semaphore, pname, params); +} +void API_ENTRY(glWaitSemaphoreEXT)(GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts) { + CALL_GL_API(glWaitSemaphoreEXT, semaphore, numBufferBarriers, buffers, numTextureBarriers, textures, srcLayouts); +} +void API_ENTRY(glSignalSemaphoreEXT)(GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts) { + CALL_GL_API(glSignalSemaphoreEXT, semaphore, numBufferBarriers, buffers, numTextureBarriers, textures, dstLayouts); +} +void API_ENTRY(glImportSemaphoreFdEXT)(GLuint semaphore, GLenum handleType, GLint fd) { + CALL_GL_API(glImportSemaphoreFdEXT, semaphore, handleType, fd); +} void API_ENTRY(glActiveShaderProgramEXT)(GLuint pipeline, GLuint program) { CALL_GL_API(glActiveShaderProgramEXT, pipeline, program); } @@ -580,6 +718,18 @@ void API_ENTRY(glProgramUniformMatrix3x4fvEXT)(GLuint program, GLint location, G void API_ENTRY(glProgramUniformMatrix4x3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { CALL_GL_API(glProgramUniformMatrix4x3fvEXT, program, location, count, transpose, value); } +void API_ENTRY(glFramebufferFetchBarrierEXT)(void) { + CALL_GL_API(glFramebufferFetchBarrierEXT); +} +void API_ENTRY(glFramebufferPixelLocalStorageSizeEXT)(GLuint target, GLsizei size) { + CALL_GL_API(glFramebufferPixelLocalStorageSizeEXT, target, size); +} +GLsizei API_ENTRY(glGetFramebufferPixelLocalStorageSizeEXT)(GLuint target) { + CALL_GL_API_RETURN(glGetFramebufferPixelLocalStorageSizeEXT, target); +} +void API_ENTRY(glClearPixelLocalStorageuiEXT)(GLsizei offset, GLsizei n, const GLuint *values) { + CALL_GL_API(glClearPixelLocalStorageuiEXT, offset, n, values); +} void API_ENTRY(glTexPageCommitmentEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit) { CALL_GL_API(glTexPageCommitmentEXT, target, level, xoffset, yoffset, zoffset, width, height, depth, commit); } @@ -637,6 +787,33 @@ void API_ENTRY(glTextureStorage3DEXT)(GLuint texture, GLenum target, GLsizei lev void API_ENTRY(glTextureViewEXT)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) { CALL_GL_API(glTextureViewEXT, texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers); } +void API_ENTRY(glWindowRectanglesEXT)(GLenum mode, GLsizei count, const GLint *box) { + CALL_GL_API(glWindowRectanglesEXT, mode, count, box); +} +GLuint64 API_ENTRY(glGetTextureHandleIMG)(GLuint texture) { + CALL_GL_API_RETURN(glGetTextureHandleIMG, texture); +} +GLuint64 API_ENTRY(glGetTextureSamplerHandleIMG)(GLuint texture, GLuint sampler) { + CALL_GL_API_RETURN(glGetTextureSamplerHandleIMG, texture, sampler); +} +void API_ENTRY(glUniformHandleui64IMG)(GLint location, GLuint64 value) { + CALL_GL_API(glUniformHandleui64IMG, location, value); +} +void API_ENTRY(glUniformHandleui64vIMG)(GLint location, GLsizei count, const GLuint64 *value) { + CALL_GL_API(glUniformHandleui64vIMG, location, count, value); +} +void API_ENTRY(glProgramUniformHandleui64IMG)(GLuint program, GLint location, GLuint64 value) { + CALL_GL_API(glProgramUniformHandleui64IMG, program, location, value); +} +void API_ENTRY(glProgramUniformHandleui64vIMG)(GLuint program, GLint location, GLsizei count, const GLuint64 *values) { + CALL_GL_API(glProgramUniformHandleui64vIMG, program, location, count, values); +} +void API_ENTRY(glFramebufferTexture2DDownsampleIMG)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale) { + CALL_GL_API(glFramebufferTexture2DDownsampleIMG, target, attachment, textarget, texture, level, xscale, yscale); +} +void API_ENTRY(glFramebufferTextureLayerDownsampleIMG)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale) { + CALL_GL_API(glFramebufferTextureLayerDownsampleIMG, target, attachment, texture, level, layer, xscale, yscale); +} void API_ENTRY(glRenderbufferStorageMultisampleIMG)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { CALL_GL_API(glRenderbufferStorageMultisampleIMG, target, samples, internalformat, width, height); } @@ -667,7 +844,7 @@ void API_ENTRY(glGetNextPerfQueryIdINTEL)(GLuint queryId, GLuint *nextQueryId) { void API_ENTRY(glGetPerfCounterInfoINTEL)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue) { CALL_GL_API(glGetPerfCounterInfoINTEL, queryId, counterId, counterNameLength, counterName, counterDescLength, counterDesc, counterOffset, counterDataSize, counterTypeEnum, counterDataTypeEnum, rawCounterMaxValue); } -void API_ENTRY(glGetPerfQueryDataINTEL)(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten) { +void API_ENTRY(glGetPerfQueryDataINTEL)(GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten) { CALL_GL_API(glGetPerfQueryDataINTEL, queryHandle, flags, dataSize, data, bytesWritten); } void API_ENTRY(glGetPerfQueryIdByNameINTEL)(GLchar *queryName, GLuint *queryId) { @@ -721,6 +898,9 @@ void API_ENTRY(glBlendParameteriNV)(GLenum pname, GLint value) { void API_ENTRY(glBlendBarrierNV)(void) { CALL_GL_API(glBlendBarrierNV); } +void API_ENTRY(glViewportPositionWScaleNV)(GLuint index, GLfloat xcoeff, GLfloat ycoeff) { + CALL_GL_API(glViewportPositionWScaleNV, index, xcoeff, ycoeff); +} void API_ENTRY(glBeginConditionalRenderNV)(GLuint id, GLenum mode) { CALL_GL_API(glBeginConditionalRenderNV, id, mode); } @@ -730,6 +910,9 @@ void API_ENTRY(glEndConditionalRenderNV)(void) { void API_ENTRY(glSubpixelPrecisionBiasNV)(GLuint xbits, GLuint ybits) { CALL_GL_API(glSubpixelPrecisionBiasNV, xbits, ybits); } +void API_ENTRY(glConservativeRasterParameteriNV)(GLenum pname, GLint param) { + CALL_GL_API(glConservativeRasterParameteriNV, pname, param); +} void API_ENTRY(glCopyBufferSubDataNV)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) { CALL_GL_API(glCopyBufferSubDataNV, readTarget, writeTarget, readOffset, writeOffset, size); } @@ -748,6 +931,21 @@ void API_ENTRY(glDrawArraysInstancedNV)(GLenum mode, GLint first, GLsizei count, void API_ENTRY(glDrawElementsInstancedNV)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount) { CALL_GL_API(glDrawElementsInstancedNV, mode, count, type, indices, primcount); } +void API_ENTRY(glDrawVkImageNV)(GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1) { + CALL_GL_API(glDrawVkImageNV, vkImage, sampler, x0, y0, x1, y1, z, s0, t0, s1, t1); +} +GLVULKANPROCNV API_ENTRY(glGetVkProcAddrNV)(const GLchar *name) { + CALL_GL_API_RETURN(glGetVkProcAddrNV, name); +} +void API_ENTRY(glWaitVkSemaphoreNV)(GLuint64 vkSemaphore) { + CALL_GL_API(glWaitVkSemaphoreNV, vkSemaphore); +} +void API_ENTRY(glSignalVkSemaphoreNV)(GLuint64 vkSemaphore) { + CALL_GL_API(glSignalVkSemaphoreNV, vkSemaphore); +} +void API_ENTRY(glSignalVkFenceNV)(GLuint64 vkFence) { + CALL_GL_API(glSignalVkFenceNV, vkFence); +} void API_ENTRY(glDeleteFencesNV)(GLsizei n, const GLuint *fences) { CALL_GL_API(glDeleteFencesNV, n, fences); } @@ -787,6 +985,105 @@ void API_ENTRY(glCoverageModulationNV)(GLenum components) { void API_ENTRY(glRenderbufferStorageMultisampleNV)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { CALL_GL_API(glRenderbufferStorageMultisampleNV, target, samples, internalformat, width, height); } +void API_ENTRY(glUniform1i64NV)(GLint location, GLint64EXT x) { + CALL_GL_API(glUniform1i64NV, location, x); +} +void API_ENTRY(glUniform2i64NV)(GLint location, GLint64EXT x, GLint64EXT y) { + CALL_GL_API(glUniform2i64NV, location, x, y); +} +void API_ENTRY(glUniform3i64NV)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) { + CALL_GL_API(glUniform3i64NV, location, x, y, z); +} +void API_ENTRY(glUniform4i64NV)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) { + CALL_GL_API(glUniform4i64NV, location, x, y, z, w); +} +void API_ENTRY(glUniform1i64vNV)(GLint location, GLsizei count, const GLint64EXT *value) { + CALL_GL_API(glUniform1i64vNV, location, count, value); +} +void API_ENTRY(glUniform2i64vNV)(GLint location, GLsizei count, const GLint64EXT *value) { + CALL_GL_API(glUniform2i64vNV, location, count, value); +} +void API_ENTRY(glUniform3i64vNV)(GLint location, GLsizei count, const GLint64EXT *value) { + CALL_GL_API(glUniform3i64vNV, location, count, value); +} +void API_ENTRY(glUniform4i64vNV)(GLint location, GLsizei count, const GLint64EXT *value) { + CALL_GL_API(glUniform4i64vNV, location, count, value); +} +void API_ENTRY(glUniform1ui64NV)(GLint location, GLuint64EXT x) { + CALL_GL_API(glUniform1ui64NV, location, x); +} +void API_ENTRY(glUniform2ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y) { + CALL_GL_API(glUniform2ui64NV, location, x, y); +} +void API_ENTRY(glUniform3ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) { + CALL_GL_API(glUniform3ui64NV, location, x, y, z); +} +void API_ENTRY(glUniform4ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) { + CALL_GL_API(glUniform4ui64NV, location, x, y, z, w); +} +void API_ENTRY(glUniform1ui64vNV)(GLint location, GLsizei count, const GLuint64EXT *value) { + CALL_GL_API(glUniform1ui64vNV, location, count, value); +} +void API_ENTRY(glUniform2ui64vNV)(GLint location, GLsizei count, const GLuint64EXT *value) { + CALL_GL_API(glUniform2ui64vNV, location, count, value); +} +void API_ENTRY(glUniform3ui64vNV)(GLint location, GLsizei count, const GLuint64EXT *value) { + CALL_GL_API(glUniform3ui64vNV, location, count, value); +} +void API_ENTRY(glUniform4ui64vNV)(GLint location, GLsizei count, const GLuint64EXT *value) { + CALL_GL_API(glUniform4ui64vNV, location, count, value); +} +void API_ENTRY(glGetUniformi64vNV)(GLuint program, GLint location, GLint64EXT *params) { + CALL_GL_API(glGetUniformi64vNV, program, location, params); +} +void API_ENTRY(glProgramUniform1i64NV)(GLuint program, GLint location, GLint64EXT x) { + CALL_GL_API(glProgramUniform1i64NV, program, location, x); +} +void API_ENTRY(glProgramUniform2i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y) { + CALL_GL_API(glProgramUniform2i64NV, program, location, x, y); +} +void API_ENTRY(glProgramUniform3i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) { + CALL_GL_API(glProgramUniform3i64NV, program, location, x, y, z); +} +void API_ENTRY(glProgramUniform4i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) { + CALL_GL_API(glProgramUniform4i64NV, program, location, x, y, z, w); +} +void API_ENTRY(glProgramUniform1i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value) { + CALL_GL_API(glProgramUniform1i64vNV, program, location, count, value); +} +void API_ENTRY(glProgramUniform2i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value) { + CALL_GL_API(glProgramUniform2i64vNV, program, location, count, value); +} +void API_ENTRY(glProgramUniform3i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value) { + CALL_GL_API(glProgramUniform3i64vNV, program, location, count, value); +} +void API_ENTRY(glProgramUniform4i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT *value) { + CALL_GL_API(glProgramUniform4i64vNV, program, location, count, value); +} +void API_ENTRY(glProgramUniform1ui64NV)(GLuint program, GLint location, GLuint64EXT x) { + CALL_GL_API(glProgramUniform1ui64NV, program, location, x); +} +void API_ENTRY(glProgramUniform2ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y) { + CALL_GL_API(glProgramUniform2ui64NV, program, location, x, y); +} +void API_ENTRY(glProgramUniform3ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) { + CALL_GL_API(glProgramUniform3ui64NV, program, location, x, y, z); +} +void API_ENTRY(glProgramUniform4ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) { + CALL_GL_API(glProgramUniform4ui64NV, program, location, x, y, z, w); +} +void API_ENTRY(glProgramUniform1ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) { + CALL_GL_API(glProgramUniform1ui64vNV, program, location, count, value); +} +void API_ENTRY(glProgramUniform2ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) { + CALL_GL_API(glProgramUniform2ui64vNV, program, location, count, value); +} +void API_ENTRY(glProgramUniform3ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) { + CALL_GL_API(glProgramUniform3ui64vNV, program, location, count, value); +} +void API_ENTRY(glProgramUniform4ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) { + CALL_GL_API(glProgramUniform4ui64vNV, program, location, count, value); +} void API_ENTRY(glVertexAttribDivisorNV)(GLuint index, GLuint divisor) { CALL_GL_API(glVertexAttribDivisorNV, index, divisor); } @@ -982,6 +1279,63 @@ void API_ENTRY(glProgramPathFragmentInputGenNV)(GLuint program, GLint location, void API_ENTRY(glGetProgramResourcefvNV)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params) { CALL_GL_API(glGetProgramResourcefvNV, program, programInterface, index, propCount, props, bufSize, length, params); } +void API_ENTRY(glMatrixFrustumEXT)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { + CALL_GL_API(glMatrixFrustumEXT, mode, left, right, bottom, top, zNear, zFar); +} +void API_ENTRY(glMatrixLoadIdentityEXT)(GLenum mode) { + CALL_GL_API(glMatrixLoadIdentityEXT, mode); +} +void API_ENTRY(glMatrixLoadTransposefEXT)(GLenum mode, const GLfloat *m) { + CALL_GL_API(glMatrixLoadTransposefEXT, mode, m); +} +void API_ENTRY(glMatrixLoadTransposedEXT)(GLenum mode, const GLdouble *m) { + CALL_GL_API(glMatrixLoadTransposedEXT, mode, m); +} +void API_ENTRY(glMatrixLoadfEXT)(GLenum mode, const GLfloat *m) { + CALL_GL_API(glMatrixLoadfEXT, mode, m); +} +void API_ENTRY(glMatrixLoaddEXT)(GLenum mode, const GLdouble *m) { + CALL_GL_API(glMatrixLoaddEXT, mode, m); +} +void API_ENTRY(glMatrixMultTransposefEXT)(GLenum mode, const GLfloat *m) { + CALL_GL_API(glMatrixMultTransposefEXT, mode, m); +} +void API_ENTRY(glMatrixMultTransposedEXT)(GLenum mode, const GLdouble *m) { + CALL_GL_API(glMatrixMultTransposedEXT, mode, m); +} +void API_ENTRY(glMatrixMultfEXT)(GLenum mode, const GLfloat *m) { + CALL_GL_API(glMatrixMultfEXT, mode, m); +} +void API_ENTRY(glMatrixMultdEXT)(GLenum mode, const GLdouble *m) { + CALL_GL_API(glMatrixMultdEXT, mode, m); +} +void API_ENTRY(glMatrixOrthoEXT)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { + CALL_GL_API(glMatrixOrthoEXT, mode, left, right, bottom, top, zNear, zFar); +} +void API_ENTRY(glMatrixPopEXT)(GLenum mode) { + CALL_GL_API(glMatrixPopEXT, mode); +} +void API_ENTRY(glMatrixPushEXT)(GLenum mode) { + CALL_GL_API(glMatrixPushEXT, mode); +} +void API_ENTRY(glMatrixRotatefEXT)(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) { + CALL_GL_API(glMatrixRotatefEXT, mode, angle, x, y, z); +} +void API_ENTRY(glMatrixRotatedEXT)(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) { + CALL_GL_API(glMatrixRotatedEXT, mode, angle, x, y, z); +} +void API_ENTRY(glMatrixScalefEXT)(GLenum mode, GLfloat x, GLfloat y, GLfloat z) { + CALL_GL_API(glMatrixScalefEXT, mode, x, y, z); +} +void API_ENTRY(glMatrixScaledEXT)(GLenum mode, GLdouble x, GLdouble y, GLdouble z) { + CALL_GL_API(glMatrixScaledEXT, mode, x, y, z); +} +void API_ENTRY(glMatrixTranslatefEXT)(GLenum mode, GLfloat x, GLfloat y, GLfloat z) { + CALL_GL_API(glMatrixTranslatefEXT, mode, x, y, z); +} +void API_ENTRY(glMatrixTranslatedEXT)(GLenum mode, GLdouble x, GLdouble y, GLdouble z) { + CALL_GL_API(glMatrixTranslatedEXT, mode, x, y, z); +} void API_ENTRY(glPolygonModeNV)(GLenum face, GLenum mode) { CALL_GL_API(glPolygonModeNV, face, mode); } @@ -1033,6 +1387,9 @@ void API_ENTRY(glDisableiNV)(GLenum target, GLuint index) { GLboolean API_ENTRY(glIsEnablediNV)(GLenum target, GLuint index) { CALL_GL_API_RETURN(glIsEnablediNV, target, index); } +void API_ENTRY(glViewportSwizzleNV)(GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew) { + CALL_GL_API(glViewportSwizzleNV, index, swizzlex, swizzley, swizzlez, swizzlew); +} void API_ENTRY(glFramebufferTextureMultiviewOVR)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews) { CALL_GL_API(glFramebufferTextureMultiviewOVR, target, attachment, texture, level, baseViewIndex, numViews); } @@ -1090,6 +1447,18 @@ GLboolean API_ENTRY(glExtIsProgramBinaryQCOM)(GLuint program) { void API_ENTRY(glExtGetProgramBinarySourceQCOM)(GLuint program, GLenum shadertype, GLchar *source, GLint *length) { CALL_GL_API(glExtGetProgramBinarySourceQCOM, program, shadertype, source, length); } +void API_ENTRY(glFramebufferFoveationConfigQCOM)(GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures) { + CALL_GL_API(glFramebufferFoveationConfigQCOM, framebuffer, numLayers, focalPointsPerLayer, requestedFeatures, providedFeatures); +} +void API_ENTRY(glFramebufferFoveationParametersQCOM)(GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea) { + CALL_GL_API(glFramebufferFoveationParametersQCOM, framebuffer, layer, focalPoint, focalX, focalY, gainX, gainY, foveaArea); +} +void API_ENTRY(glFramebufferFetchBarrierQCOM)(void) { + CALL_GL_API(glFramebufferFetchBarrierQCOM); +} +void API_ENTRY(glTextureFoveationParametersQCOM)(GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea) { + CALL_GL_API(glTextureFoveationParametersQCOM, texture, layer, focalPoint, focalX, focalY, gainX, gainY, foveaArea); +} void API_ENTRY(glStartTilingQCOM)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask) { CALL_GL_API(glStartTilingQCOM, x, y, width, height, preserveMask); } diff --git a/opengl/libs/GLES_CM/glext_api.in b/opengl/libs/GLES_CM/glext_api.in index fbf761a3b3..42ac5638b3 100644 --- a/opengl/libs/GLES_CM/glext_api.in +++ b/opengl/libs/GLES_CM/glext_api.in @@ -313,6 +313,15 @@ void API_ENTRY(glGetInteger64vAPPLE)(GLenum pname, GLint64 *params) { void API_ENTRY(glGetSyncivAPPLE)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) { CALL_GL_API(glGetSyncivAPPLE, sync, pname, bufSize, length, values); } +void API_ENTRY(glInsertEventMarkerEXT)(GLsizei length, const GLchar *marker) { + CALL_GL_API(glInsertEventMarkerEXT, length, marker); +} +void API_ENTRY(glPushGroupMarkerEXT)(GLsizei length, const GLchar *marker) { + CALL_GL_API(glPushGroupMarkerEXT, length, marker); +} +void API_ENTRY(glPopGroupMarkerEXT)(void) { + CALL_GL_API(glPopGroupMarkerEXT); +} void API_ENTRY(glDiscardFramebufferEXT)(GLenum target, GLsizei numAttachments, const GLenum *attachments) { CALL_GL_API(glDiscardFramebufferEXT, target, numAttachments, attachments); } diff --git a/opengl/libs/entries.in b/opengl/libs/entries.in index e3b7cf38ee..a30651098b 100644 --- a/opengl/libs/entries.in +++ b/opengl/libs/entries.in @@ -61,6 +61,8 @@ GL_ENTRY(void, glBlitFramebufferANGLE, GLint srcX0, GLint srcY0, GLint srcX1, GL GL_ENTRY(void, glBlitFramebufferNV, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) GL_ENTRY(void, glBufferData, GLenum target, GLsizeiptr size, const void *data, GLenum usage) GL_ENTRY(void, glBufferStorageEXT, GLenum target, GLsizeiptr size, const void *data, GLbitfield flags) +GL_ENTRY(void, glBufferStorageExternalEXT, GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags) +GL_ENTRY(void, glBufferStorageMemEXT, GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset) GL_ENTRY(void, glBufferSubData, GLenum target, GLintptr offset, GLsizeiptr size, const void *data) GL_ENTRY(GLenum, glCheckFramebufferStatus, GLenum target) GL_ENTRY(GLenum, glCheckFramebufferStatusOES, GLenum target) @@ -76,10 +78,14 @@ GL_ENTRY(void, glClearDepthf, GLfloat d) GL_ENTRY(void, glClearDepthfOES, GLclampf depth) GL_ENTRY(void, glClearDepthx, GLfixed depth) GL_ENTRY(void, glClearDepthxOES, GLfixed depth) +GL_ENTRY(void, glClearPixelLocalStorageuiEXT, GLsizei offset, GLsizei n, const GLuint *values) GL_ENTRY(void, glClearStencil, GLint s) +GL_ENTRY(void, glClearTexImageEXT, GLuint texture, GLint level, GLenum format, GLenum type, const void *data) +GL_ENTRY(void, glClearTexSubImageEXT, GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data) GL_ENTRY(void, glClientActiveTexture, GLenum texture) GL_ENTRY(GLenum, glClientWaitSync, GLsync sync, GLbitfield flags, GLuint64 timeout) GL_ENTRY(GLenum, glClientWaitSyncAPPLE, GLsync sync, GLbitfield flags, GLuint64 timeout) +GL_ENTRY(void, glClipControlEXT, GLenum origin, GLenum depth) GL_ENTRY(void, glClipPlanef, GLenum p, const GLfloat *eqn) GL_ENTRY(void, glClipPlanefIMG, GLenum p, const GLfloat *eqn) GL_ENTRY(void, glClipPlanefOES, GLenum plane, const GLfloat *equation) @@ -102,6 +108,7 @@ GL_ENTRY(void, glCompressedTexImage3DOES, GLenum target, GLint level, GLenum int GL_ENTRY(void, glCompressedTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data) GL_ENTRY(void, glCompressedTexSubImage3D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data) GL_ENTRY(void, glCompressedTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data) +GL_ENTRY(void, glConservativeRasterParameteriNV, GLenum pname, GLint param) GL_ENTRY(void, glCopyBufferSubData, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) GL_ENTRY(void, glCopyBufferSubDataNV, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) GL_ENTRY(void, glCopyImageSubData, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) @@ -121,6 +128,7 @@ GL_ENTRY(void, glCoverageMaskNV, GLboolean mask) GL_ENTRY(void, glCoverageModulationNV, GLenum components) GL_ENTRY(void, glCoverageModulationTableNV, GLsizei n, const GLfloat *v) GL_ENTRY(void, glCoverageOperationNV, GLenum operation) +GL_ENTRY(void, glCreateMemoryObjectsEXT, GLsizei n, GLuint *memoryObjects) GL_ENTRY(void, glCreatePerfQueryINTEL, GLuint queryId, GLuint *queryHandle) GL_ENTRY(GLuint, glCreateProgram, void) GL_ENTRY(GLuint, glCreateShader, GLenum type) @@ -138,6 +146,7 @@ GL_ENTRY(void, glDeleteBuffers, GLsizei n, const GLuint *buffers) GL_ENTRY(void, glDeleteFencesNV, GLsizei n, const GLuint *fences) GL_ENTRY(void, glDeleteFramebuffers, GLsizei n, const GLuint *framebuffers) GL_ENTRY(void, glDeleteFramebuffersOES, GLsizei n, const GLuint *framebuffers) +GL_ENTRY(void, glDeleteMemoryObjectsEXT, GLsizei n, const GLuint *memoryObjects) GL_ENTRY(void, glDeletePathsNV, GLuint path, GLsizei range) GL_ENTRY(void, glDeletePerfMonitorsAMD, GLsizei n, GLuint *monitors) GL_ENTRY(void, glDeletePerfQueryINTEL, GLuint queryHandle) @@ -149,6 +158,7 @@ GL_ENTRY(void, glDeleteQueriesEXT, GLsizei n, const GLuint *ids) GL_ENTRY(void, glDeleteRenderbuffers, GLsizei n, const GLuint *renderbuffers) GL_ENTRY(void, glDeleteRenderbuffersOES, GLsizei n, const GLuint *renderbuffers) GL_ENTRY(void, glDeleteSamplers, GLsizei count, const GLuint *samplers) +GL_ENTRY(void, glDeleteSemaphoresEXT, GLsizei n, const GLuint *semaphores) GL_ENTRY(void, glDeleteShader, GLuint shader) GL_ENTRY(void, glDeleteSync, GLsync sync) GL_ENTRY(void, glDeleteSyncAPPLE, GLsync sync) @@ -159,7 +169,9 @@ GL_ENTRY(void, glDeleteVertexArraysOES, GLsizei n, const GLuint *arrays) GL_ENTRY(void, glDepthFunc, GLenum func) GL_ENTRY(void, glDepthMask, GLboolean flag) GL_ENTRY(void, glDepthRangeArrayfvNV, GLuint first, GLsizei count, const GLfloat *v) +GL_ENTRY(void, glDepthRangeArrayfvOES, GLuint first, GLsizei count, const GLfloat *v) GL_ENTRY(void, glDepthRangeIndexedfNV, GLuint index, GLfloat n, GLfloat f) +GL_ENTRY(void, glDepthRangeIndexedfOES, GLuint index, GLfloat n, GLfloat f) GL_ENTRY(void, glDepthRangef, GLfloat n, GLfloat f) GL_ENTRY(void, glDepthRangefOES, GLclampf n, GLclampf f) GL_ENTRY(void, glDepthRangex, GLfixed n, GLfixed f) @@ -213,8 +225,13 @@ GL_ENTRY(void, glDrawTexsOES, GLshort x, GLshort y, GLshort z, GLshort width, GL GL_ENTRY(void, glDrawTexsvOES, const GLshort *coords) GL_ENTRY(void, glDrawTexxOES, GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height) GL_ENTRY(void, glDrawTexxvOES, const GLfixed *coords) +GL_ENTRY(void, glDrawTransformFeedbackEXT, GLenum mode, GLuint id) +GL_ENTRY(void, glDrawTransformFeedbackInstancedEXT, GLenum mode, GLuint id, GLsizei instancecount) +GL_ENTRY(void, glDrawVkImageNV, GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1) GL_ENTRY(void, glEGLImageTargetRenderbufferStorageOES, GLenum target, GLeglImageOES image) +GL_ENTRY(void, glEGLImageTargetTexStorageEXT, GLenum target, GLeglImageOES image, const GLint* attrib_list) GL_ENTRY(void, glEGLImageTargetTexture2DOES, GLenum target, GLeglImageOES image) +GL_ENTRY(void, glEGLImageTargetTextureStorageEXT, GLuint texture, GLeglImageOES image, const GLint* attrib_list) GL_ENTRY(void, glEnable, GLenum cap) GL_ENTRY(void, glEnableClientState, GLenum array) GL_ENTRY(void, glEnableDriverControlQCOM, GLuint driverControl) @@ -256,18 +273,25 @@ GL_ENTRY(void, glFogxOES, GLenum pname, GLfixed param) GL_ENTRY(void, glFogxv, GLenum pname, const GLfixed *param) GL_ENTRY(void, glFogxvOES, GLenum pname, const GLfixed *param) GL_ENTRY(void, glFragmentCoverageColorNV, GLuint color) +GL_ENTRY(void, glFramebufferFetchBarrierEXT, void) +GL_ENTRY(void, glFramebufferFetchBarrierQCOM, void) +GL_ENTRY(void, glFramebufferFoveationConfigQCOM, GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures) +GL_ENTRY(void, glFramebufferFoveationParametersQCOM, GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea) GL_ENTRY(void, glFramebufferParameteri, GLenum target, GLenum pname, GLint param) +GL_ENTRY(void, glFramebufferPixelLocalStorageSizeEXT, GLuint target, GLsizei size) GL_ENTRY(void, glFramebufferRenderbuffer, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) GL_ENTRY(void, glFramebufferRenderbufferOES, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) GL_ENTRY(void, glFramebufferSampleLocationsfvNV, GLenum target, GLuint start, GLsizei count, const GLfloat *v) GL_ENTRY(void, glFramebufferTexture, GLenum target, GLenum attachment, GLuint texture, GLint level) GL_ENTRY(void, glFramebufferTexture2D, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) +GL_ENTRY(void, glFramebufferTexture2DDownsampleIMG, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale) GL_ENTRY(void, glFramebufferTexture2DMultisampleEXT, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) GL_ENTRY(void, glFramebufferTexture2DMultisampleIMG, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) GL_ENTRY(void, glFramebufferTexture2DOES, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) GL_ENTRY(void, glFramebufferTexture3DOES, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) GL_ENTRY(void, glFramebufferTextureEXT, GLenum target, GLenum attachment, GLuint texture, GLint level) GL_ENTRY(void, glFramebufferTextureLayer, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) +GL_ENTRY(void, glFramebufferTextureLayerDownsampleIMG, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale) GL_ENTRY(void, glFramebufferTextureMultisampleMultiviewOVR, GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews) GL_ENTRY(void, glFramebufferTextureMultiviewOVR, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews) GL_ENTRY(void, glFramebufferTextureOES, GLenum target, GLenum attachment, GLuint texture, GLint level) @@ -289,6 +313,7 @@ GL_ENTRY(void, glGenQueriesEXT, GLsizei n, GLuint *ids) GL_ENTRY(void, glGenRenderbuffers, GLsizei n, GLuint *renderbuffers) GL_ENTRY(void, glGenRenderbuffersOES, GLsizei n, GLuint *renderbuffers) GL_ENTRY(void, glGenSamplers, GLsizei count, GLuint *samplers) +GL_ENTRY(void, glGenSemaphoresEXT, GLsizei n, GLuint *semaphores) GL_ENTRY(void, glGenTextures, GLsizei n, GLuint *textures) GL_ENTRY(void, glGenTransformFeedbacks, GLsizei n, GLuint *ids) GL_ENTRY(void, glGenVertexArrays, GLsizei n, GLuint *arrays) @@ -323,12 +348,14 @@ GL_ENTRY(void, glGetFirstPerfQueryIdINTEL, GLuint *queryId) GL_ENTRY(void, glGetFixedv, GLenum pname, GLfixed *params) GL_ENTRY(void, glGetFixedvOES, GLenum pname, GLfixed *params) GL_ENTRY(void, glGetFloati_vNV, GLenum target, GLuint index, GLfloat *data) +GL_ENTRY(void, glGetFloati_vOES, GLenum target, GLuint index, GLfloat *data) GL_ENTRY(void, glGetFloatv, GLenum pname, GLfloat *data) GL_ENTRY(GLint, glGetFragDataIndexEXT, GLuint program, const GLchar *name) GL_ENTRY(GLint, glGetFragDataLocation, GLuint program, const GLchar *name) GL_ENTRY(void, glGetFramebufferAttachmentParameteriv, GLenum target, GLenum attachment, GLenum pname, GLint *params) GL_ENTRY(void, glGetFramebufferAttachmentParameterivOES, GLenum target, GLenum attachment, GLenum pname, GLint *params) GL_ENTRY(void, glGetFramebufferParameteriv, GLenum target, GLenum pname, GLint *params) +GL_ENTRY(GLsizei, glGetFramebufferPixelLocalStorageSizeEXT, GLuint target) GL_ENTRY(GLenum, glGetGraphicsResetStatus, void) GL_ENTRY(GLenum, glGetGraphicsResetStatusEXT, void) GL_ENTRY(GLenum, glGetGraphicsResetStatusKHR, void) @@ -347,6 +374,7 @@ GL_ENTRY(void, glGetLightxvOES, GLenum light, GLenum pname, GLfixed *params) GL_ENTRY(void, glGetMaterialfv, GLenum face, GLenum pname, GLfloat *params) GL_ENTRY(void, glGetMaterialxv, GLenum face, GLenum pname, GLfixed *params) GL_ENTRY(void, glGetMaterialxvOES, GLenum face, GLenum pname, GLfixed *params) +GL_ENTRY(void, glGetMemoryObjectParameterivEXT, GLuint memoryObject, GLenum pname, GLint *params) GL_ENTRY(void, glGetMultisamplefv, GLenum pname, GLuint index, GLfloat *val) GL_ENTRY(void, glGetNextPerfQueryIdINTEL, GLuint queryId, GLuint *nextQueryId) GL_ENTRY(void, glGetObjectLabel, GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label) @@ -370,7 +398,7 @@ GL_ENTRY(void, glGetPerfMonitorCounterStringAMD, GLuint group, GLuint counter, G GL_ENTRY(void, glGetPerfMonitorCountersAMD, GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters) GL_ENTRY(void, glGetPerfMonitorGroupStringAMD, GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString) GL_ENTRY(void, glGetPerfMonitorGroupsAMD, GLint *numGroups, GLsizei groupsSize, GLuint *groups) -GL_ENTRY(void, glGetPerfQueryDataINTEL, GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten) +GL_ENTRY(void, glGetPerfQueryDataINTEL, GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten) GL_ENTRY(void, glGetPerfQueryIdByNameINTEL, GLchar *queryName, GLuint *queryId) GL_ENTRY(void, glGetPerfQueryInfoINTEL, GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask) GL_ENTRY(void, glGetPointerv, GLenum pname, void **params) @@ -407,6 +435,7 @@ GL_ENTRY(void, glGetSamplerParameterIuivEXT, GLuint sampler, GLenum pname, GLuin GL_ENTRY(void, glGetSamplerParameterIuivOES, GLuint sampler, GLenum pname, GLuint *params) GL_ENTRY(void, glGetSamplerParameterfv, GLuint sampler, GLenum pname, GLfloat *params) GL_ENTRY(void, glGetSamplerParameteriv, GLuint sampler, GLenum pname, GLint *params) +GL_ENTRY(void, glGetSemaphoreParameterui64vEXT, GLuint semaphore, GLenum pname, GLuint64 *params) GL_ENTRY(void, glGetShaderInfoLog, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) GL_ENTRY(void, glGetShaderPrecisionFormat, GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision) GL_ENTRY(void, glGetShaderSource, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source) @@ -434,7 +463,9 @@ GL_ENTRY(void, glGetTexParameterfv, GLenum target, GLenum pname, GLfloat *params GL_ENTRY(void, glGetTexParameteriv, GLenum target, GLenum pname, GLint *params) GL_ENTRY(void, glGetTexParameterxv, GLenum target, GLenum pname, GLfixed *params) GL_ENTRY(void, glGetTexParameterxvOES, GLenum target, GLenum pname, GLfixed *params) +GL_ENTRY(GLuint64, glGetTextureHandleIMG, GLuint texture) GL_ENTRY(GLuint64, glGetTextureHandleNV, GLuint texture) +GL_ENTRY(GLuint64, glGetTextureSamplerHandleIMG, GLuint texture, GLuint sampler) GL_ENTRY(GLuint64, glGetTextureSamplerHandleNV, GLuint texture, GLuint sampler) GL_ENTRY(void, glGetTransformFeedbackVarying, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name) GL_ENTRY(void, glGetTranslatedShaderSourceANGLE, GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source) @@ -442,13 +473,17 @@ GL_ENTRY(GLuint, glGetUniformBlockIndex, GLuint program, const GLchar *uniformBl GL_ENTRY(void, glGetUniformIndices, GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices) GL_ENTRY(GLint, glGetUniformLocation, GLuint program, const GLchar *name) GL_ENTRY(void, glGetUniformfv, GLuint program, GLint location, GLfloat *params) +GL_ENTRY(void, glGetUniformi64vNV, GLuint program, GLint location, GLint64EXT *params) GL_ENTRY(void, glGetUniformiv, GLuint program, GLint location, GLint *params) GL_ENTRY(void, glGetUniformuiv, GLuint program, GLint location, GLuint *params) +GL_ENTRY(void, glGetUnsignedBytei_vEXT, GLenum target, GLuint index, GLubyte *data) +GL_ENTRY(void, glGetUnsignedBytevEXT, GLenum pname, GLubyte *data) GL_ENTRY(void, glGetVertexAttribIiv, GLuint index, GLenum pname, GLint *params) GL_ENTRY(void, glGetVertexAttribIuiv, GLuint index, GLenum pname, GLuint *params) GL_ENTRY(void, glGetVertexAttribPointerv, GLuint index, GLenum pname, void **pointer) GL_ENTRY(void, glGetVertexAttribfv, GLuint index, GLenum pname, GLfloat *params) GL_ENTRY(void, glGetVertexAttribiv, GLuint index, GLenum pname, GLint *params) +GL_ENTRY(GLVULKANPROCNV, glGetVkProcAddrNV, const GLchar *name) GL_ENTRY(void, glGetnUniformfv, GLuint program, GLint location, GLsizei bufSize, GLfloat *params) GL_ENTRY(void, glGetnUniformfvEXT, GLuint program, GLint location, GLsizei bufSize, GLfloat *params) GL_ENTRY(void, glGetnUniformfvKHR, GLuint program, GLint location, GLsizei bufSize, GLfloat *params) @@ -458,6 +493,8 @@ GL_ENTRY(void, glGetnUniformivKHR, GLuint program, GLint location, GLsizei bufSi GL_ENTRY(void, glGetnUniformuiv, GLuint program, GLint location, GLsizei bufSize, GLuint *params) GL_ENTRY(void, glGetnUniformuivKHR, GLuint program, GLint location, GLsizei bufSize, GLuint *params) GL_ENTRY(void, glHint, GLenum target, GLenum mode) +GL_ENTRY(void, glImportMemoryFdEXT, GLuint memory, GLuint64 size, GLenum handleType, GLint fd) +GL_ENTRY(void, glImportSemaphoreFdEXT, GLuint semaphore, GLenum handleType, GLint fd) GL_ENTRY(void, glInsertEventMarkerEXT, GLsizei length, const GLchar *marker) GL_ENTRY(void, glInterpolatePathsNV, GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight) GL_ENTRY(void, glInvalidateFramebuffer, GLenum target, GLsizei numAttachments, const GLenum *attachments) @@ -472,6 +509,7 @@ GL_ENTRY(GLboolean, glIsFenceNV, GLuint fence) GL_ENTRY(GLboolean, glIsFramebuffer, GLuint framebuffer) GL_ENTRY(GLboolean, glIsFramebufferOES, GLuint framebuffer) GL_ENTRY(GLboolean, glIsImageHandleResidentNV, GLuint64 handle) +GL_ENTRY(GLboolean, glIsMemoryObjectEXT, GLuint memoryObject) GL_ENTRY(GLboolean, glIsPathNV, GLuint path) GL_ENTRY(GLboolean, glIsPointInFillPathNV, GLuint path, GLuint mask, GLfloat x, GLfloat y) GL_ENTRY(GLboolean, glIsPointInStrokePathNV, GLuint path, GLfloat x, GLfloat y) @@ -483,6 +521,7 @@ GL_ENTRY(GLboolean, glIsQueryEXT, GLuint id) GL_ENTRY(GLboolean, glIsRenderbuffer, GLuint renderbuffer) GL_ENTRY(GLboolean, glIsRenderbufferOES, GLuint renderbuffer) GL_ENTRY(GLboolean, glIsSampler, GLuint sampler) +GL_ENTRY(GLboolean, glIsSemaphoreEXT, GLuint semaphore) GL_ENTRY(GLboolean, glIsShader, GLuint shader) GL_ENTRY(GLboolean, glIsSync, GLsync sync) GL_ENTRY(GLboolean, glIsSyncAPPLE, GLsync sync) @@ -527,16 +566,37 @@ GL_ENTRY(void, glMaterialx, GLenum face, GLenum pname, GLfixed param) GL_ENTRY(void, glMaterialxOES, GLenum face, GLenum pname, GLfixed param) GL_ENTRY(void, glMaterialxv, GLenum face, GLenum pname, const GLfixed *param) GL_ENTRY(void, glMaterialxvOES, GLenum face, GLenum pname, const GLfixed *param) +GL_ENTRY(void, glMatrixFrustumEXT, GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) GL_ENTRY(void, glMatrixIndexPointerOES, GLint size, GLenum type, GLsizei stride, const void *pointer) GL_ENTRY(void, glMatrixLoad3x2fNV, GLenum matrixMode, const GLfloat *m) GL_ENTRY(void, glMatrixLoad3x3fNV, GLenum matrixMode, const GLfloat *m) +GL_ENTRY(void, glMatrixLoadIdentityEXT, GLenum mode) GL_ENTRY(void, glMatrixLoadTranspose3x3fNV, GLenum matrixMode, const GLfloat *m) +GL_ENTRY(void, glMatrixLoadTransposedEXT, GLenum mode, const GLdouble *m) +GL_ENTRY(void, glMatrixLoadTransposefEXT, GLenum mode, const GLfloat *m) +GL_ENTRY(void, glMatrixLoaddEXT, GLenum mode, const GLdouble *m) +GL_ENTRY(void, glMatrixLoadfEXT, GLenum mode, const GLfloat *m) GL_ENTRY(void, glMatrixMode, GLenum mode) GL_ENTRY(void, glMatrixMult3x2fNV, GLenum matrixMode, const GLfloat *m) GL_ENTRY(void, glMatrixMult3x3fNV, GLenum matrixMode, const GLfloat *m) GL_ENTRY(void, glMatrixMultTranspose3x3fNV, GLenum matrixMode, const GLfloat *m) +GL_ENTRY(void, glMatrixMultTransposedEXT, GLenum mode, const GLdouble *m) +GL_ENTRY(void, glMatrixMultTransposefEXT, GLenum mode, const GLfloat *m) +GL_ENTRY(void, glMatrixMultdEXT, GLenum mode, const GLdouble *m) +GL_ENTRY(void, glMatrixMultfEXT, GLenum mode, const GLfloat *m) +GL_ENTRY(void, glMatrixOrthoEXT, GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) +GL_ENTRY(void, glMatrixPopEXT, GLenum mode) +GL_ENTRY(void, glMatrixPushEXT, GLenum mode) +GL_ENTRY(void, glMatrixRotatedEXT, GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) +GL_ENTRY(void, glMatrixRotatefEXT, GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) +GL_ENTRY(void, glMatrixScaledEXT, GLenum mode, GLdouble x, GLdouble y, GLdouble z) +GL_ENTRY(void, glMatrixScalefEXT, GLenum mode, GLfloat x, GLfloat y, GLfloat z) +GL_ENTRY(void, glMatrixTranslatedEXT, GLenum mode, GLdouble x, GLdouble y, GLdouble z) +GL_ENTRY(void, glMatrixTranslatefEXT, GLenum mode, GLfloat x, GLfloat y, GLfloat z) +GL_ENTRY(void, glMaxShaderCompilerThreadsKHR, GLuint count) GL_ENTRY(void, glMemoryBarrier, GLbitfield barriers) GL_ENTRY(void, glMemoryBarrierByRegion, GLbitfield barriers) +GL_ENTRY(void, glMemoryObjectParameterivEXT, GLuint memoryObject, GLenum pname, const GLint *params) GL_ENTRY(void, glMinSampleShading, GLfloat value) GL_ENTRY(void, glMinSampleShadingOES, GLfloat value) GL_ENTRY(void, glMultMatrixf, const GLfloat *m) @@ -551,6 +611,8 @@ GL_ENTRY(void, glMultiDrawElementsIndirectEXT, GLenum mode, GLenum type, const v GL_ENTRY(void, glMultiTexCoord4f, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) GL_ENTRY(void, glMultiTexCoord4x, GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q) GL_ENTRY(void, glMultiTexCoord4xOES, GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q) +GL_ENTRY(void, glNamedBufferStorageExternalEXT, GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags) +GL_ENTRY(void, glNamedBufferStorageMemEXT, GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset) GL_ENTRY(void, glNamedFramebufferSampleLocationsfvNV, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v) GL_ENTRY(void, glNormal3f, GLfloat nx, GLfloat ny, GLfloat nz) GL_ENTRY(void, glNormal3x, GLfixed nx, GLfixed ny, GLfixed nz) @@ -600,6 +662,7 @@ GL_ENTRY(void, glPointSizex, GLfixed size) GL_ENTRY(void, glPointSizexOES, GLfixed size) GL_ENTRY(void, glPolygonModeNV, GLenum face, GLenum mode) GL_ENTRY(void, glPolygonOffset, GLfloat factor, GLfloat units) +GL_ENTRY(void, glPolygonOffsetClampEXT, GLfloat factor, GLfloat units, GLfloat clamp) GL_ENTRY(void, glPolygonOffsetx, GLfixed factor, GLfixed units) GL_ENTRY(void, glPolygonOffsetxOES, GLfixed factor, GLfixed units) GL_ENTRY(void, glPopDebugGroup, void) @@ -619,10 +682,14 @@ GL_ENTRY(void, glProgramUniform1fEXT, GLuint program, GLint location, GLfloat v0 GL_ENTRY(void, glProgramUniform1fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glProgramUniform1fvEXT, GLuint program, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glProgramUniform1i, GLuint program, GLint location, GLint v0) +GL_ENTRY(void, glProgramUniform1i64NV, GLuint program, GLint location, GLint64EXT x) +GL_ENTRY(void, glProgramUniform1i64vNV, GLuint program, GLint location, GLsizei count, const GLint64EXT *value) GL_ENTRY(void, glProgramUniform1iEXT, GLuint program, GLint location, GLint v0) GL_ENTRY(void, glProgramUniform1iv, GLuint program, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glProgramUniform1ivEXT, GLuint program, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glProgramUniform1ui, GLuint program, GLint location, GLuint v0) +GL_ENTRY(void, glProgramUniform1ui64NV, GLuint program, GLint location, GLuint64EXT x) +GL_ENTRY(void, glProgramUniform1ui64vNV, GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) GL_ENTRY(void, glProgramUniform1uiEXT, GLuint program, GLint location, GLuint v0) GL_ENTRY(void, glProgramUniform1uiv, GLuint program, GLint location, GLsizei count, const GLuint *value) GL_ENTRY(void, glProgramUniform1uivEXT, GLuint program, GLint location, GLsizei count, const GLuint *value) @@ -631,10 +698,14 @@ GL_ENTRY(void, glProgramUniform2fEXT, GLuint program, GLint location, GLfloat v0 GL_ENTRY(void, glProgramUniform2fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glProgramUniform2fvEXT, GLuint program, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glProgramUniform2i, GLuint program, GLint location, GLint v0, GLint v1) +GL_ENTRY(void, glProgramUniform2i64NV, GLuint program, GLint location, GLint64EXT x, GLint64EXT y) +GL_ENTRY(void, glProgramUniform2i64vNV, GLuint program, GLint location, GLsizei count, const GLint64EXT *value) GL_ENTRY(void, glProgramUniform2iEXT, GLuint program, GLint location, GLint v0, GLint v1) GL_ENTRY(void, glProgramUniform2iv, GLuint program, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glProgramUniform2ivEXT, GLuint program, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glProgramUniform2ui, GLuint program, GLint location, GLuint v0, GLuint v1) +GL_ENTRY(void, glProgramUniform2ui64NV, GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y) +GL_ENTRY(void, glProgramUniform2ui64vNV, GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) GL_ENTRY(void, glProgramUniform2uiEXT, GLuint program, GLint location, GLuint v0, GLuint v1) GL_ENTRY(void, glProgramUniform2uiv, GLuint program, GLint location, GLsizei count, const GLuint *value) GL_ENTRY(void, glProgramUniform2uivEXT, GLuint program, GLint location, GLsizei count, const GLuint *value) @@ -643,10 +714,14 @@ GL_ENTRY(void, glProgramUniform3fEXT, GLuint program, GLint location, GLfloat v0 GL_ENTRY(void, glProgramUniform3fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glProgramUniform3fvEXT, GLuint program, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glProgramUniform3i, GLuint program, GLint location, GLint v0, GLint v1, GLint v2) +GL_ENTRY(void, glProgramUniform3i64NV, GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) +GL_ENTRY(void, glProgramUniform3i64vNV, GLuint program, GLint location, GLsizei count, const GLint64EXT *value) GL_ENTRY(void, glProgramUniform3iEXT, GLuint program, GLint location, GLint v0, GLint v1, GLint v2) GL_ENTRY(void, glProgramUniform3iv, GLuint program, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glProgramUniform3ivEXT, GLuint program, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glProgramUniform3ui, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) +GL_ENTRY(void, glProgramUniform3ui64NV, GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) +GL_ENTRY(void, glProgramUniform3ui64vNV, GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) GL_ENTRY(void, glProgramUniform3uiEXT, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) GL_ENTRY(void, glProgramUniform3uiv, GLuint program, GLint location, GLsizei count, const GLuint *value) GL_ENTRY(void, glProgramUniform3uivEXT, GLuint program, GLint location, GLsizei count, const GLuint *value) @@ -655,14 +730,20 @@ GL_ENTRY(void, glProgramUniform4fEXT, GLuint program, GLint location, GLfloat v0 GL_ENTRY(void, glProgramUniform4fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glProgramUniform4fvEXT, GLuint program, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glProgramUniform4i, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) +GL_ENTRY(void, glProgramUniform4i64NV, GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) +GL_ENTRY(void, glProgramUniform4i64vNV, GLuint program, GLint location, GLsizei count, const GLint64EXT *value) GL_ENTRY(void, glProgramUniform4iEXT, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) GL_ENTRY(void, glProgramUniform4iv, GLuint program, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glProgramUniform4ivEXT, GLuint program, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glProgramUniform4ui, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) +GL_ENTRY(void, glProgramUniform4ui64NV, GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) +GL_ENTRY(void, glProgramUniform4ui64vNV, GLuint program, GLint location, GLsizei count, const GLuint64EXT *value) GL_ENTRY(void, glProgramUniform4uiEXT, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) GL_ENTRY(void, glProgramUniform4uiv, GLuint program, GLint location, GLsizei count, const GLuint *value) GL_ENTRY(void, glProgramUniform4uivEXT, GLuint program, GLint location, GLsizei count, const GLuint *value) +GL_ENTRY(void, glProgramUniformHandleui64IMG, GLuint program, GLint location, GLuint64 value) GL_ENTRY(void, glProgramUniformHandleui64NV, GLuint program, GLint location, GLuint64 value) +GL_ENTRY(void, glProgramUniformHandleui64vIMG, GLuint program, GLint location, GLsizei count, const GLuint64 *values) GL_ENTRY(void, glProgramUniformHandleui64vNV, GLuint program, GLint location, GLsizei count, const GLuint64 *values) GL_ENTRY(void, glProgramUniformMatrix2fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) GL_ENTRY(void, glProgramUniformMatrix2fvEXT, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) @@ -730,13 +811,20 @@ GL_ENTRY(void, glScalex, GLfixed x, GLfixed y, GLfixed z) GL_ENTRY(void, glScalexOES, GLfixed x, GLfixed y, GLfixed z) GL_ENTRY(void, glScissor, GLint x, GLint y, GLsizei width, GLsizei height) GL_ENTRY(void, glScissorArrayvNV, GLuint first, GLsizei count, const GLint *v) +GL_ENTRY(void, glScissorArrayvOES, GLuint first, GLsizei count, const GLint *v) GL_ENTRY(void, glScissorIndexedNV, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) +GL_ENTRY(void, glScissorIndexedOES, GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) GL_ENTRY(void, glScissorIndexedvNV, GLuint index, const GLint *v) +GL_ENTRY(void, glScissorIndexedvOES, GLuint index, const GLint *v) GL_ENTRY(void, glSelectPerfMonitorCountersAMD, GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList) +GL_ENTRY(void, glSemaphoreParameterui64vEXT, GLuint semaphore, GLenum pname, const GLuint64 *params) GL_ENTRY(void, glSetFenceNV, GLuint fence, GLenum condition) GL_ENTRY(void, glShadeModel, GLenum mode) GL_ENTRY(void, glShaderBinary, GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length) GL_ENTRY(void, glShaderSource, GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length) +GL_ENTRY(void, glSignalSemaphoreEXT, GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts) +GL_ENTRY(void, glSignalVkFenceNV, GLuint64 vkFence) +GL_ENTRY(void, glSignalVkSemaphoreNV, GLuint64 vkSemaphore) GL_ENTRY(void, glStartTilingQCOM, GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask) GL_ENTRY(void, glStencilFillPathInstancedNV, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues) GL_ENTRY(void, glStencilFillPathNV, GLuint path, GLenum fillMode, GLuint mask) @@ -801,12 +889,21 @@ GL_ENTRY(void, glTexStorage3D, GLenum target, GLsizei levels, GLenum internalfor GL_ENTRY(void, glTexStorage3DEXT, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) GL_ENTRY(void, glTexStorage3DMultisample, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) GL_ENTRY(void, glTexStorage3DMultisampleOES, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) +GL_ENTRY(void, glTexStorageMem2DEXT, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset) +GL_ENTRY(void, glTexStorageMem2DMultisampleEXT, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) +GL_ENTRY(void, glTexStorageMem3DEXT, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset) +GL_ENTRY(void, glTexStorageMem3DMultisampleEXT, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) GL_ENTRY(void, glTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels) GL_ENTRY(void, glTexSubImage3D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels) GL_ENTRY(void, glTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels) +GL_ENTRY(void, glTextureFoveationParametersQCOM, GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea) GL_ENTRY(void, glTextureStorage1DEXT, GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) GL_ENTRY(void, glTextureStorage2DEXT, GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) GL_ENTRY(void, glTextureStorage3DEXT, GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) +GL_ENTRY(void, glTextureStorageMem2DEXT, GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset) +GL_ENTRY(void, glTextureStorageMem2DMultisampleEXT, GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) +GL_ENTRY(void, glTextureStorageMem3DEXT, GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset) +GL_ENTRY(void, glTextureStorageMem3DMultisampleEXT, GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset) GL_ENTRY(void, glTextureViewEXT, GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) GL_ENTRY(void, glTextureViewOES, GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) GL_ENTRY(void, glTransformFeedbackVaryings, GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode) @@ -817,29 +914,47 @@ GL_ENTRY(void, glTranslatexOES, GLfixed x, GLfixed y, GLfixed z) GL_ENTRY(void, glUniform1f, GLint location, GLfloat v0) GL_ENTRY(void, glUniform1fv, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glUniform1i, GLint location, GLint v0) +GL_ENTRY(void, glUniform1i64NV, GLint location, GLint64EXT x) +GL_ENTRY(void, glUniform1i64vNV, GLint location, GLsizei count, const GLint64EXT *value) GL_ENTRY(void, glUniform1iv, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glUniform1ui, GLint location, GLuint v0) +GL_ENTRY(void, glUniform1ui64NV, GLint location, GLuint64EXT x) +GL_ENTRY(void, glUniform1ui64vNV, GLint location, GLsizei count, const GLuint64EXT *value) GL_ENTRY(void, glUniform1uiv, GLint location, GLsizei count, const GLuint *value) GL_ENTRY(void, glUniform2f, GLint location, GLfloat v0, GLfloat v1) GL_ENTRY(void, glUniform2fv, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glUniform2i, GLint location, GLint v0, GLint v1) +GL_ENTRY(void, glUniform2i64NV, GLint location, GLint64EXT x, GLint64EXT y) +GL_ENTRY(void, glUniform2i64vNV, GLint location, GLsizei count, const GLint64EXT *value) GL_ENTRY(void, glUniform2iv, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glUniform2ui, GLint location, GLuint v0, GLuint v1) +GL_ENTRY(void, glUniform2ui64NV, GLint location, GLuint64EXT x, GLuint64EXT y) +GL_ENTRY(void, glUniform2ui64vNV, GLint location, GLsizei count, const GLuint64EXT *value) GL_ENTRY(void, glUniform2uiv, GLint location, GLsizei count, const GLuint *value) GL_ENTRY(void, glUniform3f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) GL_ENTRY(void, glUniform3fv, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glUniform3i, GLint location, GLint v0, GLint v1, GLint v2) +GL_ENTRY(void, glUniform3i64NV, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) +GL_ENTRY(void, glUniform3i64vNV, GLint location, GLsizei count, const GLint64EXT *value) GL_ENTRY(void, glUniform3iv, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glUniform3ui, GLint location, GLuint v0, GLuint v1, GLuint v2) +GL_ENTRY(void, glUniform3ui64NV, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) +GL_ENTRY(void, glUniform3ui64vNV, GLint location, GLsizei count, const GLuint64EXT *value) GL_ENTRY(void, glUniform3uiv, GLint location, GLsizei count, const GLuint *value) GL_ENTRY(void, glUniform4f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) GL_ENTRY(void, glUniform4fv, GLint location, GLsizei count, const GLfloat *value) GL_ENTRY(void, glUniform4i, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) +GL_ENTRY(void, glUniform4i64NV, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) +GL_ENTRY(void, glUniform4i64vNV, GLint location, GLsizei count, const GLint64EXT *value) GL_ENTRY(void, glUniform4iv, GLint location, GLsizei count, const GLint *value) GL_ENTRY(void, glUniform4ui, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) +GL_ENTRY(void, glUniform4ui64NV, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) +GL_ENTRY(void, glUniform4ui64vNV, GLint location, GLsizei count, const GLuint64EXT *value) GL_ENTRY(void, glUniform4uiv, GLint location, GLsizei count, const GLuint *value) GL_ENTRY(void, glUniformBlockBinding, GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) +GL_ENTRY(void, glUniformHandleui64IMG, GLint location, GLuint64 value) GL_ENTRY(void, glUniformHandleui64NV, GLint location, GLuint64 value) +GL_ENTRY(void, glUniformHandleui64vIMG, GLint location, GLsizei count, const GLuint64 *value) GL_ENTRY(void, glUniformHandleui64vNV, GLint location, GLsizei count, const GLuint64 *value) GL_ENTRY(void, glUniformMatrix2fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) GL_ENTRY(void, glUniformMatrix2x3fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) @@ -889,9 +1004,17 @@ GL_ENTRY(void, glVertexBindingDivisor, GLuint bindingindex, GLuint divisor) GL_ENTRY(void, glVertexPointer, GLint size, GLenum type, GLsizei stride, const void *pointer) GL_ENTRY(void, glViewport, GLint x, GLint y, GLsizei width, GLsizei height) GL_ENTRY(void, glViewportArrayvNV, GLuint first, GLsizei count, const GLfloat *v) +GL_ENTRY(void, glViewportArrayvOES, GLuint first, GLsizei count, const GLfloat *v) GL_ENTRY(void, glViewportIndexedfNV, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) +GL_ENTRY(void, glViewportIndexedfOES, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) GL_ENTRY(void, glViewportIndexedfvNV, GLuint index, const GLfloat *v) +GL_ENTRY(void, glViewportIndexedfvOES, GLuint index, const GLfloat *v) +GL_ENTRY(void, glViewportPositionWScaleNV, GLuint index, GLfloat xcoeff, GLfloat ycoeff) +GL_ENTRY(void, glViewportSwizzleNV, GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew) +GL_ENTRY(void, glWaitSemaphoreEXT, GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts) GL_ENTRY(void, glWaitSync, GLsync sync, GLbitfield flags, GLuint64 timeout) GL_ENTRY(void, glWaitSyncAPPLE, GLsync sync, GLbitfield flags, GLuint64 timeout) +GL_ENTRY(void, glWaitVkSemaphoreNV, GLuint64 vkSemaphore) GL_ENTRY(void, glWeightPathsNV, GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights) GL_ENTRY(void, glWeightPointerOES, GLint size, GLenum type, GLsizei stride, const void *pointer) +GL_ENTRY(void, glWindowRectanglesEXT, GLenum mode, GLsizei count, const GLint *box) diff --git a/opengl/libs/enums.in b/opengl/libs/enums.in index e052816e9c..d09004f5be 100644 --- a/opengl/libs/enums.in +++ b/opengl/libs/enums.in @@ -1223,6 +1223,8 @@ GL_ENUM(0x8823,GL_WRITEONLY_RENDERING_QCOM) GL_ENUM(0x9285,GL_BLEND_ADVANCED_COHERENT_KHR) GL_ENUM(0x82FB,GL_CONTEXT_RELEASE_BEHAVIOR_KHR) GL_ENUM(0x82FC,GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR) +GL_ENUM(0x91B0,GL_MAX_SHADER_COMPILER_THREADS_KHR) +GL_ENUM(0x91B1,GL_COMPLETION_STATUS_KHR) GL_ENUM(0x8D66,GL_SAMPLER_EXTERNAL_OES) GL_ENUM(0x93C0,GL_COMPRESSED_RGBA_ASTC_3x3x3_OES) GL_ENUM(0x93C1,GL_COMPRESSED_RGBA_ASTC_4x3x3_OES) @@ -1251,6 +1253,10 @@ GL_ENUM(0x82DD,GL_TEXTURE_VIEW_MIN_LAYER_OES) GL_ENUM(0x82DE,GL_TEXTURE_VIEW_NUM_LAYERS_OES) GL_ENUM(0x8DF6,GL_UNSIGNED_INT_10_10_10_2_OES) GL_ENUM(0x8DF7,GL_INT_10_10_10_2_OES) +GL_ENUM(0x825B,GL_MAX_VIEWPORTS_OES) +GL_ENUM(0x825C,GL_VIEWPORT_SUBPIXEL_BITS_OES) +GL_ENUM(0x825D,GL_VIEWPORT_BOUNDS_RANGE_OES) +GL_ENUM(0x825F,GL_VIEWPORT_INDEX_PROVOKING_VERTEX_OES) GL_ENUM(0x8BC0,GL_COUNTER_TYPE_AMD) GL_ENUM(0x8BC1,GL_COUNTER_RANGE_AMD) GL_ENUM(0x8BC2,GL_UNSIGNED_INT64_AMD) @@ -1288,6 +1294,14 @@ GL_ENUM(0x930F,GL_LOCATION_INDEX_EXT) GL_ENUM(0x88FC,GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT) GL_ENUM(0x821F,GL_BUFFER_IMMUTABLE_STORAGE_EXT) GL_ENUM(0x8220,GL_BUFFER_STORAGE_FLAGS_EXT) +GL_ENUM(0x8CA1,GL_LOWER_LEFT_EXT) +GL_ENUM(0x8CA2,GL_UPPER_LEFT_EXT) +GL_ENUM(0x935E,GL_NEGATIVE_ONE_TO_ONE_EXT) +GL_ENUM(0x935F,GL_ZERO_TO_ONE_EXT) +GL_ENUM(0x935C,GL_CLIP_ORIGIN_EXT) +GL_ENUM(0x935D,GL_CLIP_DEPTH_MODE_EXT) +GL_ENUM(0x82F9,GL_MAX_CULL_DISTANCES_EXT) +GL_ENUM(0x82FA,GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES_EXT) GL_ENUM(0x8A4F,GL_PROGRAM_PIPELINE_OBJECT_EXT) GL_ENUM(0x8B40,GL_PROGRAM_OBJECT_EXT) GL_ENUM(0x8B48,GL_SHADER_OBJECT_EXT) @@ -1298,10 +1312,25 @@ GL_ENUM(0x8864,GL_QUERY_COUNTER_BITS_EXT) GL_ENUM(0x88BF,GL_TIME_ELAPSED_EXT) GL_ENUM(0x8E28,GL_TIMESTAMP_EXT) GL_ENUM(0x8FBB,GL_GPU_DISJOINT_EXT) +GL_ENUM(0x9580,GL_TEXTURE_TILING_EXT) +GL_ENUM(0x9581,GL_DEDICATED_MEMORY_OBJECT_EXT) +GL_ENUM(0x959B,GL_PROTECTED_MEMORY_OBJECT_EXT) +GL_ENUM(0x9582,GL_NUM_TILING_TYPES_EXT) +GL_ENUM(0x9583,GL_TILING_TYPES_EXT) +GL_ENUM(0x9584,GL_OPTIMAL_TILING_EXT) +GL_ENUM(0x9585,GL_LINEAR_TILING_EXT) +GL_ENUM(0x9596,GL_NUM_DEVICE_UUIDS_EXT) +GL_ENUM(0x9597,GL_DEVICE_UUID_EXT) +GL_ENUM(0x9598,GL_DRIVER_UUID_EXT) +GL_ENUM(0x9586,GL_HANDLE_TYPE_OPAQUE_FD_EXT) +GL_ENUM(0x9599,GL_DEVICE_LUID_EXT) +GL_ENUM(0x959A,GL_DEVICE_NODE_MASK_EXT) GL_ENUM(0x90F0,GL_COLOR_ATTACHMENT_EXT) GL_ENUM(0x90F1,GL_MULTIVIEW_EXT) GL_ENUM(0x0C01,GL_DRAW_BUFFER_EXT) GL_ENUM(0x90F2,GL_MAX_MULTIVIEW_BUFFERS_EXT) +GL_ENUM(0x8E1B,GL_POLYGON_OFFSET_CLAMP_EXT) +GL_ENUM(0x8BFA,GL_TEXTURE_PROTECTED_EXT) GL_ENUM(0x8A54,GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT) GL_ENUM(0x8A55,GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT) GL_ENUM(0x8A56,GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT) @@ -1318,10 +1347,22 @@ GL_ENUM(0x8F98,GL_R16_SNORM_EXT) GL_ENUM(0x8F99,GL_RG16_SNORM_EXT) GL_ENUM(0x8F9B,GL_RGBA16_SNORM_EXT) GL_ENUM(0x8DB9,GL_FRAMEBUFFER_SRGB_EXT) +GL_ENUM(0x958D,GL_LAYOUT_GENERAL_EXT) +GL_ENUM(0x958E,GL_LAYOUT_COLOR_ATTACHMENT_EXT) +GL_ENUM(0x958F,GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT) +GL_ENUM(0x9590,GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT) +GL_ENUM(0x9591,GL_LAYOUT_SHADER_READ_ONLY_EXT) +GL_ENUM(0x9592,GL_LAYOUT_TRANSFER_SRC_EXT) +GL_ENUM(0x9593,GL_LAYOUT_TRANSFER_DST_EXT) +GL_ENUM(0x9530,GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT) +GL_ENUM(0x9531,GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT) GL_ENUM(0x8A52,GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT) GL_ENUM(0x8F63,GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT) GL_ENUM(0x8F67,GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT) GL_ENUM(0x8F64,GL_SHADER_PIXEL_LOCAL_STORAGE_EXT) +GL_ENUM(0x9650,GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_FAST_SIZE_EXT) +GL_ENUM(0x9651,GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_SIZE_EXT) +GL_ENUM(0x9652,GL_FRAMEBUFFER_INCOMPLETE_INSUFFICIENT_SHADER_COMBINED_LOCAL_STORAGE_EXT) GL_ENUM(0x91A6,GL_TEXTURE_SPARSE_EXT) GL_ENUM(0x91A7,GL_VIRTUAL_PAGE_SIZE_INDEX_EXT) GL_ENUM(0x91AA,GL_NUM_SPARSE_LEVELS_EXT) @@ -1333,6 +1374,23 @@ GL_ENUM(0x9198,GL_MAX_SPARSE_TEXTURE_SIZE_EXT) GL_ENUM(0x9199,GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT) GL_ENUM(0x919A,GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT) GL_ENUM(0x91A9,GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT) +GL_ENUM(0x8F69,GL_TEXTURE_ASTC_DECODE_PRECISION_EXT) +GL_ENUM(0x8E8C,GL_COMPRESSED_RGBA_BPTC_UNORM_EXT) +GL_ENUM(0x8E8D,GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT) +GL_ENUM(0x8E8E,GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT) +GL_ENUM(0x8E8F,GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT) +GL_ENUM(0x8DBB,GL_COMPRESSED_RED_RGTC1_EXT) +GL_ENUM(0x8DBC,GL_COMPRESSED_SIGNED_RED_RGTC1_EXT) +GL_ENUM(0x8DBD,GL_COMPRESSED_RED_GREEN_RGTC2_EXT) +GL_ENUM(0x8DBE,GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT) +GL_ENUM(0x8C4C,GL_COMPRESSED_SRGB_S3TC_DXT1_EXT) +GL_ENUM(0x8C4D,GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT) +GL_ENUM(0x8C4E,GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT) +GL_ENUM(0x8C4F,GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT) +GL_ENUM(0x9366,GL_TEXTURE_REDUCTION_MODE_EXT) +GL_ENUM(0x9367,GL_WEIGHTED_AVERAGE_EXT) +GL_ENUM(0x8FBF,GL_TEXTURE_FORMAT_SRGB_OVERRIDE_EXT) +GL_ENUM(0x8743,GL_MIRROR_CLAMP_TO_EDGE_EXT) GL_ENUM(0x822A,GL_R16_EXT) GL_ENUM(0x822C,GL_RG16_EXT) GL_ENUM(0x805B,GL_RGBA16_EXT) @@ -1343,7 +1401,17 @@ GL_ENUM(0x8FBE,GL_SRG8_EXT) GL_ENUM(0x8A48,GL_TEXTURE_SRGB_DECODE_EXT) GL_ENUM(0x8A49,GL_DECODE_EXT) GL_ENUM(0x8A4A,GL_SKIP_DECODE_EXT) +GL_ENUM(0x8F10,GL_INCLUSIVE_EXT) +GL_ENUM(0x8F11,GL_EXCLUSIVE_EXT) +GL_ENUM(0x8F12,GL_WINDOW_RECTANGLE_EXT) +GL_ENUM(0x8F13,GL_WINDOW_RECTANGLE_MODE_EXT) +GL_ENUM(0x8F14,GL_MAX_WINDOW_RECTANGLES_EXT) +GL_ENUM(0x8F15,GL_NUM_WINDOW_RECTANGLES_EXT) GL_ENUM(0x9260,GL_GCCSO_SHADER_BINARY_FJ) +GL_ENUM(0x913C,GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_AND_DOWNSAMPLE_IMG) +GL_ENUM(0x913D,GL_NUM_DOWNSAMPLE_SCALES_IMG) +GL_ENUM(0x913E,GL_DOWNSAMPLE_SCALES_IMG) +GL_ENUM(0x913F,GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SCALE_IMG) GL_ENUM(0x9130,GL_SGX_PROGRAM_BINARY_IMG) GL_ENUM(0x8C0A,GL_SGX_BINARY_IMG) GL_ENUM(0x9137,GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG) @@ -1351,6 +1419,8 @@ GL_ENUM(0x9138,GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG) GL_ENUM(0x9139,GL_CUBIC_IMG) GL_ENUM(0x913A,GL_CUBIC_MIPMAP_NEAREST_IMG) GL_ENUM(0x913B,GL_CUBIC_MIPMAP_LINEAR_IMG) +GL_ENUM(0x83FC,GL_BLACKHOLE_RENDER_INTEL) +GL_ENUM(0x83FE,GL_CONSERVATIVE_RASTERIZATION_INTEL) GL_ENUM(0x00000000,GL_PERFQUERY_SINGLE_CONTEXT_INTEL) GL_ENUM(0x00000001,GL_PERFQUERY_GLOBAL_CONTEXT_INTEL) GL_ENUM(0x83FB,GL_PERFQUERY_WAIT_INTEL) @@ -1371,6 +1441,7 @@ GL_ENUM(0x94FD,GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL) GL_ENUM(0x94FE,GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL) GL_ENUM(0x94FF,GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL) GL_ENUM(0x9500,GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL) +GL_ENUM(0x875F,GL_PROGRAM_BINARY_FORMAT_MESA) GL_ENUM(0x9281,GL_BLEND_OVERLAP_NV) GL_ENUM(0x9280,GL_BLEND_PREMULTIPLIED_SRC_NV) GL_ENUM(0x9284,GL_CONJOINT_NV) @@ -1401,6 +1472,11 @@ GL_ENUM(0x928C,GL_SRC_OUT_NV) GL_ENUM(0x9288,GL_SRC_OVER_NV) GL_ENUM(0x9282,GL_UNCORRELATED_NV) GL_ENUM(0x92A6,GL_VIVIDLIGHT_NV) +GL_ENUM(0x901C,GL_FACTOR_MIN_AMD) +GL_ENUM(0x901D,GL_FACTOR_MAX_AMD) +GL_ENUM(0x937C,GL_VIEWPORT_POSITION_W_SCALE_NV) +GL_ENUM(0x937D,GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV) +GL_ENUM(0x937E,GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV) GL_ENUM(0x8E13,GL_QUERY_WAIT_NV) GL_ENUM(0x8E14,GL_QUERY_NO_WAIT_NV) GL_ENUM(0x8E15,GL_QUERY_BY_REGION_WAIT_NV) @@ -1409,6 +1485,10 @@ GL_ENUM(0x9346,GL_CONSERVATIVE_RASTERIZATION_NV) GL_ENUM(0x9347,GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV) GL_ENUM(0x9348,GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV) GL_ENUM(0x9349,GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV) +GL_ENUM(0x9550,GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV) +GL_ENUM(0x954D,GL_CONSERVATIVE_RASTER_MODE_NV) +GL_ENUM(0x954E,GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV) +GL_ENUM(0x954F,GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV) GL_ENUM(0x8ED0,GL_COVERAGE_COMPONENT_NV) GL_ENUM(0x8ED1,GL_COVERAGE_COMPONENT4_NV) GL_ENUM(0x8ED2,GL_COVERAGE_ATTACHMENT_NV) @@ -1429,6 +1509,34 @@ GL_ENUM(0x932F,GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV) GL_ENUM(0x9330,GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV) GL_ENUM(0x9332,GL_COVERAGE_MODULATION_NV) GL_ENUM(0x9333,GL_COVERAGE_MODULATION_TABLE_SIZE_NV) +GL_ENUM(0x140E,GL_INT64_NV) +GL_ENUM(0x140F,GL_UNSIGNED_INT64_NV) +GL_ENUM(0x8FE0,GL_INT8_NV) +GL_ENUM(0x8FE1,GL_INT8_VEC2_NV) +GL_ENUM(0x8FE2,GL_INT8_VEC3_NV) +GL_ENUM(0x8FE3,GL_INT8_VEC4_NV) +GL_ENUM(0x8FE4,GL_INT16_NV) +GL_ENUM(0x8FE5,GL_INT16_VEC2_NV) +GL_ENUM(0x8FE6,GL_INT16_VEC3_NV) +GL_ENUM(0x8FE7,GL_INT16_VEC4_NV) +GL_ENUM(0x8FE9,GL_INT64_VEC2_NV) +GL_ENUM(0x8FEA,GL_INT64_VEC3_NV) +GL_ENUM(0x8FEB,GL_INT64_VEC4_NV) +GL_ENUM(0x8FEC,GL_UNSIGNED_INT8_NV) +GL_ENUM(0x8FED,GL_UNSIGNED_INT8_VEC2_NV) +GL_ENUM(0x8FEE,GL_UNSIGNED_INT8_VEC3_NV) +GL_ENUM(0x8FEF,GL_UNSIGNED_INT8_VEC4_NV) +GL_ENUM(0x8FF0,GL_UNSIGNED_INT16_NV) +GL_ENUM(0x8FF1,GL_UNSIGNED_INT16_VEC2_NV) +GL_ENUM(0x8FF2,GL_UNSIGNED_INT16_VEC3_NV) +GL_ENUM(0x8FF3,GL_UNSIGNED_INT16_VEC4_NV) +GL_ENUM(0x8FF5,GL_UNSIGNED_INT64_VEC2_NV) +GL_ENUM(0x8FF6,GL_UNSIGNED_INT64_VEC3_NV) +GL_ENUM(0x8FF7,GL_UNSIGNED_INT64_VEC4_NV) +GL_ENUM(0x8FF8,GL_FLOAT16_NV) +GL_ENUM(0x8FF9,GL_FLOAT16_VEC2_NV) +GL_ENUM(0x8FFA,GL_FLOAT16_VEC3_NV) +GL_ENUM(0x8FFB,GL_FLOAT16_VEC4_NV) GL_ENUM(0x9371,GL_MULTISAMPLES_NV) GL_ENUM(0x9372,GL_SUPERSAMPLE_SCALE_X_NV) GL_ENUM(0x9373,GL_SUPERSAMPLE_SCALE_Y_NV) @@ -1564,10 +1672,6 @@ GL_ENUM(0x8C46,GL_SLUMINANCE_NV) GL_ENUM(0x8C44,GL_SLUMINANCE_ALPHA_NV) GL_ENUM(0x8C47,GL_SLUMINANCE8_NV) GL_ENUM(0x8C45,GL_SLUMINANCE8_ALPHA8_NV) -GL_ENUM(0x8C4C,GL_COMPRESSED_SRGB_S3TC_DXT1_NV) -GL_ENUM(0x8C4D,GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV) -GL_ENUM(0x8C4E,GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV) -GL_ENUM(0x8C4F,GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV) GL_ENUM(0x88EE,GL_ETC1_SRGB8_NV) GL_ENUM(0x933D,GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV) GL_ENUM(0x933E,GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV) @@ -1576,15 +1680,30 @@ GL_ENUM(0x9340,GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV) GL_ENUM(0x9341,GL_PROGRAMMABLE_SAMPLE_LOCATION_NV) GL_ENUM(0x9342,GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV) GL_ENUM(0x9343,GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV) -GL_ENUM(0x825B,GL_MAX_VIEWPORTS_NV) -GL_ENUM(0x825C,GL_VIEWPORT_SUBPIXEL_BITS_NV) -GL_ENUM(0x825D,GL_VIEWPORT_BOUNDS_RANGE_NV) -GL_ENUM(0x825F,GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV) +GL_ENUM(0x9350,GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV) +GL_ENUM(0x9351,GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV) +GL_ENUM(0x9352,GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV) +GL_ENUM(0x9353,GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV) +GL_ENUM(0x9354,GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV) +GL_ENUM(0x9355,GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV) +GL_ENUM(0x9356,GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV) +GL_ENUM(0x9357,GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV) +GL_ENUM(0x9358,GL_VIEWPORT_SWIZZLE_X_NV) +GL_ENUM(0x9359,GL_VIEWPORT_SWIZZLE_Y_NV) +GL_ENUM(0x935A,GL_VIEWPORT_SWIZZLE_Z_NV) +GL_ENUM(0x935B,GL_VIEWPORT_SWIZZLE_W_NV) GL_ENUM(0x9630,GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR) GL_ENUM(0x9632,GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR) GL_ENUM(0x9631,GL_MAX_VIEWS_OVR) +GL_ENUM(0x9633,GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR) GL_ENUM(0x8FB0,GL_BINNING_CONTROL_HINT_QCOM) GL_ENUM(0x8FB1,GL_CPU_OPTIMIZED_QCOM) GL_ENUM(0x8FB2,GL_GPU_OPTIMIZED_QCOM) GL_ENUM(0x8FB3,GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM) +GL_ENUM(0x96A2,GL_FRAMEBUFFER_FETCH_NONCOHERENT_QCOM) +GL_ENUM(0x8BFB,GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM) +GL_ENUM(0x8BFC,GL_TEXTURE_FOVEATED_MIN_PIXEL_DENSITY_QCOM) +GL_ENUM(0x8BFD,GL_TEXTURE_FOVEATED_FEATURE_QUERY_QCOM) +GL_ENUM(0x8BFE,GL_TEXTURE_FOVEATED_NUM_FOCAL_POINTS_QUERY_QCOM) +GL_ENUM(0x8BFF,GL_FRAMEBUFFER_INCOMPLETE_FOVEATION_QCOM) GL_ENUM(0x8FC4,GL_SHADER_BINARY_VIV) diff --git a/opengl/libs/libGLESv2.map.txt b/opengl/libs/libGLESv2.map.txt index 1b0042aef5..787c8355a8 100644 --- a/opengl/libs/libGLESv2.map.txt +++ b/opengl/libs/libGLESv2.map.txt @@ -79,6 +79,7 @@ LIBGLESV2 { glFramebufferRenderbuffer; glFramebufferTexture2D; glFramebufferTexture2DMultisampleIMG; # introduced-mips=9 introduced-x86=9 + glFramebufferTexture2DMultisampleEXT; # introduced=28 glFramebufferTexture3DOES; glFrontFace; glGenBuffers; @@ -147,6 +148,7 @@ LIBGLESV2 { glReadPixels; glReleaseShaderCompiler; glRenderbufferStorage; + glRenderbufferStorageMultisampleEXT; # introduced=28 glRenderbufferStorageMultisampleIMG; # introduced-mips=9 introduced-x86=9 glSampleCoverage; glScissor; diff --git a/opengl/libs/libGLESv3.map.txt b/opengl/libs/libGLESv3.map.txt index 21f6cb665e..a7b17f453a 100644 --- a/opengl/libs/libGLESv3.map.txt +++ b/opengl/libs/libGLESv3.map.txt @@ -36,6 +36,8 @@ LIBGLESV3 { glBlendFunciEXT; # introduced=21 glBlitFramebuffer; glBufferData; + glBufferStorageEXT; # introduced=28 + glBufferStorageExternalEXT; # introduced=28 glBufferSubData; glCheckFramebufferStatus; glClear; @@ -110,6 +112,7 @@ LIBGLESV3 { glDrawRangeElementsBaseVertex; # introduced=24 glEGLImageTargetRenderbufferStorageOES; glEGLImageTargetTexture2DOES; + glEGLImageTargetTexStorageEXT; # introduced=28 glEnable; glEnableVertexAttribArray; glEnablei; # introduced=24 @@ -124,9 +127,12 @@ LIBGLESV3 { glFramebufferRenderbuffer; glFramebufferTexture; # introduced=24 glFramebufferTexture2D; + glFramebufferTexture2DMultisampleEXT; # introduced=28 glFramebufferTexture3DOES; glFramebufferTextureEXT; # introduced=21 glFramebufferTextureLayer; + glFramebufferTextureMultisampleMultiviewOVR; # introduced=28 + glFramebufferTextureMultiviewOVR; # introduced=28 glFrontFace; glGenBuffers; glGenFramebuffers; @@ -306,6 +312,7 @@ LIBGLESV3 { glReleaseShaderCompiler; glRenderbufferStorage; glRenderbufferStorageMultisample; + glRenderbufferStorageMultisampleEXT; # introduced=28 glResumeTransformFeedback; glSampleCoverage; glSampleMaski; # introduced=21 |