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() -> MTLComputeCommandEncoder
Objective C
- (id<MTLComputeCommandEncoder>)computeCommandEncoder
Возвращаемое значение
Вычислить объект кодера команды.
Обсуждение
A
MTLComputeCommandEncoder
объект обеспечивает методы, чтобы установить и запуститься, большое количество потоков общего назначения на устройстве для выполнения параллели данных вычисляют обработку.После того, как буфер команд создает, это вычисляет кодер команды, никакой другой кодер команды любого типа не может быть создан для этого буфера команд, пока Вы не вызываете
endEncoding
методMTLComputeCommandEncoder
объект.Оператор импорта
Objective C
@import Metal;
Swift
import Metal
Доступность
Доступный в iOS 8.0 и позже.
-
blitCommandEncoder () - blitCommandEncoder
ТребуемыйСоздает объект кодера, который может закодировать работу памяти (копирование битового массива) команды в этот буфер команд. (требуемый)
Объявление
Swift
func blitCommandEncoder() -> MTLBlitCommandEncoder
Objective 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
Параметры
drawable
drawable объект.
Обсуждение
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>)
drawable
atTime:(CFTimeInterval)presentationTime
Параметры
drawable
drawable объект.
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
Обсуждение
Во время начального этапа буфера команд,
status
MTLCommandBufferStatusNotEnqueued
. Его изменения значения как буфер команд ставятся в очередь, фиксируются, планируются и завершаются. Если выполнение перестало работать, тоstatus
оцените изменения вMTLCommandBufferStatusError
.Оператор импорта
Objective C
@import Metal;
Swift
import Metal
Доступность
Доступный в iOS 8.0 и позже.
-
error
СвойствоСодержит подробные данные об ошибке, которая, возможно, произошла во время выполнения буфера команд. (требуемый) (только для чтения)
Обсуждение
Это свойство прежде всего для отладки. Если выполнение закончилось успешно, если буфер команд еще не был выполнен, или
error
nil
.Оператор импорта
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!) -> Void
Objective 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;
Константы
-
NotEnqueued
MTLCommandBufferStatusNotEnqueued
Буфер команд еще не ставится в очередь. Это - начальное значение
status
свойство передenqueue
метод вызывают.Доступный в iOS 8.0 и позже.
-
Enqueued
MTLCommandBufferStatusEnqueued
Буфер команд ставится в очередь.
Доступный в iOS 8.0 и позже.
-
Committed
MTLCommandBufferStatusCommitted
Буфер команд фиксируется для выполнения.
Доступный в iOS 8.0 и позже.
-
Scheduled
MTLCommandBufferStatusScheduled
Буфер команд планируется. Когда любые зависимости между работой, представленной другими буферами команд или другим APIs в системе, удовлетворены, буфер команд считают запланированным.
Доступный в iOS 8.0 и позже.
-
Completed
MTLCommandBufferStatusCompleted
Буфер команд завершил выполнение успешно.
Доступный в iOS 8.0 и позже.
-
Error
MTLCommandBufferStatusError
Выполнение буфера команд было прервано вследствие ошибки во время выполнения. Проверьте
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;
Константы
-
None
MTLCommandBufferErrorNone
Никакая ошибка не произошла.
Доступный в iOS 8.0 и позже.
-
Internal
MTLCommandBufferErrorInternal
Внутренняя ошибка, не вписывающаяся в другие категории. Фактический низкоуровневый код ошибки кодируется в локальном описании.
Доступный в iOS 8.0 и позже.
-
Timeout
MTLCommandBufferErrorTimeout
Выполнение этого буфера команд заняло больше времени, чем, чем система позволяет, таким образом, выполнение было прервано и прервано.
Доступный в iOS 8.0 и позже.
-
PageFault
MTLCommandBufferErrorPageFault
Выполнение этого буфера команд генерировало непригодное отсутствие страницы GPU. Эта ошибка может быть вызвана буферным несоответствием атрибута чтения-записи или из граничного доступа.
Доступный в iOS 8.0 и позже.
-
Blacklisted
MTLCommandBufferErrorBlacklisted
Доступ к этому устройству был отклонен, потому что этот клиент был ответственен за слишком много тайм-аутов или зависает.
Доступный в iOS 8.0 и позже.
-
NotPermitted
MTLCommandBufferErrorNotPermitted
Этот процесс не имеет доступа для использования этого устройства.
Доступный в iOS 8.0 и позже.
-
OutOfMemory
MTLCommandBufferErrorOutOfMemory
Недостаточно память была доступна для выполнения этого буфера команд.
Доступный в iOS 8.0 и позже.
-
InvalidResource
MTLCommandBufferErrorInvalidResource
Буфер команд сослался на недопустимый ресурс. Эта ошибка обычно вызывается, когда вызывающая сторона удаляет ресурс прежде, чем выполнить буфер команд, относящийся к нему.
Доступный в iOS 8.0 и позже.
Оператор импорта
Objective C
@import Metal;
Swift
import Metal
Доступность
Доступный в iOS 8.0 и позже.
-