mirror of
https://github.com/shadps4-emu/ext-MoltenVK.git
synced 2026-01-31 01:05:17 +01:00
Update minimum CI to macOS 14 and minimum build to Xcode 15.
This commit is contained in:
4
.github/workflows/CI.yml
vendored
4
.github/workflows/CI.yml
vendored
@@ -30,8 +30,8 @@ jobs:
|
|||||||
select_xcode: false
|
select_xcode: false
|
||||||
private_api: true
|
private_api: true
|
||||||
# Legacy build. Up to 3 versions behind latest (or beta).
|
# Legacy build. Up to 3 versions behind latest (or beta).
|
||||||
- os: "macos-13"
|
- os: "macos-14"
|
||||||
xcode: "14.3.1"
|
xcode: "15.0.1"
|
||||||
platform: "macos"
|
platform: "macos"
|
||||||
upload_artifacts: false
|
upload_artifacts: false
|
||||||
select_xcode: true
|
select_xcode: true
|
||||||
|
|||||||
@@ -99,11 +99,6 @@ extern "C" {
|
|||||||
(__VISION_OS_VERSION_MAX_ALLOWED >= 20000) || \
|
(__VISION_OS_VERSION_MAX_ALLOWED >= 20000) || \
|
||||||
(__TV_OS_VERSION_MAX_ALLOWED >= 180000))
|
(__TV_OS_VERSION_MAX_ALLOWED >= 180000))
|
||||||
#endif
|
#endif
|
||||||
#ifndef MVK_XCODE_15
|
|
||||||
# define MVK_XCODE_15 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 140000) || \
|
|
||||||
(__IPHONE_OS_VERSION_MAX_ALLOWED >= 170000) || \
|
|
||||||
(__TV_OS_VERSION_MAX_ALLOWED >= 170000))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable use of private Metal APIs.
|
* Enable use of private Metal APIs.
|
||||||
|
|||||||
@@ -86,16 +86,10 @@ struct MVKResourceBinder {
|
|||||||
struct MVKVertexBufferBinder {
|
struct MVKVertexBufferBinder {
|
||||||
SEL _setBuffer;
|
SEL _setBuffer;
|
||||||
SEL _setOffset;
|
SEL _setOffset;
|
||||||
#if MVK_XCODE_15
|
|
||||||
SEL _setBufferDynamic;
|
SEL _setBufferDynamic;
|
||||||
SEL _setOffsetDynamic;
|
SEL _setOffsetDynamic;
|
||||||
#endif
|
|
||||||
template <typename T> static MVKVertexBufferBinder Create() {
|
template <typename T> static MVKVertexBufferBinder Create() {
|
||||||
#if MVK_XCODE_15
|
|
||||||
return { T::selSetBuffer(), T::selSetOffset(), T::selSetBufferDynamic(), T::selSetOffsetDynamic() };
|
return { T::selSetBuffer(), T::selSetOffset(), T::selSetBufferDynamic(), T::selSetOffsetDynamic() };
|
||||||
#else
|
|
||||||
return { T::selSetBuffer(), T::selSetOffset() };
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
void setBuffer(id<MTLCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger index) const {
|
void setBuffer(id<MTLCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger index) const {
|
||||||
reinterpret_cast<void(*)(id, SEL, id<MTLBuffer>, NSUInteger, NSUInteger)>(objc_msgSend)(encoder, _setBuffer, buffer, offset, index);
|
reinterpret_cast<void(*)(id, SEL, id<MTLBuffer>, NSUInteger, NSUInteger)>(objc_msgSend)(encoder, _setBuffer, buffer, offset, index);
|
||||||
@@ -104,18 +98,10 @@ struct MVKVertexBufferBinder {
|
|||||||
reinterpret_cast<void(*)(id, SEL, NSUInteger, NSUInteger)>(objc_msgSend)(encoder, _setOffset, offset, index);
|
reinterpret_cast<void(*)(id, SEL, NSUInteger, NSUInteger)>(objc_msgSend)(encoder, _setOffset, offset, index);
|
||||||
}
|
}
|
||||||
void setBufferDynamic(id<MTLCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger stride, NSUInteger index) const {
|
void setBufferDynamic(id<MTLCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger stride, NSUInteger index) const {
|
||||||
#if MVK_XCODE_15
|
|
||||||
reinterpret_cast<void(*)(id, SEL, id<MTLBuffer>, NSUInteger, NSUInteger, NSUInteger)>(objc_msgSend)(encoder, _setBufferDynamic, buffer, offset, stride, index);
|
reinterpret_cast<void(*)(id, SEL, id<MTLBuffer>, NSUInteger, NSUInteger, NSUInteger)>(objc_msgSend)(encoder, _setBufferDynamic, buffer, offset, stride, index);
|
||||||
#else
|
|
||||||
assert(0);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
void setBufferOffsetDynamic(id<MTLCommandEncoder> encoder, NSUInteger offset, NSUInteger stride, NSUInteger index) const {
|
void setBufferOffsetDynamic(id<MTLCommandEncoder> encoder, NSUInteger offset, NSUInteger stride, NSUInteger index) const {
|
||||||
#if MVK_XCODE_15
|
|
||||||
reinterpret_cast<void(*)(id, SEL, NSUInteger, NSUInteger, NSUInteger)>(objc_msgSend)(encoder, _setOffsetDynamic, offset, stride, index);
|
reinterpret_cast<void(*)(id, SEL, NSUInteger, NSUInteger, NSUInteger)>(objc_msgSend)(encoder, _setOffsetDynamic, offset, stride, index);
|
||||||
#else
|
|
||||||
assert(0);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
enum class Stage {
|
enum class Stage {
|
||||||
Vertex,
|
Vertex,
|
||||||
|
|||||||
@@ -88,10 +88,8 @@ struct MVKVertexBinder {
|
|||||||
static SEL selSetTexture() { return @selector(setVertexTexture:atIndex:); }
|
static SEL selSetTexture() { return @selector(setVertexTexture:atIndex:); }
|
||||||
static SEL selSetSampler() { return @selector(setVertexSamplerState:atIndex:); }
|
static SEL selSetSampler() { return @selector(setVertexSamplerState:atIndex:); }
|
||||||
static MVKResourceBinder::UseResource useResource() { return useResourceGraphics; }
|
static MVKResourceBinder::UseResource useResource() { return useResourceGraphics; }
|
||||||
#if MVK_XCODE_15
|
|
||||||
static SEL selSetBufferDynamic() { return @selector(setVertexBuffer:offset:attributeStride:atIndex:); }
|
static SEL selSetBufferDynamic() { return @selector(setVertexBuffer:offset:attributeStride:atIndex:); }
|
||||||
static SEL selSetOffsetDynamic() { return @selector(setVertexBufferOffset:attributeStride:atIndex:); }
|
static SEL selSetOffsetDynamic() { return @selector(setVertexBufferOffset:attributeStride:atIndex:); }
|
||||||
#endif
|
|
||||||
static void setBuffer(id<MTLRenderCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger index) {
|
static void setBuffer(id<MTLRenderCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger index) {
|
||||||
[encoder setVertexBuffer:buffer offset:offset atIndex:index];
|
[encoder setVertexBuffer:buffer offset:offset atIndex:index];
|
||||||
}
|
}
|
||||||
@@ -99,18 +97,10 @@ struct MVKVertexBinder {
|
|||||||
[encoder setVertexBufferOffset:offset atIndex:index];
|
[encoder setVertexBufferOffset:offset atIndex:index];
|
||||||
}
|
}
|
||||||
static void setBufferDynamic(id<MTLRenderCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger stride, NSUInteger index) {
|
static void setBufferDynamic(id<MTLRenderCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger stride, NSUInteger index) {
|
||||||
#if MVK_XCODE_15
|
|
||||||
[encoder setVertexBuffer:buffer offset:offset attributeStride:stride atIndex:index];
|
[encoder setVertexBuffer:buffer offset:offset attributeStride:stride atIndex:index];
|
||||||
#else
|
|
||||||
assert(0);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
static void setBufferOffsetDynamic(id<MTLRenderCommandEncoder> encoder, NSUInteger offset, NSUInteger stride, NSUInteger index) {
|
static void setBufferOffsetDynamic(id<MTLRenderCommandEncoder> encoder, NSUInteger offset, NSUInteger stride, NSUInteger index) {
|
||||||
#if MVK_XCODE_15
|
|
||||||
[encoder setVertexBufferOffset:offset attributeStride:stride atIndex:index];
|
[encoder setVertexBufferOffset:offset attributeStride:stride atIndex:index];
|
||||||
#else
|
|
||||||
assert(0);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
static void setBytes(id<MTLRenderCommandEncoder> encoder, const void* bytes, NSUInteger length, NSUInteger index) {
|
static void setBytes(id<MTLRenderCommandEncoder> encoder, const void* bytes, NSUInteger length, NSUInteger index) {
|
||||||
[encoder setVertexBytes:bytes length:length atIndex:index];
|
[encoder setVertexBytes:bytes length:length atIndex:index];
|
||||||
@@ -130,10 +120,8 @@ struct MVKComputeBinder {
|
|||||||
static SEL selSetTexture() { return @selector(setTexture:atIndex:); }
|
static SEL selSetTexture() { return @selector(setTexture:atIndex:); }
|
||||||
static SEL selSetSampler() { return @selector(setSamplerState:atIndex:); }
|
static SEL selSetSampler() { return @selector(setSamplerState:atIndex:); }
|
||||||
static MVKResourceBinder::UseResource useResource() { return useResourceCompute; }
|
static MVKResourceBinder::UseResource useResource() { return useResourceCompute; }
|
||||||
#if MVK_XCODE_15
|
|
||||||
static SEL selSetBufferDynamic() { return @selector(setBuffer:offset:attributeStride:atIndex:); }
|
static SEL selSetBufferDynamic() { return @selector(setBuffer:offset:attributeStride:atIndex:); }
|
||||||
static SEL selSetOffsetDynamic() { return @selector(setBufferOffset:attributeStride:atIndex:); }
|
static SEL selSetOffsetDynamic() { return @selector(setBufferOffset:attributeStride:atIndex:); }
|
||||||
#endif
|
|
||||||
static void setBuffer(id<MTLComputeCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger index) {
|
static void setBuffer(id<MTLComputeCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger index) {
|
||||||
[encoder setBuffer:buffer offset:offset atIndex:index];
|
[encoder setBuffer:buffer offset:offset atIndex:index];
|
||||||
}
|
}
|
||||||
@@ -141,18 +129,10 @@ struct MVKComputeBinder {
|
|||||||
[encoder setBufferOffset:offset atIndex:index];
|
[encoder setBufferOffset:offset atIndex:index];
|
||||||
}
|
}
|
||||||
static void setBufferDynamic(id<MTLComputeCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger stride, NSUInteger index) {
|
static void setBufferDynamic(id<MTLComputeCommandEncoder> encoder, id<MTLBuffer> buffer, NSUInteger offset, NSUInteger stride, NSUInteger index) {
|
||||||
#if MVK_XCODE_15
|
|
||||||
[encoder setBuffer:buffer offset:offset attributeStride:stride atIndex:index];
|
[encoder setBuffer:buffer offset:offset attributeStride:stride atIndex:index];
|
||||||
#else
|
|
||||||
assert(0);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
static void setBufferOffsetDynamic(id<MTLComputeCommandEncoder> encoder, NSUInteger offset, NSUInteger stride, NSUInteger index) {
|
static void setBufferOffsetDynamic(id<MTLComputeCommandEncoder> encoder, NSUInteger offset, NSUInteger stride, NSUInteger index) {
|
||||||
#if MVK_XCODE_15
|
|
||||||
[encoder setBufferOffset:offset attributeStride:stride atIndex:index];
|
[encoder setBufferOffset:offset attributeStride:stride atIndex:index];
|
||||||
#else
|
|
||||||
assert(0);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
static void setBytes(id<MTLComputeCommandEncoder> encoder, const void* bytes, NSUInteger length, NSUInteger index) {
|
static void setBytes(id<MTLComputeCommandEncoder> encoder, const void* bytes, NSUInteger length, NSUInteger index) {
|
||||||
[encoder setBytes:bytes length:length atIndex:index];
|
[encoder setBytes:bytes length:length atIndex:index];
|
||||||
|
|||||||
@@ -266,10 +266,8 @@ id<MTLTexture> MVKBufferView::getMTLTexture() {
|
|||||||
MTLTextureUsage usage = MTLTextureUsageShaderRead;
|
MTLTextureUsage usage = MTLTextureUsageShaderRead;
|
||||||
if ( mvkIsAnyFlagEnabled(_usage, VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT) ) {
|
if ( mvkIsAnyFlagEnabled(_usage, VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT) ) {
|
||||||
usage |= MTLTextureUsageShaderWrite;
|
usage |= MTLTextureUsageShaderWrite;
|
||||||
#if MVK_XCODE_15
|
|
||||||
if (getMetalFeatures().nativeTextureAtomics && (_mtlPixelFormat == MTLPixelFormatR32Sint || _mtlPixelFormat == MTLPixelFormatR32Uint))
|
if (getMetalFeatures().nativeTextureAtomics && (_mtlPixelFormat == MTLPixelFormatR32Sint || _mtlPixelFormat == MTLPixelFormatR32Uint))
|
||||||
usage |= MTLTextureUsageShaderAtomic;
|
usage |= MTLTextureUsageShaderAtomic;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
id<MTLBuffer> mtlBuff = _buffer->getMTLBuffer();
|
id<MTLBuffer> mtlBuff = _buffer->getMTLBuffer();
|
||||||
VkDeviceSize mtlBuffOffset = _buffer->getMTLBufferOffset() + _offset;
|
VkDeviceSize mtlBuffOffset = _buffer->getMTLBufferOffset() + _offset;
|
||||||
|
|||||||
@@ -106,9 +106,7 @@ MVKMTLDeviceCapabilities::MVKMTLDeviceCapabilities(id<MTLDevice> mtlDev) {
|
|||||||
supportsApple6 = supportsGPUFam(Apple6, mtlDev);
|
supportsApple6 = supportsGPUFam(Apple6, mtlDev);
|
||||||
supportsApple7 = supportsGPUFam(Apple7, mtlDev);
|
supportsApple7 = supportsGPUFam(Apple7, mtlDev);
|
||||||
supportsApple8 = supportsGPUFam(Apple8, mtlDev);
|
supportsApple8 = supportsGPUFam(Apple8, mtlDev);
|
||||||
#if MVK_XCODE_15 && !MVK_TVOS && !MVK_VISIONOS
|
|
||||||
supportsApple9 = supportsGPUFam(Apple9, mtlDev);
|
supportsApple9 = supportsGPUFam(Apple9, mtlDev);
|
||||||
#endif
|
|
||||||
#if MVK_XCODE_26
|
#if MVK_XCODE_26
|
||||||
supportsApple10 = supportsGPUFam(Apple10, mtlDev);
|
supportsApple10 = supportsGPUFam(Apple10, mtlDev);
|
||||||
#endif
|
#endif
|
||||||
@@ -2446,11 +2444,9 @@ void MVKPhysicalDevice::initMetalFeatures() {
|
|||||||
_metalFeatures.multisampleArrayTextures = !MVK_TVOS || mvkOSVersionIsAtLeast(16.0);
|
_metalFeatures.multisampleArrayTextures = !MVK_TVOS || mvkOSVersionIsAtLeast(16.0);
|
||||||
_metalFeatures.nativeTextureSwizzle = true;
|
_metalFeatures.nativeTextureSwizzle = true;
|
||||||
|
|
||||||
#if MVK_XCODE_15
|
|
||||||
// Dynamic vertex stride needs to have everything aligned - compiled with support for vertex stride calls, and supported by both runtime OS and GPU.
|
// Dynamic vertex stride needs to have everything aligned - compiled with support for vertex stride calls, and supported by both runtime OS and GPU.
|
||||||
_metalFeatures.dynamicVertexStride = mvkOSVersionIsAtLeast(14.0, 17.0, 1.0) && (supportsMTLGPUFamily(Apple4) || supportsMTLGPUFamily(Mac2));
|
_metalFeatures.dynamicVertexStride = mvkOSVersionIsAtLeast(14.0, 17.0, 1.0) && (supportsMTLGPUFamily(Apple4) || supportsMTLGPUFamily(Mac2));
|
||||||
_metalFeatures.nativeTextureAtomics = mvkOSVersionIsAtLeast(14.0, 17.0, 1.0) && (supportsMTLGPUFamily(Metal3) || supportsMTLGPUFamily(Apple6) || supportsMTLGPUFamily(Mac2));
|
_metalFeatures.nativeTextureAtomics = mvkOSVersionIsAtLeast(14.0, 17.0, 1.0) && (supportsMTLGPUFamily(Metal3) || supportsMTLGPUFamily(Apple6) || supportsMTLGPUFamily(Mac2));
|
||||||
#endif
|
|
||||||
|
|
||||||
if (supportsMTLGPUFamily(Mac2)) {
|
if (supportsMTLGPUFamily(Mac2)) {
|
||||||
_metalFeatures.mtlBufferAlignment = 256;
|
_metalFeatures.mtlBufferAlignment = 256;
|
||||||
@@ -2581,13 +2577,10 @@ void MVKPhysicalDevice::initMetalFeatures() {
|
|||||||
setMSLVersion(3, 2);
|
setMSLVersion(3, 2);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
#if MVK_XCODE_15
|
|
||||||
if ( mvkOSVersionIsAtLeast(14.0, 17.0, 1.0) ) {
|
if ( mvkOSVersionIsAtLeast(14.0, 17.0, 1.0) ) {
|
||||||
_metalFeatures.mslVersionEnum = MTLLanguageVersion3_1;
|
_metalFeatures.mslVersionEnum = MTLLanguageVersion3_1;
|
||||||
setMSLVersion(3, 1);
|
setMSLVersion(3, 1);
|
||||||
} else
|
} else if ( mvkOSVersionIsAtLeast(13.0, 16.0, 1.0) ) {
|
||||||
#endif
|
|
||||||
if ( mvkOSVersionIsAtLeast(13.0, 16.0, 1.0) ) {
|
|
||||||
_metalFeatures.mslVersionEnum = MTLLanguageVersion3_0;
|
_metalFeatures.mslVersionEnum = MTLLanguageVersion3_0;
|
||||||
setMSLVersion(3, 0);
|
setMSLVersion(3, 0);
|
||||||
} else if ( mvkOSVersionIsAtLeast(12.0, 15.0, 1.0) ) {
|
} else if ( mvkOSVersionIsAtLeast(12.0, 15.0, 1.0) ) {
|
||||||
@@ -3397,11 +3390,9 @@ uint64_t MVKPhysicalDevice::getVRAMSize() {
|
|||||||
|
|
||||||
// If possible, retrieve from the MTLDevice, otherwise from available memory size, or a fixed conservative estimate.
|
// If possible, retrieve from the MTLDevice, otherwise from available memory size, or a fixed conservative estimate.
|
||||||
uint64_t MVKPhysicalDevice::getRecommendedMaxWorkingSetSize() {
|
uint64_t MVKPhysicalDevice::getRecommendedMaxWorkingSetSize() {
|
||||||
#if MVK_XCODE_15 || MVK_MACOS
|
|
||||||
if ( [_mtlDevice respondsToSelector: @selector(recommendedMaxWorkingSetSize)]) {
|
if ( [_mtlDevice respondsToSelector: @selector(recommendedMaxWorkingSetSize)]) {
|
||||||
return _mtlDevice.recommendedMaxWorkingSetSize;
|
return _mtlDevice.recommendedMaxWorkingSetSize;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
uint64_t freeMem = mvkGetAvailableMemorySize();
|
uint64_t freeMem = mvkGetAvailableMemorySize();
|
||||||
return freeMem ? freeMem : 256 * MEBI;
|
return freeMem ? freeMem : 256 * MEBI;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1666,10 +1666,6 @@ bool MVKGraphicsPipeline::addFragmentShaderToPipeline(MTLRenderPipelineDescripto
|
|||||||
return verifyImplicitBuffers(kMVKShaderStageFragment);
|
return verifyImplicitBuffers(kMVKShaderStageFragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !MVK_XCODE_15
|
|
||||||
static const NSUInteger MTLBufferLayoutStrideDynamic = NSUIntegerMax;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
bool MVKGraphicsPipeline::addVertexInputToPipeline(T* inputDesc,
|
bool MVKGraphicsPipeline::addVertexInputToPipeline(T* inputDesc,
|
||||||
const VkPipelineVertexInputStateCreateInfo* pVI,
|
const VkPipelineVertexInputStateCreateInfo* pVI,
|
||||||
|
|||||||
@@ -54,11 +54,6 @@ using namespace std;
|
|||||||
# define MTLPixelFormatBGRG422 MTLPixelFormatInvalid
|
# define MTLPixelFormatBGRG422 MTLPixelFormatInvalid
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !MVK_XCODE_15
|
|
||||||
# define MTLVertexFormatFloatRG11B10 MTLVertexFormatInvalid
|
|
||||||
# define MTLVertexFormatFloatRGB9E5 MTLVertexFormatInvalid
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
#pragma mark MVKPixelFormats
|
#pragma mark MVKPixelFormats
|
||||||
@@ -627,11 +622,9 @@ MTLTextureUsage MVKPixelFormats::getMTLTextureUsage(VkImageUsageFlags vkImageUsa
|
|||||||
mvkEnableFlags(mtlUsage, MTLTextureUsageShaderWrite);
|
mvkEnableFlags(mtlUsage, MTLTextureUsageShaderWrite);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MVK_XCODE_15
|
|
||||||
if (supportAtomics && (mtlFormat == MTLPixelFormatR32Uint || mtlFormat == MTLPixelFormatR32Sint)) {
|
if (supportAtomics && (mtlFormat == MTLPixelFormatR32Uint || mtlFormat == MTLPixelFormatR32Sint)) {
|
||||||
mvkEnableFlags(mtlUsage, MTLTextureUsageShaderAtomic);
|
mvkEnableFlags(mtlUsage, MTLTextureUsageShaderAtomic);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
// Clearing a linear image may use shader writes.
|
// Clearing a linear image may use shader writes.
|
||||||
if (mvkIsAnyFlagEnabled(vkImageUsageFlags, (VK_IMAGE_USAGE_TRANSFER_DST_BIT)) &&
|
if (mvkIsAnyFlagEnabled(vkImageUsageFlags, (VK_IMAGE_USAGE_TRANSFER_DST_BIT)) &&
|
||||||
|
|||||||
@@ -81,12 +81,9 @@ bool mvk::compile(const string& mslSourceCode,
|
|||||||
mslVerEnum = MTLLanguageVersion3_2;
|
mslVerEnum = MTLLanguageVersion3_2;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
#if MVK_XCODE_15
|
|
||||||
if (mslVer(3, 1, 0)) {
|
if (mslVer(3, 1, 0)) {
|
||||||
mslVerEnum = MTLLanguageVersion3_1;
|
mslVerEnum = MTLLanguageVersion3_1;
|
||||||
} else
|
} else if (mslVer(3, 0, 0)) {
|
||||||
#endif
|
|
||||||
if (mslVer(3, 0, 0)) {
|
|
||||||
mslVerEnum = MTLLanguageVersion3_0;
|
mslVerEnum = MTLLanguageVersion3_0;
|
||||||
} else if (mslVer(2, 4, 0)) {
|
} else if (mslVer(2, 4, 0)) {
|
||||||
mslVerEnum = MTLLanguageVersion2_4;
|
mslVerEnum = MTLLanguageVersion2_4;
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ Building **MoltenVK**
|
|||||||
During building, **MoltenVK** references the latest *Apple SDK* frameworks. To access these frameworks,
|
During building, **MoltenVK** references the latest *Apple SDK* frameworks. To access these frameworks,
|
||||||
and to avoid build errors, be sure to use the latest publicly available version of *Xcode*.
|
and to avoid build errors, be sure to use the latest publicly available version of *Xcode*.
|
||||||
|
|
||||||
MoltenVK currently supports being built with *Xcode 14.3* or later. Support is based on the
|
MoltenVK currently supports being built with *Xcode 15.0.1* or later. Support is based on the
|
||||||
earliest version of Xcode that can be verified in CI workflows.
|
earliest version of Xcode that can be verified in CI workflows.
|
||||||
|
|
||||||
Once built, the **MoltenVK** libraries can be run on *macOS*, *iOS*, *tvOS*, or *visionOS* devices
|
Once built, the **MoltenVK** libraries can be run on *macOS*, *iOS*, *tvOS*, or *visionOS* devices
|
||||||
|
|||||||
Reference in New Issue
Block a user