diff options
author | Michael Jones <michael_p_jones@apple.com> | 2021-12-08 18:07:11 +0300 |
---|---|---|
committer | Michael Jones <michael_p_jones@apple.com> | 2021-12-08 18:08:12 +0300 |
commit | e23b54a59f0428399bbf4de5ba007ad764fa80be (patch) | |
tree | ae2910fbd1582d952ee1c3dfe959b94227e06832 /intern/cycles/device/metal/queue.mm | |
parent | 5e9dba822d8de977909bf170dcae9950535e01af (diff) |
Cycles: Fix OS version warnings
This patch suppresses OS version warnings and hides currently unsupported Metal GPUs when enumerating devices.
Reviewed By: brecht
Differential Revision: https://developer.blender.org/D13506
Diffstat (limited to 'intern/cycles/device/metal/queue.mm')
-rw-r--r-- | intern/cycles/device/metal/queue.mm | 78 |
1 files changed, 43 insertions, 35 deletions
diff --git a/intern/cycles/device/metal/queue.mm b/intern/cycles/device/metal/queue.mm index ced01e7b9b6..d04df09f49a 100644 --- a/intern/cycles/device/metal/queue.mm +++ b/intern/cycles/device/metal/queue.mm @@ -40,12 +40,14 @@ MetalDeviceQueue::MetalDeviceQueue(MetalDevice *device) mtlDevice = device->mtlDevice; mtlCommandQueue = [mtlDevice newCommandQueue]; - shared_event = [mtlDevice newSharedEvent]; - shared_event_id = 1; + if (@available(macos 10.14, *)) { + shared_event = [mtlDevice newSharedEvent]; + shared_event_id = 1; - /* Shareable event listener */ - event_queue = dispatch_queue_create("com.cycles.metal.event_queue", NULL); - shared_event_listener = [[MTLSharedEventListener alloc] initWithDispatchQueue:event_queue]; + /* Shareable event listener */ + event_queue = dispatch_queue_create("com.cycles.metal.event_queue", NULL); + shared_event_listener = [[MTLSharedEventListener alloc] initWithDispatchQueue:event_queue]; + } wait_semaphore = dispatch_semaphore_create(0); } @@ -57,8 +59,10 @@ MetalDeviceQueue::~MetalDeviceQueue() assert(mtlCommandBuffer == nil); assert(command_buffers_submitted == command_buffers_completed); - [shared_event_listener release]; - [shared_event release]; + if (@available(macos 10.14, *)) { + [shared_event_listener release]; + [shared_event release]; + } if (@available(macos 11.0, *)) { [command_buffer_desc release]; @@ -364,16 +368,18 @@ bool MetalDeviceQueue::synchronize() if (mtlCommandBuffer) { uint64_t shared_event_id = this->shared_event_id++; - __block dispatch_semaphore_t block_sema = wait_semaphore; - [shared_event notifyListener:shared_event_listener - atValue:shared_event_id - block:^(id<MTLSharedEvent> sharedEvent, uint64_t value) { - dispatch_semaphore_signal(block_sema); - }]; - - [mtlCommandBuffer encodeSignalEvent:shared_event value:shared_event_id]; - [mtlCommandBuffer commit]; - dispatch_semaphore_wait(wait_semaphore, DISPATCH_TIME_FOREVER); + if (@available(macos 10.14, *)) { + __block dispatch_semaphore_t block_sema = wait_semaphore; + [shared_event notifyListener:shared_event_listener + atValue:shared_event_id + block:^(id<MTLSharedEvent> sharedEvent, uint64_t value) { + dispatch_semaphore_signal(block_sema); + }]; + + [mtlCommandBuffer encodeSignalEvent:shared_event value:shared_event_id]; + [mtlCommandBuffer commit]; + dispatch_semaphore_wait(wait_semaphore, DISPATCH_TIME_FOREVER); + } [mtlCommandBuffer release]; @@ -536,30 +542,32 @@ id<MTLComputeCommandEncoder> MetalDeviceQueue::get_compute_encoder(DeviceKernel { bool concurrent = (kernel < DEVICE_KERNEL_INTEGRATOR_NUM); - if (mtlComputeEncoder) { - if (mtlComputeEncoder.dispatchType == concurrent ? MTLDispatchTypeConcurrent : - MTLDispatchTypeSerial) { - /* declare usage of MTLBuffers etc */ - prepare_resources(kernel); + if (@available(macos 10.14, *)) { + if (mtlComputeEncoder) { + if (mtlComputeEncoder.dispatchType == concurrent ? MTLDispatchTypeConcurrent : + MTLDispatchTypeSerial) { + /* declare usage of MTLBuffers etc */ + prepare_resources(kernel); - return mtlComputeEncoder; + return mtlComputeEncoder; + } + close_compute_encoder(); } - close_compute_encoder(); - } - close_blit_encoder(); + close_blit_encoder(); - if (!mtlCommandBuffer) { - mtlCommandBuffer = [mtlCommandQueue commandBuffer]; - [mtlCommandBuffer retain]; - } + if (!mtlCommandBuffer) { + mtlCommandBuffer = [mtlCommandQueue commandBuffer]; + [mtlCommandBuffer retain]; + } - mtlComputeEncoder = [mtlCommandBuffer - computeCommandEncoderWithDispatchType:concurrent ? MTLDispatchTypeConcurrent : - MTLDispatchTypeSerial]; + mtlComputeEncoder = [mtlCommandBuffer + computeCommandEncoderWithDispatchType:concurrent ? MTLDispatchTypeConcurrent : + MTLDispatchTypeSerial]; - /* declare usage of MTLBuffers etc */ - prepare_resources(kernel); + /* declare usage of MTLBuffers etc */ + prepare_resources(kernel); + } return mtlComputeEncoder; } |