Update for Vulkan-Docs 1.2.141
authorJon Leech <oddhack@sonic.net>
Fri, 15 May 2020 11:54:44 +0000 (04:54 -0700)
committerJon Leech <devrel@oddhack.org>
Fri, 15 May 2020 11:55:11 +0000 (04:55 -0700)
include/vulkan/vulkan.hpp
include/vulkan/vulkan_core.h
registry/genvk.py
registry/reg.py
registry/validusage.json
registry/vk.xml
registry/vkconventions.py

index eb7f924..68c7cc0 100644 (file)
 #  if defined(__linux__) || defined(__APPLE__)
 #   include <dlfcn.h>
 #  endif
-
-#  if defined(_WIN32)
-#   include <windows.h>
-#  endif
 #endif
 
 #if 201711 <= __cpp_impl_three_way_comparison
@@ -83,7 +79,7 @@
 #endif
 
 
-static_assert( VK_HEADER_VERSION ==  140 , "Wrong VK_HEADER_VERSION!" );
+static_assert( VK_HEADER_VERSION ==  141 , "Wrong VK_HEADER_VERSION!" );
 
 // 32-bit vulkan is not typesafe for handles, so don't allow copy constructors on this platform by default.
 // To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
@@ -247,16 +243,52 @@ namespace VULKAN_HPP_NAMESPACE
       , m_ptr(list.begin())
     {}
 
-    template <typename Container>
-    ArrayProxy(Container const& container) VULKAN_HPP_NOEXCEPT
-      : m_count(static_cast<uint32_t>(container.size()))
-      , m_ptr(container.data())
+    template <size_t N>
+    ArrayProxy(std::array<T, N> const & data) VULKAN_HPP_NOEXCEPT
+      : m_count(N)
+      , m_ptr(data.data())
+    {}
+
+    template <size_t N, typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
+    ArrayProxy(std::array<typename std::remove_const<T>::type, N> const & data) VULKAN_HPP_NOEXCEPT
+      : m_count(N)
+      , m_ptr(data.data())
+    {}
+
+    template <size_t N>
+    ArrayProxy(std::array<T, N> & data) VULKAN_HPP_NOEXCEPT
+      : m_count(N)
+      , m_ptr(data.data())
+    {}
+
+    template <size_t N, typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
+    ArrayProxy(std::array<typename std::remove_const<T>::type, N> & data) VULKAN_HPP_NOEXCEPT
+      : m_count(N)
+      , m_ptr(data.data())
+    {}
+
+    template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
+    ArrayProxy(std::vector<T, Allocator> const & data) VULKAN_HPP_NOEXCEPT
+      : m_count(static_cast<uint32_t>(data.size()))
+      , m_ptr(data.data())
+    {}
+
+    template <class Allocator = std::allocator<typename std::remove_const<T>::type>, typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
+    ArrayProxy(std::vector<typename std::remove_const<T>::type, Allocator> const& data) VULKAN_HPP_NOEXCEPT
+      : m_count(static_cast<uint32_t>(data.size()))
+      , m_ptr(data.data())
     {}
 
-    template <typename Container>
-    ArrayProxy(Container & container) VULKAN_HPP_NOEXCEPT
-      : m_count(static_cast<uint32_t>(container.size()))
-      , m_ptr(container.data())
+    template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
+    ArrayProxy(std::vector<T, Allocator> & data) VULKAN_HPP_NOEXCEPT
+      : m_count(static_cast<uint32_t>(data.size()))
+      , m_ptr(data.data())
+    {}
+
+    template <class Allocator = std::allocator<typename std::remove_const<T>::type>, typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
+    ArrayProxy(std::vector<typename std::remove_const<T>::type, Allocator> & data) VULKAN_HPP_NOEXCEPT
+      : m_count(static_cast<uint32_t>(data.size()))
+      , m_ptr(data.data())
     {}
 
     const T * begin() const VULKAN_HPP_NOEXCEPT
@@ -4593,6 +4625,7 @@ namespace VULKAN_HPP_NAMESPACE
     eGoogleSwiftshader = VK_DRIVER_ID_GOOGLE_SWIFTSHADER,
     eGgpProprietary = VK_DRIVER_ID_GGP_PROPRIETARY,
     eBroadcomProprietary = VK_DRIVER_ID_BROADCOM_PROPRIETARY,
+    eMesaLlvmpipe = VK_DRIVER_ID_MESA_LLVMPIPE,
     eIntelOpenSourceMesa = VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR
   };
   using DriverIdKHR = DriverId;
@@ -4613,6 +4646,7 @@ namespace VULKAN_HPP_NAMESPACE
       case DriverId::eGoogleSwiftshader : return "GoogleSwiftshader";
       case DriverId::eGgpProprietary : return "GgpProprietary";
       case DriverId::eBroadcomProprietary : return "BroadcomProprietary";
+      case DriverId::eMesaLlvmpipe : return "MesaLlvmpipe";
       default: return "invalid";
     }
   }
@@ -8875,7 +8909,8 @@ namespace VULKAN_HPP_NAMESPACE
     eVIV = VK_VENDOR_ID_VIV,
     eVSI = VK_VENDOR_ID_VSI,
     eKazan = VK_VENDOR_ID_KAZAN,
-    eCodeplay = VK_VENDOR_ID_CODEPLAY
+    eCodeplay = VK_VENDOR_ID_CODEPLAY,
+    eMESA = VK_VENDOR_ID_MESA
   };
 
   VULKAN_HPP_INLINE std::string to_string( VendorId value )
@@ -8886,6 +8921,7 @@ namespace VULKAN_HPP_NAMESPACE
       case VendorId::eVSI : return "VSI";
       case VendorId::eKazan : return "Kazan";
       case VendorId::eCodeplay : return "Codeplay";
+      case VendorId::eMESA : return "MESA";
       default: return "invalid";
     }
   }
@@ -13422,6 +13458,11 @@ namespace VULKAN_HPP_NAMESPACE
     {
       return value;
     }
+
+    operator T&& () && VULKAN_HPP_NOEXCEPT
+    {
+      return std::move( value );
+    }
 #endif
   };
 
@@ -83683,26 +83724,52 @@ namespace VULKAN_HPP_NAMESPACE
   template <> struct isStructureChainValid<WriteDescriptorSet, WriteDescriptorSetInlineUniformBlockEXT>{ enum { value = true }; };
 
 #if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL
+#  if defined( _WIN32 )
+  namespace detail
+  {
+    extern "C" __declspec( dllimport ) void * __stdcall LoadLibraryA( char const * lpLibFileName );
+    extern "C" __declspec( dllimport ) int __stdcall FreeLibrary( void * hLibModule );
+    extern "C" __declspec( dllimport ) void * __stdcall GetProcAddress( void * hModule, char const * lpProcName );
+  }  // namespace detail
+#  endif
+
   class DynamicLoader
   {
   public:
-#ifdef VULKAN_HPP_NO_EXCEPTIONS
-    DynamicLoader() VULKAN_HPP_NOEXCEPT : m_success( false )
-#else
-    DynamicLoader() : m_success( false )
-#endif
+#  ifdef VULKAN_HPP_NO_EXCEPTIONS
+    DynamicLoader( std::string const & vulkanLibraryName = {} ) VULKAN_HPP_NOEXCEPT : m_success( false )
+#  else
+    DynamicLoader( std::string const & vulkanLibraryName = {} ) : m_success( false )
+#  endif
     {
-#if defined(__linux__)
-      m_library = dlopen( "libvulkan.so", RTLD_NOW | RTLD_LOCAL );
-#elif defined(__APPLE__)
-      m_library = dlopen( "libvulkan.dylib", RTLD_NOW | RTLD_LOCAL );
-#elif defined(_WIN32)
-      m_library = LoadLibrary( TEXT( "vulkan-1.dll" ) );
-#else
-      VULKAN_HPP_ASSERT( false && "unsupported platform" );
-#endif
+      if ( !vulkanLibraryName.empty() )
+      {
+#  if defined( __linux__ ) || defined( __APPLE__ )
+        m_library = dlopen( vulkanLibraryName.c_str(), RTLD_NOW | RTLD_LOCAL );
+#  elif defined( _WIN32 )
+        m_library = detail::LoadLibraryA( vulkanLibraryName.c_str() );
+#  else
+#    error unsupported platform
+#  endif
+      }
+      else
+      {
+#  if defined( __linux__ )
+        m_library = dlopen( "libvulkan.so", RTLD_NOW | RTLD_LOCAL );
+        if ( m_library == nullptr )
+        {
+          m_library = dlopen( "libvulkan.so.1", RTLD_NOW | RTLD_LOCAL );
+        }
+#  elif defined( __APPLE__ )
+        m_library = dlopen( "libvulkan.dylib", RTLD_NOW | RTLD_LOCAL );
+#  elif defined( _WIN32 )
+        m_library = detail::LoadLibraryA( "vulkan-1.dll" );
+#  else
+#    error unsupported platform
+#  endif
+      }
 
-      m_success = m_library != 0;
+      m_success = (m_library != nullptr);
 #ifndef VULKAN_HPP_NO_EXCEPTIONS
       if ( !m_success )
       {
@@ -83734,35 +83801,37 @@ namespace VULKAN_HPP_NAMESPACE
     {
       if ( m_library )
       {
-#if defined(__linux__) || defined(__APPLE__)
+#  if defined( __linux__ ) || defined( __APPLE__ )
         dlclose( m_library );
-#elif defined(_WIN32)
-        FreeLibrary( m_library );
-#endif
+#  elif defined( _WIN32 )
+        detail::FreeLibrary( m_library );
+#  else
+#    error unsupported platform
+#  endif
       }
     }
 
     template <typename T>
     T getProcAddress( const char* function ) const VULKAN_HPP_NOEXCEPT
     {
-#if defined(__linux__) || defined(__APPLE__)
+#  if defined( __linux__ ) || defined( __APPLE__ )
       return (T)dlsym( m_library, function );
-#elif defined(_WIN32)
-      return (T)GetProcAddress( m_library, function );
-#endif
+#  elif defined( _WIN32 )
+      return (T)detail::GetProcAddress( m_library, function );
+#  else
+#    error unsupported platform
+#  endif
     }
 
     bool success() const VULKAN_HPP_NOEXCEPT { return m_success; }
 
   private:
     bool m_success;
-#if defined(__linux__) || defined(__APPLE__)
-    void *m_library;
-#elif defined(_WIN32)
-    HMODULE m_library;
-#else
-#error unsupported platform
-#endif
+#  if defined( __linux__ ) || defined( __APPLE__ ) || defined( _WIN32 )
+    void * m_library;
+#  else
+#    error unsupported platform
+#  endif
   };
 #endif
 
index efd589f..db2e556 100644 (file)
@@ -44,7 +44,7 @@ extern "C" {
 #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
 #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
 // Version of this file
-#define VK_HEADER_VERSION 140
+#define VK_HEADER_VERSION 141
 
 // Complete version of this file
 #define VK_HEADER_VERSION_COMPLETE VK_MAKE_VERSION(1, 2, VK_HEADER_VERSION)
@@ -1431,6 +1431,7 @@ typedef enum VkVendorId {
     VK_VENDOR_ID_VSI = 0x10002,
     VK_VENDOR_ID_KAZAN = 0x10003,
     VK_VENDOR_ID_CODEPLAY = 0x10004,
+    VK_VENDOR_ID_MESA = 0x10005,
     VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF
 } VkVendorId;
 typedef VkFlags VkInstanceCreateFlags;
@@ -4885,6 +4886,7 @@ typedef enum VkDriverId {
     VK_DRIVER_ID_GOOGLE_SWIFTSHADER = 10,
     VK_DRIVER_ID_GGP_PROPRIETARY = 11,
     VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12,
+    VK_DRIVER_ID_MESA_LLVMPIPE = 13,
     VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY,
     VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE,
     VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV,
index 490fcdd..c7ef75d 100755 (executable)
@@ -166,12 +166,13 @@ def makeGenOpts(args):
             expandEnumerants  = False)
         ]
 
-    # API names to validate man/api spec includes & links
-    genOpts['vkapi.py'] = [
+    # Python representation of API information, used by scripts that
+    # don't need to load the full XML.
+    genOpts['api.py'] = [
           PyOutputGenerator,
           DocGeneratorOptions(
             conventions       = conventions,
-            filename          = 'vkapi.py',
+            filename          = 'api.py',
             directory         = directory,
             apiname           = 'vulkan',
             profile           = None,
@@ -180,7 +181,8 @@ def makeGenOpts(args):
             defaultExtensions = None,
             addExtensions     = addExtensionsPat,
             removeExtensions  = removeExtensionsPat,
-            emitExtensions    = emitExtensionsPat)
+            emitExtensions    = emitExtensionsPat,
+            reparentEnums     = False)
         ]
 
     # API validity files for spec
index 9c5cbc0..d0bd065 100755 (executable)
@@ -23,6 +23,16 @@ from collections import defaultdict, namedtuple
 from generator import OutputGenerator, GeneratorOptions, write
 
 
+def apiNameMatch(str, supported):
+    """Return whether a required api name matches a pattern specified for an
+    XML <feature> 'api' attribute or <extension> 'supported' attribute.
+
+    - str - api name such as 'vulkan' or 'openxr'
+    - supported - comma-separated list of XML API names"""
+
+    return (str is not None and str in supported.split(','))
+
+
 def matchAPIProfile(api, profile, elem):
     """Return whether an API and profile
     being generated matches an element's profile
@@ -1154,7 +1164,7 @@ class Registry:
         for key in self.apidict:
             fi = self.apidict[key]
             api = fi.elem.get('api')
-            if api == self.genOpts.apiname:
+            if apiNameMatch(self.genOpts.apiname, api):
                 apiMatch = True
                 if regVersions.match(fi.name):
                     # Matches API & version #s being generated. Mark for
@@ -1191,13 +1201,10 @@ class Registry:
             extName = ei.name
             include = False
 
-            # Include extension if defaultExtensions is not None and if the
-            # 'supported' attribute matches defaultExtensions. The regexp in
-            # 'supported' must exactly match defaultExtensions, so bracket
-            # it with ^(pat)$.
-            pat = '^(' + ei.elem.get('supported') + ')$'
-            if (self.genOpts.defaultExtensions
-                    and re.match(pat, self.genOpts.defaultExtensions)):
+            # Include extension if defaultExtensions is not None and is
+            # exactly matched by the 'supported' attribute.
+            if apiNameMatch(self.genOpts.defaultExtensions,
+                            ei.elem.get('supported')):
                 self.gen.logMsg('diag', 'Including extension',
                                 extName, "(defaultExtensions matches the 'supported' attribute)")
                 include = True
index 65e7565..ba31c97 100644 (file)
@@ -1,9 +1,9 @@
 {
   "version info": {
     "schema version": 2,
-    "api version": "1.2.140",
-    "comment": "from git branch: github-master commit: a79b923ed376c42e99ecdb9d2ad69a56fb850ddc",
-    "date": "2020-05-04 09:48:50Z"
+    "api version": "1.2.141",
+    "comment": "from git branch: github-master commit: 8bd1271c25ec56248494389b0cc2b6741cb28164",
+    "date": "2020-05-15 09:13:21Z"
   },
   "validation": {
     "vkGetInstanceProcAddr": {
     "vkGetRayTracingShaderGroupHandlesKHR": {
       "(VK_NV_ray_tracing,VK_KHR_ray_tracing)": [
         {
+          "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-04050",
+          "text": " <code>firstGroup</code> <strong class=\"purple\">must</strong> be less than the number of shader groups in <code>pipeline</code>"
+        },
+        {
           "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-firstGroup-02419",
-          "text": " The sum of <code>firstGroup</code> and <code>groupCount</code> <strong class=\"purple\">must</strong> be less than the number of shader groups in <code>pipeline</code>"
+          "text": " The sum of <code>firstGroup</code> and <code>groupCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of shader groups in <code>pipeline</code>"
         },
         {
           "vuid": "VUID-vkGetRayTracingShaderGroupHandlesKHR-dataSize-02420",
     "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR": {
       "(VK_NV_ray_tracing,VK_KHR_ray_tracing)+(VK_KHR_ray_tracing)": [
         {
+          "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-04051",
+          "text": " <code>firstGroup</code> <strong class=\"purple\">must</strong> be less than the number of shader groups in <code>pipeline</code>"
+        },
+        {
           "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-firstGroup-03483",
-          "text": " The sum of <code>firstGroup</code> and <code>groupCount</code> <strong class=\"purple\">must</strong> be less than the number of shader groups in <code>pipeline</code>"
+          "text": " The sum of <code>firstGroup</code> and <code>groupCount</code> <strong class=\"purple\">must</strong> be less than or equal to the number of shader groups in <code>pipeline</code>"
         },
         {
           "vuid": "VUID-vkGetRayTracingCaptureReplayShaderGroupHandlesKHR-dataSize-03484",
index 954f691..cbc430a 100644 (file)
@@ -157,7 +157,7 @@ server.
         <type category="define">// Vulkan 1.2 version number
 #define <name>VK_API_VERSION_1_2</name> <type>VK_MAKE_VERSION</type>(1, 2, 0)// Patch version should always be set to 0</type>
         <type category="define">// Version of this file
-#define <name>VK_HEADER_VERSION</name> 140</type>
+#define <name>VK_HEADER_VERSION</name> 141</type>
         <type category="define" requires="VK_HEADER_VERSION">// Complete version of this file
 #define <name>VK_HEADER_VERSION_COMPLETE</name> <type>VK_MAKE_VERSION</type>(1, 2, VK_HEADER_VERSION)</type>
 
@@ -5970,7 +5970,8 @@ typedef void <name>CAMetalLayer</name>;
         <enum value="0x10002" name="VK_VENDOR_ID_VSI"   comment="VeriSilicon vendor ID"/>
         <enum value="0x10003" name="VK_VENDOR_ID_KAZAN" comment="Kazan Software Renderer"/>
         <enum value="0x10004" name="VK_VENDOR_ID_CODEPLAY" comment="Codeplay Software Ltd. vendor ID"/>
-            <unused start="0x10005" comment="This is the next unused available Khronos vendor ID"/>
+        <enum value="0x10005" name="VK_VENDOR_ID_MESA"  comment="Mesa vendor ID"/>
+            <unused start="0x10006" comment="This is the next unused available Khronos vendor ID"/>
     </enums>
     <enums name="VkDriverId" type="enum">
         <comment>Driver IDs are now represented as enums instead of the old
@@ -5988,6 +5989,7 @@ typedef void <name>CAMetalLayer</name>;
         <enum value="10"      name="VK_DRIVER_ID_GOOGLE_SWIFTSHADER"            comment="Google LLC"/>
         <enum value="11"      name="VK_DRIVER_ID_GGP_PROPRIETARY"               comment="Google LLC"/>
         <enum value="12"      name="VK_DRIVER_ID_BROADCOM_PROPRIETARY"          comment="Broadcom Inc."/>
+        <enum value="13"      name="VK_DRIVER_ID_MESA_LLVMPIPE"                 comment="Mesa"/>
     </enums>
     <enums name="VkConditionalRenderingFlagBitsEXT" type="bitmask">
         <enum bitpos="0"    name="VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT"/>
@@ -13391,5 +13393,23 @@ typedef void <name>CAMetalLayer</name>;
                 <enum value="&quot;VK_EXT_extension_342&quot;"              name="VK_EXT_EXTENSION_342_EXTENSION_NAME"/>
             </require>
         </extension>
+        <extension name="VK_ARM_extension_343" number="343" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_ARM_EXTENSION_343_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_343&quot;"              name="VK_ARM_EXTENSION_343_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_extension_344" number="344" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_ARM_EXTENSION_344_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_344&quot;"              name="VK_ARM_EXTENSION_344_EXTENSION_NAME"/>
+            </require>
+        </extension>
+        <extension name="VK_ARM_extension_345" number="345" author="ARM" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
+            <require>
+                <enum value="0"                                             name="VK_ARM_EXTENSION_345_SPEC_VERSION"/>
+                <enum value="&quot;VK_ARM_extension_345&quot;"              name="VK_ARM_EXTENSION_345_EXTENSION_NAME"/>
+            </require>
+        </extension>
     </extensions>
 </registry>
index eebc792..f69dfc1 100644 (file)
@@ -131,11 +131,6 @@ class VulkanConventions(ConventionsBase):
             return None
 
     @property
-    def xml_supported_name_of_api(self):
-        """Return the supported= attribute used in API XML"""
-        return 'vulkan'
-
-    @property
     def api_prefix(self):
         """Return API token prefix"""
         return 'VK_'
@@ -195,7 +190,7 @@ class VulkanConventions(ConventionsBase):
     @property
     def extra_refpage_headers(self):
         """Return any extra text to add to refpage headers."""
-        return 'include::../config/attribs.txt[]'
+        return 'include::{config}/attribs.txt[]'
 
     @property
     def extension_index_prefixes(self):