Merge pull request #300 from billhollings/master
Include struct size parameter in VK_MVK_moltenvk extension functions that pass structs that might change size across extension versions.
This commit is contained in:
commit
e651841e67
@ -382,9 +382,10 @@ you can address the issue as follows:
|
||||
#include <MoltenVK/vk_mvk_moltenvk.h>
|
||||
...
|
||||
MVKConfiguration mvkConfig;
|
||||
vkGetMoltenVKConfigurationMVK(vkInstance, &mvkConfig);
|
||||
size_t appConfigSize = sizeof(mvkConfig);
|
||||
vkGetMoltenVKConfigurationMVK(vkInstance, &mvkConfig, &appConfigSize);
|
||||
mvkConfig.debugMode = true;
|
||||
vkSetMoltenVKConfigurationMVK(vkInstance, &mvkConfig);
|
||||
vkSetMoltenVKConfigurationMVK(vkInstance, &mvkConfig, &appConfigSize);
|
||||
|
||||
Performing these steps will enable debug mode in **MoltenVK**, which includes shader conversion
|
||||
logging, and causes both the incoming *SPIR-V* code and the converted *MSL* source code to be
|
||||
|
@ -17,7 +17,13 @@ MoltenVK 1.0.24
|
||||
|
||||
Released TBD
|
||||
|
||||
- Allocate MVKDescriptorSets from a pool within MVKDescriptorPool,
|
||||
- Include struct size parameter in VK_MVK_moltenvk extension functions that pass structs that
|
||||
might change size across extension versions.
|
||||
- Remove vkGetMoltenVKDeviceConfigurationMVK() & vkSetMoltenVKDeviceConfigurationMVK() functions.
|
||||
- Allocate MVKDescriptorSets from a pool within MVKDescriptorPool
|
||||
- Support copying between textures of compatible-sized formats
|
||||
- Support VK_FORMAT_A2B10G10R10_UNORM_PACKED vertex format
|
||||
- Build scripts support SRCROOT path containing spaces.
|
||||
|
||||
|
||||
MoltenVK 1.0.23
|
||||
|
@ -1 +1 @@
|
||||
e268a7b7bf799b92410f35f6fea29cedb021bac1
|
||||
7cca1899215bbb043914cc5ef74924dc7f189b64
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
@ -33,15 +33,20 @@
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
disableMainThreadChecker = "YES"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugXPCServices = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "NO"
|
||||
queueDebuggingEnabled = "No">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
@ -33,15 +33,20 @@
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
disableMainThreadChecker = "YES"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugXPCServices = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "NO"
|
||||
queueDebuggingEnabled = "No">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -54,7 +54,7 @@ extern "C" {
|
||||
#define MVK_VERSION MVK_MAKE_VERSION(MVK_VERSION_MAJOR, MVK_VERSION_MINOR, MVK_VERSION_PATCH)
|
||||
|
||||
|
||||
#define VK_MVK_MOLTENVK_SPEC_VERSION 10
|
||||
#define VK_MVK_MOLTENVK_SPEC_VERSION 11
|
||||
#define VK_MVK_MOLTENVK_EXTENSION_NAME "VK_MVK_moltenvk"
|
||||
|
||||
/**
|
||||
@ -71,6 +71,12 @@ extern "C" {
|
||||
* is compiled in Debug mode, and not present when compiled in Release mode. The initial values
|
||||
* of the other settings are determined by other build settings when MoltenVK is compiled.
|
||||
* See the description of the individual configuration structure members for more information.
|
||||
*
|
||||
* This structure may be extended as new features are added to MoltenVK. If you are linking to
|
||||
* an implementation of MoltenVK that was compiled from a different VK_MVK_MOLTENVK_SPEC_VERSION
|
||||
* than your app was, the size of this structure in your app may be larger or smaller than the
|
||||
* struct in MoltenVK. See the description of the vkGetMoltenVKConfigurationMVK() and
|
||||
* vkSetMoltenVKConfigurationMVK() functions for information about how to handle this.
|
||||
*/
|
||||
typedef struct {
|
||||
|
||||
@ -233,7 +239,16 @@ typedef struct {
|
||||
|
||||
} MVKConfiguration;
|
||||
|
||||
/** Features provided by the current implementation of Metal on the current device. */
|
||||
/**
|
||||
* Features provided by the current implementation of Metal on the current device. You can
|
||||
* retrieve a copy of this structure using the vkGetPhysicalDeviceMetalFeaturesMVK() function.
|
||||
*
|
||||
* This structure may be extended as new features are added to MoltenVK. If you are linking to
|
||||
* an implementation of MoltenVK that was compiled from a different VK_MVK_MOLTENVK_SPEC_VERSION
|
||||
* than your app was, the size of this structure in your app may be larger or smaller than the
|
||||
* struct in MoltenVK. See the description of the vkGetPhysicalDeviceMetalFeaturesMVK() function
|
||||
* for information about how to handle this.
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t mslVersion; /**< The version of the Metal Shading Language available on this device. The format of the integer is MMmmpp, with two decimal digts each for Major, minor, and patch version values (eg. MSL 1.2 would appear as 010200). */
|
||||
VkBool32 indirectDrawing; /**< If true, draw calls support parameters held in a GPU buffer. */
|
||||
@ -256,7 +271,16 @@ typedef struct {
|
||||
VkSampleCountFlags supportedSampleCounts; /**< A bitmask identifying the sample counts supported by the device. */
|
||||
} MVKPhysicalDeviceMetalFeatures;
|
||||
|
||||
/** MoltenVK swapchain performance statistics. */
|
||||
/**
|
||||
* MoltenVK swapchain performance statistics. You can retrieve a copy of this structure using
|
||||
* the vkGetSwapchainPerformanceMVK() function.
|
||||
*
|
||||
* This structure may be extended as new features are added to MoltenVK. If you are linking to
|
||||
* an implementation of MoltenVK that was compiled from a different VK_MVK_MOLTENVK_SPEC_VERSION
|
||||
* than your app was, the size of this structure in your app may be larger or smaller than the
|
||||
* struct in MoltenVK. See the description of the vkGetSwapchainPerformanceMVK() function for
|
||||
* information about how to handle this.
|
||||
*/
|
||||
typedef struct {
|
||||
double lastFrameInterval; /**< The time interval between this frame and the immediately previous frame, in milliseconds. */
|
||||
double averageFrameInterval; /**< The rolling average time interval between frames, in miliseconds. This value has less volatility than the lastFrameInterval value. */
|
||||
@ -296,7 +320,15 @@ typedef struct {
|
||||
MVKPerformanceTracker mtlQueueAccess; /** Create an MTLCommmandQueue or access an existing cached instance. */
|
||||
} MVKQueuePerformance;
|
||||
|
||||
/** MoltenVK performance. */
|
||||
/**
|
||||
* MoltenVK performance. You can retrieve a copy of this structure using the vkGetPerformanceStatisticsMVK() function.
|
||||
*
|
||||
* This structure may be extended as new features are added to MoltenVK. If you are linking to
|
||||
* an implementation of MoltenVK that was compiled from a different VK_MVK_MOLTENVK_SPEC_VERSION
|
||||
* than your app was, the size of this structure in your app may be larger or smaller than the
|
||||
* struct in MoltenVK. See the description of the vkGetPerformanceStatisticsMVK() function for
|
||||
* information about how to handle this.
|
||||
*/
|
||||
typedef struct {
|
||||
MVKShaderCompilationPerformance shaderCompilation; /** Shader compilations activities. */
|
||||
MVKPipelineCachePerformance pipelineCache; /** Pipeline cache activities. */
|
||||
@ -307,11 +339,11 @@ typedef struct {
|
||||
#pragma mark -
|
||||
#pragma mark Function types
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkGetMoltenVKConfigurationMVK)(VkDevice device, MVKConfiguration* pConfiguration);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkSetMoltenVKConfigurationMVK)(VkDevice device, MVKConfiguration* pConfiguration);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMetalFeaturesMVK)(VkPhysicalDevice physicalDevice, MVKPhysicalDeviceMetalFeatures* pMetalFeatures);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetSwapchainPerformanceMVK)(VkDevice device, VkSwapchainKHR swapchain, MVKSwapchainPerformance* pSwapchainPerf);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPerformanceStatisticsMVK)(VkDevice device, MVKPerformanceStatistics* pPerf);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMoltenVKConfigurationMVK)(VkInstance instance, MVKConfiguration* pConfiguration, size_t* pConfigurationSize);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkSetMoltenVKConfigurationMVK)(VkInstance instance, MVKConfiguration* pConfiguration, size_t* pConfigurationSize);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceMetalFeaturesMVK)(VkPhysicalDevice physicalDevice, MVKPhysicalDeviceMetalFeatures* pMetalFeatures, size_t* pMetalFeaturesSize);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainPerformanceMVK)(VkDevice device, VkSwapchainKHR swapchain, MVKSwapchainPerformance* pSwapchainPerf, size_t* pSwapchainPerfSize);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPerformanceStatisticsMVK)(VkDevice device, MVKPerformanceStatistics* pPerf, size_t* pPerfSize);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetVersionStringsMVK)(char* pMoltenVersionStringBuffer, uint32_t moltenVersionStringBufferLength, char* pVulkanVersionStringBuffer, uint32_t vulkanVersionStringBufferLength);
|
||||
|
||||
#ifdef __OBJC__
|
||||
@ -322,13 +354,6 @@ typedef VkResult (VKAPI_PTR *PFN_vkUseIOSurfaceMVK)(VkImage image, IOSurfaceRef
|
||||
typedef void (VKAPI_PTR *PFN_vkGetIOSurfaceMVK)(VkImage image, IOSurfaceRef* pIOSurface);
|
||||
#endif // __OBJC__
|
||||
|
||||
// Deprecated functions
|
||||
typedef MVKConfiguration MVKDeviceConfiguration;
|
||||
__attribute__((deprecated("Use PFN_vkGetMoltenVKConfigurationMVK instead.")))
|
||||
typedef void (VKAPI_PTR *PFN_vkGetMoltenVKDeviceConfigurationMVK)(VkDevice device, MVKConfiguration* pConfiguration);
|
||||
__attribute__((deprecated("Use PFN_vkSetMoltenVKConfigurationMVK instead.")))
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkSetMoltenVKDeviceConfigurationMVK)(VkDevice device, MVKConfiguration* pConfiguration);
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Function prototypes
|
||||
@ -338,16 +363,36 @@ typedef VkResult (VKAPI_PTR *PFN_vkSetMoltenVKDeviceConfigurationMVK)(VkDevice d
|
||||
/**
|
||||
* Populates the pConfiguration structure with the current MoltenVK configuration settings.
|
||||
*
|
||||
* To change a specific configuration value, call vkGetMoltenVKConfigurationMVK()
|
||||
* to retrieve the current configuration, make changes, and call
|
||||
* vkSetMoltenVKConfigurationMVK() to update all of the values.
|
||||
* To change a specific configuration value, call vkGetMoltenVKConfigurationMVK() to retrieve
|
||||
* the current configuration, make changes, and call vkSetMoltenVKConfigurationMVK() to
|
||||
* update all of the values.
|
||||
*
|
||||
* To be active, some configuration settings must be set before a VkDevice is created.
|
||||
* See the description of the MVKConfiguration members for more information.
|
||||
*
|
||||
* If you are linking to an implementation of MoltenVK that was compiled from a different
|
||||
* VK_MVK_MOLTENVK_SPEC_VERSION than your app was, the size of the MVKConfiguration structure
|
||||
* in your app may be larger or smaller than the same struct as expected by MoltenVK.
|
||||
*
|
||||
* When calling this function, set the value of *pConfigurationSize to sizeof(MVKConfiguration),
|
||||
* to tell MoltenVK the limit of the size of your MVKConfiguration structure. Upon return from
|
||||
* this function, the value of *pConfigurationSize will hold the actual number of bytes copied
|
||||
* into your passed MVKConfiguration structure, which will be the smaller of what your app
|
||||
* thinks is the size of MVKConfiguration, and what MoltenVK thinks it is. This represents the
|
||||
* safe access area within the structure for both MoltenVK and your app.
|
||||
*
|
||||
* If the size that MoltenVK expects for MVKConfiguration is different than the value passed in
|
||||
* *pConfigurationSize, this function will return VK_INCOMPLETE, otherwise it will return VK_SUCCESS.
|
||||
*
|
||||
* Although it is not necessary, you can use this function to determine in advance the value
|
||||
* that MoltenVK expects the size of MVKConfiguration to be by setting the value of pConfiguration
|
||||
* to NULL. In that case, this function will set *pConfigurationSize to the size that MoltenVK
|
||||
* expects MVKConfiguration to be.
|
||||
*/
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetMoltenVKConfigurationMVK(
|
||||
VkInstance instance,
|
||||
MVKConfiguration* pConfiguration);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMoltenVKConfigurationMVK(
|
||||
VkInstance instance,
|
||||
MVKConfiguration* pConfiguration,
|
||||
size_t* pConfigurationSize);
|
||||
|
||||
/**
|
||||
* Sets the MoltenVK configuration settings to those found in the pConfiguration structure.
|
||||
@ -358,35 +403,113 @@ VKAPI_ATTR void VKAPI_CALL vkGetMoltenVKConfigurationMVK(
|
||||
*
|
||||
* To be active, some configuration settings must be set before a VkDevice is created.
|
||||
* See the description of the MVKConfiguration members for more information.
|
||||
*
|
||||
* If you are linking to an implementation of MoltenVK that was compiled from a different
|
||||
* VK_MVK_MOLTENVK_SPEC_VERSION than your app was, the size of the MVKConfiguration structure
|
||||
* in your app may be larger or smaller than the same struct as expected by MoltenVK.
|
||||
*
|
||||
* When calling this function, set the value of *pConfigurationSize to sizeof(MVKConfiguration),
|
||||
* to tell MoltenVK the limit of the size of your MVKConfiguration structure. Upon return from
|
||||
* this function, the value of *pConfigurationSize will hold the actual number of bytes copied
|
||||
* out of your passed MVKConfiguration structure, which will be the smaller of what your app
|
||||
* thinks is the size of MVKConfiguration, and what MoltenVK thinks it is. This represents the
|
||||
* safe access area within the structure for both MoltenVK and your app.
|
||||
*
|
||||
* If the size that MoltenVK expects for MVKConfiguration is different than the value passed in
|
||||
* *pConfigurationSize, this function will return VK_INCOMPLETE, otherwise it will return VK_SUCCESS.
|
||||
*
|
||||
* Although it is not necessary, you can use this function to determine in advance the value
|
||||
* that MoltenVK expects the size of MVKConfiguration to be by setting the value of pConfiguration
|
||||
* to NULL. In that case, this function will set *pConfigurationSize to the size that MoltenVK
|
||||
* expects MVKConfiguration to be.
|
||||
*/
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkSetMoltenVKConfigurationMVK(
|
||||
VkInstance instance,
|
||||
MVKConfiguration* pConfiguration);
|
||||
VkInstance instance,
|
||||
const MVKConfiguration* pConfiguration,
|
||||
size_t* pConfigurationSize);
|
||||
|
||||
/**
|
||||
* Populates the pMetalFeatures structure with the Metal-specific features
|
||||
* supported by the specified physical device.
|
||||
*
|
||||
* If you are linking to an implementation of MoltenVK that was compiled from a different
|
||||
* VK_MVK_MOLTENVK_SPEC_VERSION than your app was, the size of the MVKPhysicalDeviceMetalFeatures
|
||||
* structure in your app may be larger or smaller than the same struct as expected by MoltenVK.
|
||||
*
|
||||
* When calling this function, set the value of *pMetalFeaturesSize to sizeof(MVKPhysicalDeviceMetalFeatures),
|
||||
* to tell MoltenVK the limit of the size of your MVKPhysicalDeviceMetalFeatures structure. Upon return from
|
||||
* this function, the value of *pMetalFeaturesSize will hold the actual number of bytes copied into your
|
||||
* passed MVKPhysicalDeviceMetalFeatures structure, which will be the smaller of what your app thinks is the
|
||||
* size of MVKPhysicalDeviceMetalFeatures, and what MoltenVK thinks it is. This represents the safe access
|
||||
* area within the structure for both MoltenVK and your app.
|
||||
*
|
||||
* If the size that MoltenVK expects for MVKPhysicalDeviceMetalFeatures is different than the value passed in
|
||||
* *pMetalFeaturesSize, this function will return VK_INCOMPLETE, otherwise it will return VK_SUCCESS.
|
||||
*
|
||||
* Although it is not necessary, you can use this function to determine in advance the value that MoltenVK
|
||||
* expects the size of MVKPhysicalDeviceMetalFeatures to be by setting the value of pMetalFeatures to NULL.
|
||||
* In that case, this function will set *pMetalFeaturesSize to the size that MoltenVK expects
|
||||
* MVKPhysicalDeviceMetalFeatures to be.
|
||||
*/
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMetalFeaturesMVK(
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceMetalFeaturesMVK(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
MVKPhysicalDeviceMetalFeatures* pMetalFeatures);
|
||||
MVKPhysicalDeviceMetalFeatures* pMetalFeatures,
|
||||
size_t* pMetalFeaturesSize);
|
||||
|
||||
/**
|
||||
* Populates the specified MVKSwapchainPerformance structure with
|
||||
* the current performance statistics for the specified swapchain.
|
||||
* Populates the pSwapchainPerf structure with the current performance statistics for the swapchain.
|
||||
*
|
||||
* If you are linking to an implementation of MoltenVK that was compiled from a different
|
||||
* VK_MVK_MOLTENVK_SPEC_VERSION than your app was, the size of the MVKSwapchainPerformance
|
||||
* structure in your app may be larger or smaller than the same struct as expected by MoltenVK.
|
||||
*
|
||||
* When calling this function, set the value of *pSwapchainPerfSize to sizeof(MVKSwapchainPerformance),
|
||||
* to tell MoltenVK the limit of the size of your MVKSwapchainPerformance structure. Upon return from
|
||||
* this function, the value of *pSwapchainPerfSize will hold the actual number of bytes copied into
|
||||
* your passed MVKSwapchainPerformance structure, which will be the smaller of what your app thinks
|
||||
* is the size of MVKSwapchainPerformance, and what MoltenVK thinks it is. This represents the safe
|
||||
* access area within the structure for both MoltenVK and your app.
|
||||
*
|
||||
* If the size that MoltenVK expects for MVKSwapchainPerformance is different than the value passed in
|
||||
* *pSwapchainPerfSize, this function will return VK_INCOMPLETE, otherwise it will return VK_SUCCESS.
|
||||
*
|
||||
* Although it is not necessary, you can use this function to determine in advance the value
|
||||
* that MoltenVK expects the size of MVKSwapchainPerformance to be by setting the value of
|
||||
* pSwapchainPerf to NULL. In that case, this function will set *pSwapchainPerfSize to the
|
||||
* size that MoltenVK expects MVKSwapchainPerformance to be.
|
||||
*/
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetSwapchainPerformanceMVK(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain,
|
||||
MVKSwapchainPerformance* pSwapchainPerf);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainPerformanceMVK(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain,
|
||||
MVKSwapchainPerformance* pSwapchainPerf,
|
||||
size_t* pSwapchainPerfSize);
|
||||
|
||||
/**
|
||||
* Populates the specified MVKPerformanceStatistics structure with
|
||||
* the current performance statistics for the specified device.
|
||||
* Populates the pPerf structure with the current performance statistics for the device.
|
||||
*
|
||||
* If you are linking to an implementation of MoltenVK that was compiled from a different
|
||||
* VK_MVK_MOLTENVK_SPEC_VERSION than your app was, the size of the MVKPerformanceStatistics
|
||||
* structure in your app may be larger or smaller than the same struct as expected by MoltenVK.
|
||||
*
|
||||
* When calling this function, set the value of *pPerfSize to sizeof(MVKPerformanceStatistics),
|
||||
* to tell MoltenVK the limit of the size of your MVKPerformanceStatistics structure. Upon return
|
||||
* from this function, the value of *pPerfSize will hold the actual number of bytes copied into
|
||||
* your passed MVKPerformanceStatistics structure, which will be the smaller of what your app
|
||||
* thinks is the size of MVKPerformanceStatistics, and what MoltenVK thinks it is. This
|
||||
* represents the safe access area within the structure for both MoltenVK and your app.
|
||||
*
|
||||
* If the size that MoltenVK expects for MVKPerformanceStatistics is different than the value passed
|
||||
* in *pPerfSize, this function will return VK_INCOMPLETE, otherwise it will return VK_SUCCESS.
|
||||
*
|
||||
* Although it is not necessary, you can use this function to determine in advance the value
|
||||
* that MoltenVK expects the size of MVKPerformanceStatistics to be by setting the value of
|
||||
* pPerf to NULL. In that case, this function will set *pPerfSize to the size that MoltenVK
|
||||
* expects MVKPerformanceStatistics to be.
|
||||
*/
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPerformanceStatisticsMVK(
|
||||
VkDevice device,
|
||||
MVKPerformanceStatistics* pPerf);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceStatisticsMVK(
|
||||
VkDevice device,
|
||||
MVKPerformanceStatistics* pPerf,
|
||||
size_t* pPerfSize);
|
||||
|
||||
/**
|
||||
* Returns a human readable version of the MoltenVK and Vulkan versions.
|
||||
@ -509,12 +632,6 @@ typedef uint32_t MVKMSLSPIRVHeader;
|
||||
#endif // VK_NO_PROTOTYPES
|
||||
|
||||
|
||||
// Deprecated functions
|
||||
__attribute__((deprecated("Use vkGetMoltenVKConfigurationMVK() instead.")))
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetMoltenVKDeviceConfigurationMVK(VkDevice device, MVKDeviceConfiguration* pConfiguration);
|
||||
__attribute__((deprecated("Use vkSetMoltenVKConfigurationMVK() instead.")))
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkSetMoltenVKDeviceConfigurationMVK(VkDevice device, MVKDeviceConfiguration* pConfiguration);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
@ -80,9 +80,6 @@ public:
|
||||
/** Populates the specified structure with the features of this device. */
|
||||
void getFeatures(VkPhysicalDeviceFeatures2* features);
|
||||
|
||||
/** Populates the specified structure with the Metal-specific features of this device. */
|
||||
void getMetalFeatures(MVKPhysicalDeviceMetalFeatures* mtlFeatures);
|
||||
|
||||
/** Populates the specified structure with the properties of this device. */
|
||||
void getProperties(VkPhysicalDeviceProperties* properties);
|
||||
|
||||
@ -229,6 +226,9 @@ public:
|
||||
|
||||
#pragma mark Metal
|
||||
|
||||
/** Populates the specified structure with the Metal-specific features of this device. */
|
||||
const MVKPhysicalDeviceMetalFeatures* getMetalFeatures() { return &_metalFeatures; }
|
||||
|
||||
/** Returns the underlying Metal device. */
|
||||
inline id<MTLDevice> getMTLDevice() { return _mtlDevice; }
|
||||
|
||||
|
@ -80,10 +80,6 @@ void MVKPhysicalDevice::getFeatures(VkPhysicalDeviceFeatures2* features) {
|
||||
}
|
||||
}
|
||||
|
||||
void MVKPhysicalDevice::getMetalFeatures(MVKPhysicalDeviceMetalFeatures* mtlFeatures) {
|
||||
if (mtlFeatures) { *mtlFeatures = _metalFeatures; }
|
||||
}
|
||||
|
||||
void MVKPhysicalDevice::getProperties(VkPhysicalDeviceProperties* properties) {
|
||||
if (properties) { *properties = _properties; }
|
||||
}
|
||||
@ -1626,7 +1622,7 @@ MVKDevice::MVKDevice(MVKPhysicalDevice* physicalDevice, const VkDeviceCreateInfo
|
||||
_physicalDevice = physicalDevice;
|
||||
_pMVKConfig = _physicalDevice->_mvkInstance->getMoltenVKConfiguration();
|
||||
_pFeatures = &_physicalDevice->_features;
|
||||
_pMetalFeatures = &_physicalDevice->_metalFeatures;
|
||||
_pMetalFeatures = _physicalDevice->getMetalFeatures();
|
||||
_pProperties = &_physicalDevice->_properties;
|
||||
_pMemoryProperties = &_physicalDevice->_memoryProperties;
|
||||
|
||||
|
@ -322,13 +322,6 @@ void MVKInstance::initProcAddrs() {
|
||||
ADD_PROC_ADDR(vkCreateMacOSSurfaceMVK);
|
||||
#endif
|
||||
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
// Deprecated functions
|
||||
ADD_PROC_ADDR(vkGetMoltenVKDeviceConfigurationMVK);
|
||||
ADD_PROC_ADDR(vkSetMoltenVKDeviceConfigurationMVK);
|
||||
#pragma clang diagnostic pop
|
||||
|
||||
}
|
||||
|
||||
void MVKInstance::logVersions() {
|
||||
|
@ -62,8 +62,8 @@ public:
|
||||
/** Returns whether the surface size has changed since the last time this function was called. */
|
||||
bool getHasSurfaceSizeChanged();
|
||||
|
||||
/** Populates the specified performance stats structure. */
|
||||
void getPerformanceStatistics(MVKSwapchainPerformance* pSwapchainPerf);
|
||||
/** Returns the specified performance stats structure. */
|
||||
const MVKSwapchainPerformance* getPerformanceStatistics() { return &_performanceStatistics; }
|
||||
|
||||
|
||||
#pragma mark Metal
|
||||
|
@ -157,10 +157,6 @@ void MVKSwapchain::markFrameInterval() {
|
||||
}
|
||||
}
|
||||
|
||||
void MVKSwapchain::getPerformanceStatistics(MVKSwapchainPerformance* pSwapchainPerf) {
|
||||
if (pSwapchainPerf) { *pSwapchainPerf = _performanceStatistics; }
|
||||
}
|
||||
|
||||
|
||||
#pragma mark Metal
|
||||
|
||||
|
@ -336,6 +336,21 @@ void mvkRemoveAllOccurances(C& container, T val) {
|
||||
container.erase(remove(container.begin(), container.end(), val), container.end());
|
||||
}
|
||||
|
||||
/**
|
||||
* If pSrc and pDst are not null, copies at most copySize bytes from the contents of the source
|
||||
* struct to the destination struct, and returns the number of bytes copied, which is the smaller
|
||||
* of copySize and the actual size of the struct. If either pSrc or pDst are null, returns zero.
|
||||
*/
|
||||
template<typename S>
|
||||
size_t mvkCopyStruct(S* pDst, const S* pSrc, size_t copySize = sizeof(S)) {
|
||||
size_t bytesCopied = 0;
|
||||
if (pSrc && pDst) {
|
||||
bytesCopied = std::min(copySize, sizeof(S));
|
||||
memcpy(pDst, pSrc, bytesCopied);
|
||||
}
|
||||
return bytesCopied;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value referenced by the destination pointer with the value referenced by
|
||||
* the source pointer, and returns whether the value was set.
|
||||
|
@ -22,50 +22,73 @@
|
||||
#include "MVKEnvironment.h"
|
||||
#include "MVKSwapchain.h"
|
||||
#include "MVKImage.h"
|
||||
#include "MVKFoundation.h"
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
// If pSrc and pDst are not null, copies at most *pCopySize bytes from the contents of the source struct
|
||||
// to the destination struct, and sets *pCopySize to the number of bytes copied, which is the smaller of
|
||||
// the original value of *pCopySize and the actual size of the struct. Returns VK_SUCCESS if the original
|
||||
// value of *pCopySize is the same as the actual size of the struct, or VK_INCOMPLETE otherwise.
|
||||
// If either pSrc or pDst are null, sets the value of *pCopySize to the size of the struct and returns VK_SUCCESS.
|
||||
template<typename S>
|
||||
VkResult mvkCopyStruct(S* pDst, const S* pSrc, size_t* pCopySize) {
|
||||
if (pSrc && pDst) {
|
||||
size_t origSize = *pCopySize;
|
||||
*pCopySize = mvkCopyStruct(pDst, pSrc, origSize);
|
||||
return (*pCopySize == origSize) ? VK_SUCCESS : VK_INCOMPLETE;
|
||||
} else {
|
||||
*pCopySize = sizeof(S);
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
MVK_PUBLIC_SYMBOL void vkGetMoltenVKConfigurationMVK(
|
||||
VkInstance instance,
|
||||
MVKConfiguration* pConfiguration) {
|
||||
MVK_PUBLIC_SYMBOL VkResult vkGetMoltenVKConfigurationMVK(
|
||||
VkInstance instance,
|
||||
MVKConfiguration* pConfiguration,
|
||||
size_t* pConfigurationSize) {
|
||||
|
||||
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
|
||||
if (pConfiguration) { *pConfiguration = *(MVKConfiguration*)mvkInst->getMoltenVKConfiguration(); }
|
||||
return mvkCopyStruct(pConfiguration, mvkInst->getMoltenVKConfiguration(), pConfigurationSize);
|
||||
}
|
||||
|
||||
MVK_PUBLIC_SYMBOL VkResult vkSetMoltenVKConfigurationMVK(
|
||||
VkInstance instance,
|
||||
MVKConfiguration* pConfiguration) {
|
||||
VkInstance instance,
|
||||
const MVKConfiguration* pConfiguration,
|
||||
size_t* pConfigurationSize) {
|
||||
|
||||
MVKInstance* mvkInst = MVKInstance::getMVKInstance(instance);
|
||||
if (pConfiguration) { mvkInst->setMoltenVKConfiguration(pConfiguration); }
|
||||
return VK_SUCCESS;
|
||||
return mvkCopyStruct((MVKConfiguration*)mvkInst->getMoltenVKConfiguration(), pConfiguration, pConfigurationSize);
|
||||
}
|
||||
|
||||
MVK_PUBLIC_SYMBOL void vkGetPhysicalDeviceMetalFeaturesMVK(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
MVKPhysicalDeviceMetalFeatures* pMetalFeatures) {
|
||||
MVK_PUBLIC_SYMBOL VkResult vkGetPhysicalDeviceMetalFeaturesMVK(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
MVKPhysicalDeviceMetalFeatures* pMetalFeatures,
|
||||
size_t* pMetalFeaturesSize) {
|
||||
|
||||
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
|
||||
mvkPD->getMetalFeatures(pMetalFeatures);
|
||||
MVKPhysicalDevice* mvkPD = MVKPhysicalDevice::getMVKPhysicalDevice(physicalDevice);
|
||||
return mvkCopyStruct(pMetalFeatures, mvkPD->getMetalFeatures(), pMetalFeaturesSize);
|
||||
}
|
||||
|
||||
MVK_PUBLIC_SYMBOL void vkGetSwapchainPerformanceMVK(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain,
|
||||
MVKSwapchainPerformance* pSwapchainPerf) {
|
||||
MVK_PUBLIC_SYMBOL VkResult vkGetSwapchainPerformanceMVK(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain,
|
||||
MVKSwapchainPerformance* pSwapchainPerf,
|
||||
size_t* pSwapchainPerfSize) {
|
||||
|
||||
MVKSwapchain* mvkSwapchain = (MVKSwapchain*)swapchain;
|
||||
mvkSwapchain->getPerformanceStatistics(pSwapchainPerf);
|
||||
MVKSwapchain* mvkSC = (MVKSwapchain*)swapchain;
|
||||
return mvkCopyStruct(pSwapchainPerf, mvkSC->getPerformanceStatistics(), pSwapchainPerfSize);
|
||||
}
|
||||
|
||||
MVK_PUBLIC_SYMBOL void vkGetPerformanceStatisticsMVK(
|
||||
VkDevice device,
|
||||
MVKPerformanceStatistics* pPerf) {
|
||||
MVK_PUBLIC_SYMBOL VkResult vkGetPerformanceStatisticsMVK(
|
||||
VkDevice device,
|
||||
MVKPerformanceStatistics* pPerf,
|
||||
size_t* pPerfSize) {
|
||||
|
||||
MVKDevice::getMVKDevice(device)->getPerformanceStatistics(pPerf);
|
||||
MVKPerformanceStatistics mvkPerf;
|
||||
MVKDevice::getMVKDevice(device)->getPerformanceStatistics(&mvkPerf);
|
||||
return mvkCopyStruct(pPerf, &mvkPerf, pPerfSize);
|
||||
}
|
||||
|
||||
MVK_PUBLIC_SYMBOL void vkGetVersionStringsMVK(
|
||||
@ -134,24 +157,3 @@ MVK_PUBLIC_SYMBOL void vkGetIOSurfaceMVK(
|
||||
MVKImage* mvkImg = (MVKImage*)image;
|
||||
*pIOSurface = mvkImg->getIOSurface();
|
||||
}
|
||||
|
||||
|
||||
// Deprecated functions
|
||||
MVK_PUBLIC_SYMBOL void vkGetMoltenVKDeviceConfigurationMVK(
|
||||
VkDevice device,
|
||||
MVKDeviceConfiguration* pConfiguration) {
|
||||
|
||||
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
|
||||
if (pConfiguration) { *pConfiguration = *(MVKConfiguration*)mvkDev->getInstance()->getMoltenVKConfiguration(); }
|
||||
}
|
||||
|
||||
MVK_PUBLIC_SYMBOL VkResult vkSetMoltenVKDeviceConfigurationMVK(
|
||||
VkDevice device,
|
||||
MVKDeviceConfiguration* pConfiguration) {
|
||||
|
||||
MVKDevice* mvkDev = MVKDevice::getMVKDevice(device);
|
||||
if (pConfiguration) { mvkDev->getInstance()->setMoltenVKConfiguration(pConfiguration); }
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
@ -39,9 +39,10 @@
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "1"
|
||||
allowLocationSimulation = "NO">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -39,9 +39,10 @@
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "1"
|
||||
allowLocationSimulation = "NO">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -36,14 +36,12 @@
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
disableMainThreadChecker = "YES"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
enableGPUFrameCaptureMode = "1"
|
||||
allowLocationSimulation = "NO">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
@ -36,12 +36,17 @@
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
disableMainThreadChecker = "YES"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugXPCServices = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "NO"
|
||||
queueDebuggingEnabled = "No">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
@ -36,12 +36,17 @@
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
disableMainThreadChecker = "YES"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugXPCServices = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "NO"
|
||||
queueDebuggingEnabled = "No">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
@ -41,10 +41,12 @@
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugXPCServices = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "NO">
|
||||
allowLocationSimulation = "NO"
|
||||
queueDebuggingEnabled = "No">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
@ -33,15 +33,20 @@
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
disableMainThreadChecker = "YES"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugXPCServices = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "YES"
|
||||
queueDebuggingEnabled = "No">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
@ -33,15 +33,20 @@
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
disableMainThreadChecker = "YES"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugXPCServices = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "NO"
|
||||
queueDebuggingEnabled = "No">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
@ -33,15 +33,20 @@
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
disableMainThreadChecker = "YES"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugXPCServices = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "YES"
|
||||
queueDebuggingEnabled = "No">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
@ -33,15 +33,20 @@
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
disableMainThreadChecker = "YES"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugXPCServices = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "NO"
|
||||
queueDebuggingEnabled = "No">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
version = "2.0">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
@ -42,15 +42,20 @@
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = ""
|
||||
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
|
||||
disableMainThreadChecker = "YES"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugDocumentVersioning = "NO"
|
||||
debugXPCServices = "NO"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
enableGPUFrameCaptureMode = "3"
|
||||
enableGPUValidationMode = "1"
|
||||
allowLocationSimulation = "NO"
|
||||
queueDebuggingEnabled = "No">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
|
@ -107,6 +107,7 @@ echo
|
||||
mkdir -p ${EXT_DIR}
|
||||
cd ${EXT_DIR}
|
||||
|
||||
|
||||
# ----------------- Cereal -------------------
|
||||
|
||||
REPO_NAME=cereal
|
||||
@ -118,8 +119,8 @@ update_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}
|
||||
|
||||
# ----------------- Vulkan-Headers -------------------
|
||||
|
||||
# When MoltenVK is built by something that already has a copy of the
|
||||
# Vulkan-Headers repo, use it by creating a symlink.
|
||||
# When MoltenVK is built by something that already has
|
||||
# a copy of this repo, use it by creating a symlink.
|
||||
if [ ! "$V_HEADERS_ROOT" = "" ]; then
|
||||
REPO_NAME=Vulkan-Headers
|
||||
rm -rf ${REPO_NAME}
|
||||
@ -135,8 +136,8 @@ fi
|
||||
|
||||
# ----------------- SPIRV-Cross -------------------
|
||||
|
||||
# When MoltenVK is built by something that already has a copy of the
|
||||
# Vulkan-Headers repo, use it by creating a symlink.
|
||||
# When MoltenVK is built by something that already has
|
||||
# a copy of this repo, use it by creating a symlink.
|
||||
if [ ! "$SPIRV_CROSS_ROOT" = "" ]; then
|
||||
REPO_NAME=SPIRV-Cross
|
||||
rm -rf ${REPO_NAME}
|
||||
@ -152,8 +153,8 @@ fi
|
||||
|
||||
# ----------------- glslang -------------------
|
||||
|
||||
# When MoltenVK is built by something that already has a copy of the
|
||||
# Vulkan-Headers repo, use it by creating a symlink.
|
||||
# When MoltenVK is built by something that already has
|
||||
# a copy of this repo, use it by creating a symlink.
|
||||
if [ ! "$GLSLANG_ROOT" = "" ]; then
|
||||
REPO_NAME=glslang
|
||||
rm -rf ${REPO_NAME}
|
||||
@ -181,6 +182,7 @@ REPO_REV=$(cat "../${EXT_REV_DIR}/${REPO_NAME}_repo_revision")
|
||||
|
||||
update_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}
|
||||
|
||||
|
||||
# ----------------- VulkanSamples -------------------
|
||||
|
||||
REPO_NAME=VulkanSamples
|
||||
@ -190,5 +192,7 @@ REPO_REV=$(cat "../${EXT_REV_DIR}/${REPO_NAME}_repo_revision")
|
||||
update_repo ${REPO_NAME} ${REPO_URL} ${REPO_REV}
|
||||
|
||||
|
||||
# ----------------- Cleanup -------------------
|
||||
|
||||
cd ..
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user