MTLCommandBuffer
Наследование
Не применимый
Оператор импорта
Swift
import Metal
Objective C
@import Metal;
Доступность
Доступный в iOS 8.0 и позже.
MTLCommandBuffer протокол определяет интерфейс для переходного процесса, единственное использование возражают, что хранилища закодировали команды, в конечном счете фиксирующиеся для выполнения GPU.
Ваше приложение не определяет классы, реализующие этот протокол. Объекты буфера команд создаются a MTLCommandQueue возразите и может только фиксироваться для выполнения на очереди команды, создавшей его. Все буферы команд, отправленные единственной очереди команды, как гарантируют, выполнятся в порядке, в котором ставились в очередь буферы команд. В большинстве случаев Вы создаете буфер команд путем вызова a MTLCommandQueue объект commandBuffer метод.
После создания буфера команд Вы создаете объект кодера заполнить буфер командами. MTLCommandBuffer протокол имеет методы для создания определенных типов кодеров команды: MTLRenderCommandEncoder, MTLComputeCommandEncoder, MTLBlitCommandEncoder, и MTLParallelRenderCommandEncoder. В любой момент времени только единственный кодер может быть активным для определенного буфера команд. Вы создаете кодер, используете его, чтобы добавить команды к буферу, и затем закончить процесс кодирования. После окончания с кодером можно создать другой кодер и продолжать добавлять команды к тому же буферу. Когда Вы готовы выполнить набор закодированных команд, Вы вызываете буфер команд commit метод для планирования буфера для выполнения.
После того, как буфер команд фиксировался для выполнения, единственные допустимые операции на буфере команд должны ожидать его, чтобы быть запланированными или завершенными (использование синхронных вызовов или блоков обработчика) и проверить состояние выполнения буфера команд. Когда используется, запланированные и завершенные обработчики являются блоками, вызывающимися в порядке выполнения. Эти обработчики должны быть выполнены быстро; если дорогая или блокирующая работа должна быть запланирована, задержите ту работу к другому потоку.
В многопоточном приложении повредите свою полную задачу в подзадачи, которые могут быть закодированы отдельно. Создайте буфер команд для каждого блока работы, затем вызовите enqueue метод на этих буфер команд возражает для установления порядка выполнения. Заполните каждый буферный объект (использование многократных потоков) и фиксируйте их. Очередь команды автоматически планирует и выполняет эти буферы команд, поскольку они становятся доступными.
-
Создает объект кодера, который может закодировать команды рендеринга графики в этот буфер команд. (требуемый)
Объявление
Swift
func renderCommandEncoderWithDescriptor(_renderPassDescriptor: MTLRenderPassDescriptor) -> MTLRenderCommandEncoder?Objective C
- (id<MTLRenderCommandEncoder>)renderCommandEncoderWithDescriptor:(MTLRenderPassDescriptor *)renderPassDescriptorПараметры
renderPassDescriptorНабор присоединений и ассоциированной страны для вывода графических данных команд рендеринга.
Возвращаемое значение
Объект кодера команды рендеринга графики.
Обсуждение
A
MTLRenderCommandEncoderобъект обеспечивает методы, чтобы установить и выполнить единственную передачу рендеринга графики.После того, как буфер команд создает этот кодер команды рендеринга, никакой другой кодер команды любого типа не может быть создан для этого буфера команд, пока Вы не вызываете
endEncodingметодMTLRenderCommandEncoderобъект.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
Создает объект кодера, который может закодировать параллель данных, вычисляют команды в этот буфер команд. (требуемый)
Объявление
Swift
func computeCommandEncoder() -> MTLComputeCommandEncoderObjective C
- (id<MTLComputeCommandEncoder>)computeCommandEncoderВозвращаемое значение
Вычислить объект кодера команды.
Обсуждение
A
MTLComputeCommandEncoderобъект обеспечивает методы, чтобы установить и запуститься, большое количество потоков общего назначения на устройстве для выполнения параллели данных вычисляют обработку.После того, как буфер команд создает, это вычисляет кодер команды, никакой другой кодер команды любого типа не может быть создан для этого буфера команд, пока Вы не вызываете
endEncodingметодMTLComputeCommandEncoderобъект.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
blitCommandEncoder () - blitCommandEncoderТребуемыйСоздает объект кодера, который может закодировать работу памяти (копирование битового массива) команды в этот буфер команд. (требуемый)
Объявление
Swift
func blitCommandEncoder() -> MTLBlitCommandEncoderObjective C
- (id<MTLBlitCommandEncoder>)blitCommandEncoderВозвращаемое значение
Объект кодера команды копирования битового массива.
Обсуждение
A
MTLBlitCommandEncoderобъект обеспечивает методы для копий памяти стандартной функции, копий текстуры, и множественно отобразите генерацию на устройстве.После того, как буфер команд создает этот кодер команды копирования битового массива, никакой другой кодер команды любого типа не может быть создан для этого буфера команд, пока Вы не вызываете
endEncodingметодMTLBlitCommandEncoderобъект.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
parallelRenderCommandEncoderWithDescriptor (_:) - parallelRenderCommandEncoderWithDescriptor:ТребуемыйСоздает объект, кодирующий команды в этот буфер команд, разбивающие единственную передачу рендеринга в многократные единицы работы. (требуемый)
Объявление
Swift
func parallelRenderCommandEncoderWithDescriptor(_renderPassDescriptor: MTLRenderPassDescriptor) -> MTLParallelRenderCommandEncoder?Objective C
- (id<MTLParallelRenderCommandEncoder>)parallelRenderCommandEncoderWithDescriptor:(MTLRenderPassDescriptor *)renderPassDescriptorПараметры
renderPassDescriptorНабор присоединений и ассоциированной страны для вывода графических данных команд рендеринга.
Возвращаемое значение
Параллельный объект кодера команды рендеринга.
Обсуждение
A
MTLParallelRenderCommandEncoderможет самостоятельно создать многократного независимого политикаMTLRenderCommandEncoderобъекты, кодирующие команды рендеринга в тот же буфер команд для того же целевого присоединения. Все эти команды рендеринга выполняются как единственная передача рендеринга.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
ставьте в очередь () - ставить в очередьТребуемыйРезервирует место для этого буфера команд на его связанной очереди команды. (требуемый)
Объявление
Swift
func enqueue()Objective C
- (void)enqueueОбсуждение
Постановка в очередь буфер команд резервирует место для буфера команд на очереди команды, не фиксируя буфера команд для выполнения. Когда этот буфер команд позже фиксируется, он выполняется после любых буферов команд, ранее ставивших в очередь на очереди команды. Вы ставите в очередь буферы команд так, чтобы один или несколько буферов команд могли быть созданы с фиксированным порядком выполнения, не требуя, чтобы буферы команд были закодированы последовательно. Работа кодирования команд в буферы команд может быть задержана к другим потокам, которые могут выполниться и завершиться в любом порядке.
Можно вызвать
enqueueметод прежде, во время, или после кодирования команд. Один раз может только ставиться в очередь буфер команд.enqueueметод не делает буфер команд имеющим право на выполнение. Представить буфер команд устройству для выполнения, последующегоcommitвызов метода требуется.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
фиксация () - фиксацияТребуемыйФиксации этот буфер команд для выполнения как можно скорее. (требуемый)
Объявление
Swift
func commit()Objective C
- (void)commitОбсуждение
После вызова
commitметод, буфер команд выполняется GPU. Это выполняется после любых ранее ставивших в очередь буферов команд в той же очереди команды. Если буфер команд ранее не ставился в очередь, он ставится в очередь неявно. Как только буфер команд фиксируется, никакие дальнейшие команды не могут быть закодированы в него.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
Регистрирует блок кода, который вызовут после того, как будет запланирован буфер команд. (требуемый)
Объявление
Swift
func addScheduledHandler(_block: MTLCommandBufferHandler)Objective C
- (void)addScheduledHandler:(MTLCommandBufferHandler)blockПараметры
blockБлок кода, который будет вызван.
Обсуждение
Многократные запланированные обработчики могут быть зарегистрированы для буфера команд.
Когда любые зависимости между работой, представленной другими буферами команд или другим APIs в системе, были удовлетворены, буфер команд считают запланированным. Во время выполнения
block, состояние командыMTLCommandBufferStatusScheduled.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
Регистрирует блок кода, который сразу вызовут после того, как устройство завершило выполнение буфера команд. (требуемый)
Объявление
Swift
func addCompletedHandler(_block: MTLCommandBufferHandler)Objective C
- (void)addCompletedHandler:(MTLCommandBufferHandler)blockПараметры
blockБлок кода, который будет вызван.
Обсуждение
Многократные завершенные обработчики могут быть зарегистрированы для буфера команд.
Завершенный обработчик вызывают после того, как буфер заканчивает выполняться. Проверьте
statusсвойство, чтобы определить, было ли выполнение успешно.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
presentDrawable (_:) - presentDrawable:ТребуемыйРегистрирует блок кода, представляющий drawable объект, когда этот буфер команд планируется для выполнения. (требуемый)
Объявление
Swift
func presentDrawable(_drawable: MTLDrawable)Objective C
- (void)presentDrawable:(id<MTLDrawable>)drawableПараметры
drawabledrawable объект.
Обсуждение
presentDrawable:метод является вызывающим удобным методомaddScheduledHandler:представить один drawable объект. Для поддержки многократного drawable объекта от единственного буфера команд создайте запланированный обработчик, вызывающийpresentметод на нескольких drawable объектах.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
Регистрирует блок кода, представляющий drawable объект в определенное время узла, когда этот буфер команд планируется для выполнения. (требуемый)
Объявление
Swift
func presentDrawable(_drawable: MTLDrawable, atTimepresentationTime: CFTimeInterval)Objective C
- (void)presentDrawable:(id<MTLDrawable>)drawableatTime:(CFTimeInterval)presentationTimeПараметры
drawabledrawable объект.
presentationTimeВремя, в которое должен быть представлен drawable объект.
Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
См. также
-
waitUntilScheduled () - waitUntilScheduledТребуемыйСинхронно ожидайте этого буфера команд, который будет запланирован. (требуемый)
Объявление
Swift
func waitUntilScheduled()Objective C
- (void)waitUntilScheduledОбсуждение
Этот метод возвраты после буфера команд был запланирован и все блоки кода, зарегистрированные
addScheduledHandler:были вызваны. Буфер команд считают запланированным, как только все его зависимости разрешены, и он отправляется в аппаратные средства для выполнения.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
waitUntilCompleted () - waitUntilCompletedТребуемыйСинхронно ожидайте выполнения этого буфера команд для завершения. (требуемый)
Объявление
Swift
func waitUntilCompleted()Objective C
- (void)waitUntilCompletedОбсуждение
Этот метод возвраты после буфера команд завершается и все блоки кода, зарегистрированные
addCompletedHandler:вызываются.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
statusСвойствоСообщает текущий этап во времени жизни буфера команд, поскольку это продолжается от ставившего в очередь до преданного, запланированного к завершенному. (требуемый) (только для чтения)
Объявление
Swift
var status: MTLCommandBufferStatus { get }Objective C
@property(readonly) MTLCommandBufferStatus statusОбсуждение
Во время начального этапа буфера команд,
statusMTLCommandBufferStatusNotEnqueued. Его изменения значения как буфер команд ставятся в очередь, фиксируются, планируются и завершаются. Если выполнение перестало работать, тоstatusоцените изменения вMTLCommandBufferStatusError.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
errorСвойствоСодержит подробные данные об ошибке, которая, возможно, произошла во время выполнения буфера команд. (требуемый) (только для чтения)
Обсуждение
Это свойство прежде всего для отладки. Если выполнение закончилось успешно, если буфер команд еще не был выполнен, или
errornil.Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
retainedReferencesСвойствоБулево значение, указывающее, поддерживает ли буфер команд сильные ссылки к связанным объектам ресурса (текстуры, буферы данных, и т.д.) необходимый для завершения выполнения каких-либо закодированных команд. (требуемый) (только для чтения)
Объявление
Swift
var retainedReferences: Bool { get }Objective C
@property(readonly) BOOL retainedReferencesОператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
deviceСвойствоУстройство, из которого создавался этот буфер команд. (требуемый) (только для чтения)
Объявление
Swift
var device: MTLDevice { get }Objective C
@property(readonly) id< MTLDevice > deviceОбсуждение
Этот буфер команд может только использоваться с этим устройством.
Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
commandQueueСвойствоОчередь команды, создавшая буфер команд. (требуемый) (только для чтения)
Объявление
Swift
var commandQueue: MTLCommandQueue { get }Objective C
@property(readonly) id< MTLCommandQueue > commandQueueОбсуждение
Этот буфер команд может быть связан только с этой очередью команды.
Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
Строка, чтобы помочь идентифицировать этот объект. (требуемый)
Обсуждение
Когда буфер команд просматривается в отладчике XCode, эта строка видима.
Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
Типы данных
-
Когда буфер команд планируется для выполнения или завершил выполнение, блок кода вызвал.
Объявление
Swift
typealias MTLCommandBufferHandler = (MTLCommandBuffer!) -> VoidObjective C
typedef void (^MTLCommandBufferHandler)(id <MTLCommandBuffer> buffer);Обсуждение
Обработчик завершения берет следующие параметры:
bufferБуфер команд, запланированный или завершенный.
Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
Текущий этап во времени жизни буфера команд, поскольку это продолжается от ставившего в очередь до преданного, запланированного к завершенному.
Объявление
Swift
enum MTLCommandBufferStatus : UInt { case NotEnqueued case Enqueued case Committed case Scheduled case Completed case Error }Objective C
typedef enum : NSUInteger { MTLCommandBufferStatusNotEnqueued = 0, MTLCommandBufferStatusEnqueued = 1, MTLCommandBufferStatusCommitted = 2, MTLCommandBufferStatusScheduled = 3, MTLCommandBufferStatusCompleted = 4, MTLCommandBufferStatusError = 5 } MTLCommandBufferStatus;Константы
-
NotEnqueuedMTLCommandBufferStatusNotEnqueuedБуфер команд еще не ставится в очередь. Это - начальное значение
statusсвойство передenqueueметод вызывают.Доступный в iOS 8.0 и позже.
-
EnqueuedMTLCommandBufferStatusEnqueuedБуфер команд ставится в очередь.
Доступный в iOS 8.0 и позже.
-
CommittedMTLCommandBufferStatusCommittedБуфер команд фиксируется для выполнения.
Доступный в iOS 8.0 и позже.
-
ScheduledMTLCommandBufferStatusScheduledБуфер команд планируется. Когда любые зависимости между работой, представленной другими буферами команд или другим APIs в системе, удовлетворены, буфер команд считают запланированным.
Доступный в iOS 8.0 и позже.
-
CompletedMTLCommandBufferStatusCompletedБуфер команд завершил выполнение успешно.
Доступный в iOS 8.0 и позже.
-
ErrorMTLCommandBufferStatusErrorВыполнение буфера команд было прервано вследствие ошибки во время выполнения. Проверьте
errorсвойство для получения дополнительной информации.Доступный в iOS 8.0 и позже.
Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
-
Коды ошибки, указывающие, почему выполнение буфера команд перестало работать.
errorсвойство содержит код ошибки.Объявление
Swift
enum MTLCommandBufferError : UInt { case None case Internal case Timeout case PageFault case Blacklisted case NotPermitted case OutOfMemory case InvalidResource }Objective C
typedef enum : NSUInteger { MTLCommandBufferErrorNone = 0, MTLCommandBufferErrorInternal = 1, MTLCommandBufferErrorTimeout = 2, MTLCommandBufferErrorPageFault = 3, MTLCommandBufferErrorBlacklisted = 4, MTLCommandBufferErrorNotPermitted = 7, MTLCommandBufferErrorOutOfMemory = 8, MTLCommandBufferErrorInvalidResource = 9 } MTLCommandBufferError;Константы
-
NoneMTLCommandBufferErrorNoneНикакая ошибка не произошла.
Доступный в iOS 8.0 и позже.
-
InternalMTLCommandBufferErrorInternalВнутренняя ошибка, не вписывающаяся в другие категории. Фактический низкоуровневый код ошибки кодируется в локальном описании.
Доступный в iOS 8.0 и позже.
-
TimeoutMTLCommandBufferErrorTimeoutВыполнение этого буфера команд заняло больше времени, чем, чем система позволяет, таким образом, выполнение было прервано и прервано.
Доступный в iOS 8.0 и позже.
-
PageFaultMTLCommandBufferErrorPageFaultВыполнение этого буфера команд генерировало непригодное отсутствие страницы GPU. Эта ошибка может быть вызвана буферным несоответствием атрибута чтения-записи или из граничного доступа.
Доступный в iOS 8.0 и позже.
-
BlacklistedMTLCommandBufferErrorBlacklistedДоступ к этому устройству был отклонен, потому что этот клиент был ответственен за слишком много тайм-аутов или зависает.
Доступный в iOS 8.0 и позже.
-
NotPermittedMTLCommandBufferErrorNotPermittedЭтот процесс не имеет доступа для использования этого устройства.
Доступный в iOS 8.0 и позже.
-
OutOfMemoryMTLCommandBufferErrorOutOfMemoryНедостаточно память была доступна для выполнения этого буфера команд.
Доступный в iOS 8.0 и позже.
-
InvalidResourceMTLCommandBufferErrorInvalidResourceБуфер команд сослался на недопустимый ресурс. Эта ошибка обычно вызывается, когда вызывающая сторона удаляет ресурс прежде, чем выполнить буфер команд, относящийся к нему.
Доступный в iOS 8.0 и позже.
Оператор импорта
Objective C
@import Metal;Swift
import MetalДоступность
Доступный в iOS 8.0 и позже.
-
