Name Strings
SPV_INTEL_blocking_pipes
Contact
To report problems with this extension, please open a new issue at:
Contributors
-
Joe Garvey, Intel
-
Michael Kinsner, Intel
Notice
Copyright (c) 2019 Intel Corporation. All rights reserved.
Status
Final draft
Version
Last Modified Date |
2019-07-17 |
Revision |
1 |
Dependencies
This extension is written against the SPIR-V Specification, Version 1.4 Revision 1.
This extension requires SPIR-V 1.0.
Overview
This extension adds new pipe read and write functions that have blocking semantics instead of the non-blocking semantics of the existing pipe read/write functions. In this version, only the variants that don’t support reservations are specified.
Extension Name
To use this extension within a SPIR-V module, the following OpExtension must be present in the module:
OpExtension "SPV_INTEL_blocking_pipes"
New Capabilities
This extension introduces a new capability:
BlockingPipesINTEL
New Instructions
Instructions added under the BlockingPipesINTEL capability:
OpReadPipeBlockingINTEL OpWritePipeBlockingINTEL
Token Number Assignments
BlockingPipesINTEL |
5945 |
OpReadPipeBlockingINTEL |
5946 |
OpWritePipeBlockingINTEL |
5947 |
Modifications to the SPIR-V Specification, Version 1.4
Capability
Modify section 3.31, Capability, adding a row to the capability table:
Capability | Implicitly Declares | |
---|---|---|
5945 |
BlockingPipesINTEL |
Pipes |
Instructions
In section 3.32.23, Pipe Instructions, add two new instructions: OpReadPipeBlockingINTEL and OpWritePipeBlockingINTEL, as follows:
OpReadPipeBlockingINTEL Read a packet from the pipe object specified by Pipe into Pointer. This instruction will not return until the read has completed successfully and thus if the pipe is empty it will block until there is data in the pipe. Pipe must have a type of OpTypePipe with ReadOnly access qualifier. Pointer must have a type of OpTypePointer with the same data type as Pipe and a Generic Storage Class. Packet Size must be a 32-bit integer type scalar that represents the size in bytes of each packet in the pipe. Packet Alignment must be a 32-bit integer type scalar that presents the alignment in bytes of each packet in the pipe. Packet Size and Packet Alignment must satisfy the following: For concrete types, Packet Alignment should equal Packet Size. For aggregate types, Packet Alignment should be the size of the largest primitive type in the hierarchy of types. |
Capability: |
||||
5 |
5946 |
<id> |
<id> |
<id> |
<id> |
OpWritePipeBlockingINTEL Write a packet from Pointer to the pipe object specified by Pipe. This instruction will not return until the write has completed successfully and thus if the pipe is full it will block until there is available capacity in the pipe. Pipe must have a type of OpTypePipe with WriteOnly access qualifier. Pointer must have a type of OpTypePointer with the same data type as Pipe and a Generic Storage Class. Packet Size must be a 32-bit integer type scalar that represents the size in bytes of each packet in the pipe. Packet Alignment must be a 32-bit integer type scalar that presents the alignment in bytes of each packet in the pipe. Packet Size and Packet Alignment must satisfy the following: For concrete types, Packet Alignment should equal Packet Size. For aggregate types, Packet Alignment should be the size of the largest primitive type in the hierarchy of types. |
Capability: |
||||
5 |
5947 |
<id> |
<id> |
<id> |
<id> |
Issues
None.
Revision History
Rev | Date | Author | Changes |
---|---|---|---|
1 |
2019-07-17 |
Joe Garvey |
Initial public release |