| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <meta name="generator" content="Asciidoctor 2.0.23"> |
| <meta name="description" content="OpenCL(TM) is an open, royalty-free standard for cross-platform parallel programming of diverse accelerators. This document describes OpenCL extensions."> |
| <meta name="author" content="Khronos® OpenCL Working Group"> |
| <title>The OpenCL™ Extension Specification</title> |
| <style> |
| /*! normalize.css v2.1.2 | MIT License | git.io/normalize */ |
| /* ========================================================================== HTML5 display definitions ========================================================================== */ |
| /** Correct `block` display not defined in IE 8/9. */ |
| article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } |
| |
| /** Correct `inline-block` display not defined in IE 8/9. */ |
| audio, canvas, video { display: inline-block; } |
| |
| /** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ |
| audio:not([controls]) { display: none; height: 0; } |
| |
| /** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */ |
| [hidden], template { display: none; } |
| |
| script { display: none !important; } |
| |
| /* ========================================================================== Base ========================================================================== */ |
| /** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ |
| html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } |
| |
| /** Remove default margin. */ |
| body { margin: 0; } |
| |
| /* ========================================================================== Links ========================================================================== */ |
| /** Remove the gray background color from active links in IE 10. */ |
| a { background: transparent; } |
| |
| /** Address `outline` inconsistency between Chrome and other browsers. */ |
| a:focus { outline: thin dotted; } |
| |
| /** Improve readability when focused and also mouse hovered in all browsers. */ |
| a:active, a:hover { outline: 0; } |
| |
| /* ========================================================================== Typography ========================================================================== */ |
| /** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */ |
| h1 { font-size: 2em; margin: 0.67em 0; } |
| |
| /** Address styling not present in IE 8/9, Safari 5, and Chrome. */ |
| abbr[title] { border-bottom: 1px dotted; } |
| |
| /** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */ |
| b, strong { font-weight: bold; } |
| |
| /** Address styling not present in Safari 5 and Chrome. */ |
| dfn { font-style: italic; } |
| |
| /** Address differences between Firefox and other browsers. */ |
| hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } |
| |
| /** Address styling not present in IE 8/9. */ |
| mark { background: #ff0; color: #000; } |
| |
| /** Correct font family set oddly in Safari 5 and Chrome. */ |
| code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } |
| |
| /** Improve readability of pre-formatted text in all browsers. */ |
| pre { white-space: pre-wrap; } |
| |
| /** Set consistent quote types. */ |
| q { quotes: "\201C" "\201D" "\2018" "\2019"; } |
| |
| /** Address inconsistent and variable font size in all browsers. */ |
| small { font-size: 80%; } |
| |
| /** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ |
| sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } |
| |
| sup { top: -0.5em; } |
| |
| sub { bottom: -0.25em; } |
| |
| /* ========================================================================== Embedded content ========================================================================== */ |
| /** Remove border when inside `a` element in IE 8/9. */ |
| img { border: 0; } |
| |
| /** Correct overflow displayed oddly in IE 9. */ |
| svg:not(:root) { overflow: hidden; } |
| |
| /* ========================================================================== Figures ========================================================================== */ |
| /** Address margin not present in IE 8/9 and Safari 5. */ |
| figure { margin: 0; } |
| |
| /* ========================================================================== Forms ========================================================================== */ |
| /** Define consistent border, margin, and padding. */ |
| fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } |
| |
| /** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ |
| legend { border: 0; /* 1 */ padding: 0; /* 2 */ } |
| |
| /** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */ |
| button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ } |
| |
| /** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ |
| button, input { line-height: normal; } |
| |
| /** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */ |
| button, select { text-transform: none; } |
| |
| /** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ |
| button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } |
| |
| /** Re-set default cursor for disabled elements. */ |
| button[disabled], html input[disabled] { cursor: default; } |
| |
| /** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */ |
| input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } |
| |
| /** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ |
| input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } |
| |
| /** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ |
| input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } |
| |
| /** Remove inner padding and border in Firefox 4+. */ |
| button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } |
| |
| /** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */ |
| textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ } |
| |
| /* ========================================================================== Tables ========================================================================== */ |
| /** Remove most spacing between table cells. */ |
| table { border-collapse: collapse; border-spacing: 0; } |
| |
| meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; } |
| |
| meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; } |
| |
| meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; } |
| |
| *, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } |
| |
| html, body { font-size: 100%; } |
| |
| body { background: #fff; color: #222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; } |
| |
| a:hover { cursor: pointer; } |
| |
| img, object, embed { max-width: 100%; height: auto; } |
| |
| object, embed { height: 100%; } |
| |
| img { -ms-interpolation-mode: bicubic; } |
| |
| #map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; } |
| |
| .left { float: left !important; } |
| |
| .right { float: right !important; } |
| |
| .text-left { text-align: left !important; } |
| |
| .text-right { text-align: right !important; } |
| |
| .text-center { text-align: center !important; } |
| |
| .text-justify { text-align: justify !important; } |
| |
| .hide { display: none; } |
| |
| .antialiased { -webkit-font-smoothing: antialiased; } |
| |
| img { display: inline-block; vertical-align: middle; } |
| |
| textarea { height: auto; min-height: 50px; } |
| |
| select { width: 100%; } |
| |
| object, svg { display: inline-block; vertical-align: middle; } |
| |
| .center { margin-left: auto; margin-right: auto; } |
| |
| .spread { width: 100%; } |
| |
| p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; } |
| |
| .subheader, .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { line-height: 1.4; color: black; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; } |
| |
| /* Typography resets */ |
| div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; } |
| |
| /* Default Link Styles */ |
| a { color: #0068b0; text-decoration: none; line-height: inherit; } |
| a:hover, a:focus { color: #333; } |
| a img { border: none; } |
| |
| /* Default paragraph styles */ |
| p { font-family: Noto, sans-serif; font-weight: normal; font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; text-rendering: optimizeLegibility; } |
| p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; } |
| |
| /* Default header styles */ |
| h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: Noto, sans-serif; font-weight: normal; font-style: normal; color: black; text-rendering: optimizeLegibility; margin-top: 0.5em; margin-bottom: 0.5em; line-height: 1.2125em; } |
| h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #4d4d4d; line-height: 0; } |
| |
| h1 { font-size: 2.125em; } |
| |
| h2 { font-size: 1.6875em; } |
| |
| h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; } |
| |
| h4 { font-size: 1.125em; } |
| |
| h5 { font-size: 1.125em; } |
| |
| h6 { font-size: 1em; } |
| |
| hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; } |
| |
| /* Helpful Typography Defaults */ |
| em, i { font-style: italic; line-height: inherit; } |
| |
| strong, b { font-weight: bold; line-height: inherit; } |
| |
| small { font-size: 60%; line-height: inherit; } |
| |
| code { font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; color: #264357; } |
| |
| /* Lists */ |
| ul, ol, dl { font-size: 1em; line-height: 1.6; margin-bottom: 0.75em; list-style-position: outside; font-family: Noto, sans-serif; } |
| |
| ul, ol { margin-left: 1.5em; } |
| ul.no-bullet, ol.no-bullet { margin-left: 1.5em; } |
| |
| /* Unordered Lists */ |
| ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ } |
| ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; } |
| ul.square { list-style-type: square; } |
| ul.circle { list-style-type: circle; } |
| ul.disc { list-style-type: disc; } |
| ul.no-bullet { list-style: none; } |
| |
| /* Ordered Lists */ |
| ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; } |
| |
| /* Definition Lists */ |
| dl dt { margin-bottom: 0.3em; font-weight: bold; } |
| dl dd { margin-bottom: 0.75em; } |
| |
| /* Abbreviations */ |
| abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #ddd; cursor: help; } |
| |
| abbr { text-transform: none; } |
| |
| /* Blockquotes */ |
| blockquote { margin: 0 0 0.75em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #ddd; } |
| blockquote cite { display: block; font-size: 0.8125em; color: #365E7A; } |
| blockquote cite:before { content: "\2014 \0020"; } |
| blockquote cite a, blockquote cite a:visited { color: #365E7A; } |
| |
| blockquote, blockquote p { line-height: 1.6; color: #333; } |
| |
| /* Microformats */ |
| .vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #ddd; padding: 0.625em 0.75em; } |
| .vcard li { margin: 0; display: block; } |
| .vcard .fn { font-weight: bold; font-size: 0.9375em; } |
| |
| .vevent .summary { font-weight: bold; } |
| .vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; } |
| |
| @media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } |
| h1 { font-size: 2.75em; } |
| h2 { font-size: 2.3125em; } |
| h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; } |
| h4 { font-size: 1.4375em; } } |
| /* Tables */ |
| table { background: #fff; margin-bottom: 1.25em; border: solid 1px #d8d8ce; } |
| table thead, table tfoot { background: #eee; font-weight: bold; } |
| table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 0.5em 0.625em 0.625em; font-size: inherit; color: #222; text-align: left; } |
| table tr th, table tr td { padding: 0.5625em 0.625em; font-size: inherit; color: #6d6e71; } |
| table tr.even, table tr.alt, table tr:nth-of-type(even) { background: #f8f8f8; } |
| table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.4; } |
| |
| body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; tab-size: 4; } |
| |
| h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } |
| |
| a:hover, a:focus { text-decoration: underline; } |
| |
| .clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; } |
| .clearfix:after, .float-group:after { clear: both; } |
| |
| *:not(pre) > code { font-size: inherit; font-style: normal !important; letter-spacing: 0; padding: 0; background-color: transparent; -webkit-border-radius: 0; border-radius: 0; line-height: inherit; word-wrap: break-word; } |
| *:not(pre) > code.nobreak { word-wrap: normal; } |
| *:not(pre) > code.nowrap { white-space: nowrap; } |
| |
| pre, pre > code { line-height: 1.6; color: #264357; font-family: Consolas, "Liberation Mono", Courier, monospace; font-weight: normal; } |
| |
| em em { font-style: normal; } |
| |
| strong strong { font-weight: normal; } |
| |
| .keyseq { color: #333333; } |
| |
| kbd { font-family: Consolas, "Liberation Mono", Courier, monospace; display: inline-block; color: black; font-size: 0.65em; line-height: 1.45; background-color: #f7f7f7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 0.1em white inset; margin: 0 0.15em; padding: 0.2em 0.5em; vertical-align: middle; position: relative; top: -0.1em; white-space: nowrap; } |
| |
| .keyseq kbd:first-child { margin-left: 0; } |
| |
| .keyseq kbd:last-child { margin-right: 0; } |
| |
| .menuseq, .menuref { color: #000; } |
| |
| .menuseq b:not(.caret), .menuref { font-weight: inherit; } |
| |
| .menuseq { word-spacing: -0.02em; } |
| .menuseq b.caret { font-size: 1.25em; line-height: 0.8; } |
| .menuseq i.caret { font-weight: bold; text-align: center; width: 0.45em; } |
| |
| b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; } |
| |
| b.button:before { content: "["; padding: 0 3px 0 2px; } |
| |
| b.button:after { content: "]"; padding: 0 2px 0 3px; } |
| |
| #header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 1.5em; padding-right: 1.5em; } |
| #header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; } |
| #header:after, #content:after, #footnotes:after, #footer:after { clear: both; } |
| |
| #content { margin-top: 1.25em; } |
| |
| #content:before { content: none; } |
| |
| #header > h1:first-child { color: black; margin-top: 2.25rem; margin-bottom: 0; } |
| #header > h1:first-child + #toc { margin-top: 8px; border-top: 1px solid #ddd; } |
| #header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #ddd; padding-bottom: 8px; } |
| #header .details { border-bottom: 1px solid #ddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #365E7A; display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; } |
| #header .details span:first-child { margin-left: -0.125em; } |
| #header .details span.email a { color: #333; } |
| #header .details br { display: none; } |
| #header .details br + span:before { content: "\00a0\2013\00a0"; } |
| #header .details br + span.author:before { content: "\00a0\22c5\00a0"; color: #333; } |
| #header .details br + span#revremark:before { content: "\00a0|\00a0"; } |
| #header #revnumber { text-transform: capitalize; } |
| #header #revnumber:after { content: "\00a0"; } |
| |
| #content > h1:first-child:not([class]) { color: black; border-bottom: 1px solid #ddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; } |
| |
| #toc { border-bottom: 0 solid #ddd; padding-bottom: 0.5em; } |
| #toc > ul { margin-left: 0.125em; } |
| #toc ul.sectlevel0 > li > a { font-style: italic; } |
| #toc ul.sectlevel0 ul.sectlevel1 { margin: 0.5em 0; } |
| #toc ul { font-family: Noto, sans-serif; list-style-type: none; } |
| #toc li { line-height: 1.3334; margin-top: 0.3334em; } |
| #toc a { text-decoration: none; } |
| #toc a:active { text-decoration: underline; } |
| |
| #toctitle { color: black; font-size: 1.2em; } |
| |
| @media only screen and (min-width: 768px) { #toctitle { font-size: 1.375em; } |
| body.toc2 { padding-left: 15em; padding-right: 0; } |
| #toc.toc2 { margin-top: 0 !important; background-color: #fff; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #ddd; border-top-width: 0 !important; border-bottom-width: 0 !important; z-index: 1000; padding: 1.25em 1em; height: 100%; overflow: auto; } |
| #toc.toc2 #toctitle { margin-top: 0; margin-bottom: 0.8rem; font-size: 1.2em; } |
| #toc.toc2 > ul { font-size: 0.9em; margin-bottom: 0; } |
| #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; } |
| #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } |
| body.toc2.toc-right { padding-left: 0; padding-right: 15em; } |
| body.toc2.toc-right #toc.toc2 { border-right-width: 0; border-left: 1px solid #ddd; left: auto; right: 0; } } |
| @media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; } |
| #toc.toc2 { width: 20em; } |
| #toc.toc2 #toctitle { font-size: 1.375em; } |
| #toc.toc2 > ul { font-size: 0.95em; } |
| #toc.toc2 ul ul { padding-left: 1.25em; } |
| body.toc2.toc-right { padding-left: 0; padding-right: 20em; } } |
| #content #toc { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; } |
| #content #toc > :first-child { margin-top: 0; } |
| #content #toc > :last-child { margin-bottom: 0; } |
| |
| #footer { max-width: 100%; background: none; padding: 1.25em; } |
| |
| #footer-text { color: black; line-height: 1.44; } |
| |
| #content { margin-bottom: 0.625em; } |
| |
| .sect1 { padding-bottom: 0.625em; } |
| |
| @media only screen and (min-width: 768px) { #content { margin-bottom: 1.25em; } |
| .sect1 { padding-bottom: 1.25em; } } |
| .sect1:last-child { padding-bottom: 0; } |
| |
| .sect1 + .sect1 { border-top: 0 solid #ddd; } |
| |
| #content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; z-index: 1001; width: 1.5ex; margin-left: -1.5ex; display: block; text-decoration: none !important; visibility: hidden; text-align: center; font-weight: normal; } |
| #content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: "\00A7"; font-size: 0.85em; display: block; padding-top: 0.1em; } |
| #content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; } |
| #content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: black; text-decoration: none; } |
| #content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: black; } |
| |
| .audioblock, .imageblock, .literalblock, .listingblock, .stemblock, .videoblock { margin-bottom: 1.25em; } |
| |
| .admonitionblock td.content > .title, .audioblock > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .stemblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, table.tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-rendering: optimizeLegibility; text-align: left; } |
| |
| table.tableblock > caption.title { white-space: nowrap; overflow: visible; max-width: 0; } |
| |
| .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { color: black; } |
| |
| table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } |
| |
| .admonitionblock > table { border-collapse: separate; border: 0; background: none; width: 100%; } |
| .admonitionblock > table td.icon { text-align: center; width: 80px; } |
| .admonitionblock > table td.icon img { max-width: initial; } |
| .admonitionblock > table td.icon .title { font-weight: bold; font-family: Noto, sans-serif; text-transform: uppercase; } |
| .admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #ddd; color: #365E7A; } |
| .admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; } |
| |
| .exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; } |
| .exampleblock > .content > :first-child { margin-top: 0; } |
| .exampleblock > .content > :last-child { margin-bottom: 0; } |
| |
| .sidebarblock { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: #fff; -webkit-border-radius: 0; border-radius: 0; } |
| .sidebarblock > :first-child { margin-top: 0; } |
| .sidebarblock > :last-child { margin-bottom: 0; } |
| .sidebarblock > .content > .title { color: black; margin-top: 0; } |
| |
| .exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; } |
| |
| .literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { background: #eee; } |
| .sidebarblock .literalblock pre, .sidebarblock .listingblock pre:not(.highlight), .sidebarblock .listingblock pre[class="highlight"], .sidebarblock .listingblock pre[class^="highlight "], .sidebarblock .listingblock pre.CodeRay, .sidebarblock .listingblock pre.prettyprint { background: #f2f1f1; } |
| |
| .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border: 1px hidden #666; -webkit-border-radius: 0; border-radius: 0; word-wrap: break-word; padding: 1.25em 1.5625em 1.125em 1.5625em; font-size: 0.8125em; } |
| .literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; } |
| @media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.90625em; } } |
| @media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 1em; } } |
| |
| .literalblock.output pre { color: #eee; background-color: #264357; } |
| |
| .listingblock pre.highlightjs { padding: 0; } |
| .listingblock pre.highlightjs > code { padding: 1.25em 1.5625em 1.125em 1.5625em; -webkit-border-radius: 0; border-radius: 0; } |
| |
| .listingblock > .content { position: relative; } |
| |
| .listingblock code[data-lang]:before { display: none; content: attr(data-lang); position: absolute; font-size: 0.75em; top: 0.425rem; right: 0.5rem; line-height: 1; text-transform: uppercase; color: #999; } |
| |
| .listingblock:hover code[data-lang]:before { display: block; } |
| |
| .listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; } |
| |
| .listingblock.terminal pre .command:not([data-prompt]):before { content: "$"; } |
| |
| table.pyhltable { border-collapse: separate; border: 0; margin-bottom: 0; background: none; } |
| |
| table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; line-height: 1.6; } |
| |
| table.pyhltable td.code { padding-left: .75em; padding-right: 0; } |
| |
| pre.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #ddd; } |
| |
| pre.pygments .lineno { display: inline-block; margin-right: .25em; } |
| |
| table.pyhltable .linenodiv { background: none !important; padding-right: 0 !important; } |
| |
| .quoteblock { margin: 0 1em 0.75em 1.5em; display: table; } |
| .quoteblock > .title { margin-left: -1.5em; margin-bottom: 0.75em; } |
| .quoteblock blockquote, .quoteblock blockquote p { color: #333; font-size: 1.15rem; line-height: 1.75; word-spacing: 0.1em; letter-spacing: 0; font-style: italic; text-align: justify; } |
| .quoteblock blockquote { margin: 0; padding: 0; border: 0; } |
| .quoteblock blockquote:before { content: "\201c"; float: left; font-size: 2.75em; font-weight: bold; line-height: 0.6em; margin-left: -0.6em; color: black; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); } |
| .quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; } |
| .quoteblock .attribution { margin-top: 0.5em; margin-right: 0.5ex; text-align: right; } |
| .quoteblock .quoteblock { margin-left: 0; margin-right: 0; padding: 0.5em 0; border-left: 3px solid #365E7A; } |
| .quoteblock .quoteblock blockquote { padding: 0 0 0 0.75em; } |
| .quoteblock .quoteblock blockquote:before { display: none; } |
| |
| .verseblock { margin: 0 1em 0.75em 1em; } |
| .verseblock pre { font-family: "Open Sans", "DejaVu Sans", sans; font-size: 1.15rem; color: #333; font-weight: 300; text-rendering: optimizeLegibility; } |
| .verseblock pre strong { font-weight: 400; } |
| .verseblock .attribution { margin-top: 1.25rem; margin-left: 0.5ex; } |
| |
| .quoteblock .attribution, .verseblock .attribution { font-size: 0.8125em; line-height: 1.45; font-style: italic; } |
| .quoteblock .attribution br, .verseblock .attribution br { display: none; } |
| .quoteblock .attribution cite, .verseblock .attribution cite { display: block; letter-spacing: -0.025em; color: #365E7A; } |
| |
| .quoteblock.abstract { margin: 0 0 0.75em 0; display: block; } |
| .quoteblock.abstract blockquote, .quoteblock.abstract blockquote p { text-align: left; word-spacing: 0; } |
| .quoteblock.abstract blockquote:before, .quoteblock.abstract blockquote p:first-of-type:before { display: none; } |
| |
| table.tableblock { max-width: 100%; border-collapse: separate; } |
| table.tableblock td > .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; } |
| |
| table.tableblock, th.tableblock, td.tableblock { border: 0 solid #d8d8ce; } |
| |
| table.grid-all > thead > tr > .tableblock, table.grid-all > tbody > tr > .tableblock { border-width: 0 1px 1px 0; } |
| |
| table.grid-all > tfoot > tr > .tableblock { border-width: 1px 1px 0 0; } |
| |
| table.grid-cols > * > tr > .tableblock { border-width: 0 1px 0 0; } |
| |
| table.grid-rows > thead > tr > .tableblock, table.grid-rows > tbody > tr > .tableblock { border-width: 0 0 1px 0; } |
| |
| table.grid-rows > tfoot > tr > .tableblock { border-width: 1px 0 0 0; } |
| |
| table.grid-all > * > tr > .tableblock:last-child, table.grid-cols > * > tr > .tableblock:last-child { border-right-width: 0; } |
| |
| table.grid-all > tbody > tr:last-child > .tableblock, table.grid-all > thead:last-child > tr > .tableblock, table.grid-rows > tbody > tr:last-child > .tableblock, table.grid-rows > thead:last-child > tr > .tableblock { border-bottom-width: 0; } |
| |
| table.frame-all { border-width: 1px; } |
| |
| table.frame-sides { border-width: 0 1px; } |
| |
| table.frame-topbot { border-width: 1px 0; } |
| |
| th.halign-left, td.halign-left { text-align: left; } |
| |
| th.halign-right, td.halign-right { text-align: right; } |
| |
| th.halign-center, td.halign-center { text-align: center; } |
| |
| th.valign-top, td.valign-top { vertical-align: top; } |
| |
| th.valign-bottom, td.valign-bottom { vertical-align: bottom; } |
| |
| th.valign-middle, td.valign-middle { vertical-align: middle; } |
| |
| table thead th, table tfoot th { font-weight: bold; } |
| |
| tbody tr th { display: table-cell; line-height: 1.4; background: #eee; } |
| |
| tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222; font-weight: bold; } |
| |
| p.tableblock > code:only-child { background: none; padding: 0; } |
| |
| p.tableblock { font-size: 1em; } |
| |
| td > div.verse { white-space: pre; } |
| |
| ol { margin-left: 1.75em; } |
| |
| ul li ol { margin-left: 1.5em; } |
| |
| dl dd { margin-left: 1.125em; } |
| |
| dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; } |
| |
| ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.375em; } |
| |
| ul.checklist, ul.none, ol.none, ul.no-bullet, ol.no-bullet, ol.unnumbered, ul.unstyled, ol.unstyled { list-style-type: none; } |
| |
| ul.no-bullet, ol.no-bullet, ol.unnumbered { margin-left: 0.625em; } |
| |
| ul.unstyled, ol.unstyled { margin-left: 0; } |
| |
| ul.checklist { margin-left: 0.625em; } |
| |
| ul.checklist li > p:first-child > .fa-square-o:first-child, ul.checklist li > p:first-child > .fa-check-square-o:first-child { width: 1.25em; font-size: 0.8em; position: relative; bottom: 0.125em; } |
| |
| ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; } |
| |
| ul.inline { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-flow: row wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; list-style: none; margin: 0 0 0.375em -0.75em; } |
| |
| ul.inline > li { margin-left: 0.75em; } |
| |
| .unstyled dl dt { font-weight: normal; font-style: normal; } |
| |
| ol.arabic { list-style-type: decimal; } |
| |
| ol.decimal { list-style-type: decimal-leading-zero; } |
| |
| ol.loweralpha { list-style-type: lower-alpha; } |
| |
| ol.upperalpha { list-style-type: upper-alpha; } |
| |
| ol.lowerroman { list-style-type: lower-roman; } |
| |
| ol.upperroman { list-style-type: upper-roman; } |
| |
| ol.lowergreek { list-style-type: lower-greek; } |
| |
| .hdlist > table, .colist > table { border: 0; background: none; } |
| .hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; } |
| |
| td.hdlist1, td.hdlist2 { vertical-align: top; padding: 0 0.625em; } |
| |
| td.hdlist1 { font-weight: bold; padding-bottom: 0.75em; } |
| |
| .literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; } |
| |
| .colist > table tr > td:first-of-type { padding: 0.4em 0.75em 0 0.75em; line-height: 1; vertical-align: top; } |
| .colist > table tr > td:first-of-type img { max-width: initial; } |
| .colist > table tr > td:last-of-type { padding: 0.25em 0; } |
| |
| .thumb, .th { line-height: 0; display: inline-block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px #ddd; box-shadow: 0 0 0 1px #ddd; } |
| |
| .imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; } |
| .imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; } |
| .imageblock > .title { margin-bottom: 0; } |
| .imageblock.thumb, .imageblock.th { border-width: 6px; } |
| .imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; } |
| |
| .image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; } |
| .image.left { margin-right: 0.625em; } |
| .image.right { margin-left: 0.625em; } |
| |
| a.image { text-decoration: none; display: inline-block; } |
| a.image object { pointer-events: none; } |
| |
| sup.footnote, sup.footnoteref { font-size: 0.875em; position: static; vertical-align: super; } |
| sup.footnote a, sup.footnoteref a { text-decoration: none; } |
| sup.footnote a:active, sup.footnoteref a:active { text-decoration: underline; } |
| |
| #footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; } |
| #footnotes hr { width: 20%; min-width: 6.25em; margin: -0.25em 0 0.75em 0; border-width: 1px 0 0 0; } |
| #footnotes .footnote { padding: 0 0.375em 0 0.225em; line-height: 1.3334; font-size: 0.875em; margin-left: 1.2em; margin-bottom: 0.2em; } |
| #footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; margin-left: -1.05em; } |
| #footnotes .footnote:last-of-type { margin-bottom: 0; } |
| #content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; } |
| |
| .gist .file-data > table { border: 0; background: #fff; width: 100%; margin-bottom: 0; } |
| .gist .file-data > table td.line-data { width: 99%; } |
| |
| div.unbreakable { page-break-inside: avoid; } |
| |
| .big { font-size: larger; } |
| |
| .small { font-size: smaller; } |
| |
| .underline { text-decoration: underline; } |
| |
| .overline { text-decoration: overline; } |
| |
| .line-through { text-decoration: line-through; } |
| |
| .aqua { color: #00bfbf; } |
| |
| .aqua-background { background-color: #00fafa; } |
| |
| .black { color: black; } |
| |
| .black-background { background-color: black; } |
| |
| .blue { color: #0000bf; } |
| |
| .blue-background { background-color: #0000fa; } |
| |
| .fuchsia { color: #bf00bf; } |
| |
| .fuchsia-background { background-color: #fa00fa; } |
| |
| .gray { color: #606060; } |
| |
| .gray-background { background-color: #7d7d7d; } |
| |
| .green { color: #006000; } |
| |
| .green-background { background-color: #007d00; } |
| |
| .lime { color: #00bf00; } |
| |
| .lime-background { background-color: #00fa00; } |
| |
| .maroon { color: #600000; } |
| |
| .maroon-background { background-color: #7d0000; } |
| |
| .navy { color: #000060; } |
| |
| .navy-background { background-color: #00007d; } |
| |
| .olive { color: #606000; } |
| |
| .olive-background { background-color: #7d7d00; } |
| |
| .purple { color: #600060; } |
| |
| .purple-background { background-color: #7d007d; } |
| |
| .red { color: #bf0000; } |
| |
| .red-background { background-color: #fa0000; } |
| |
| .silver { color: #909090; } |
| |
| .silver-background { background-color: #bcbcbc; } |
| |
| .teal { color: #006060; } |
| |
| .teal-background { background-color: #007d7d; } |
| |
| .white { color: #bfbfbf; } |
| |
| .white-background { background-color: #fafafa; } |
| |
| .yellow { color: #bfbf00; } |
| |
| .yellow-background { background-color: #fafa00; } |
| |
| span.icon > .fa { cursor: default; } |
| a span.icon > .fa { cursor: inherit; } |
| |
| .admonitionblock td.icon [class^="fa icon-"] { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; } |
| .admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #29475c; } |
| .admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; } |
| .admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; } |
| .admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; } |
| .admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; } |
| |
| .conum[data-value] { display: inline-block; color: #fff !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; font-size: 0.75em; width: 1.67em; height: 1.67em; line-height: 1.67em; font-family: "Open Sans", "DejaVu Sans", sans-serif; font-style: normal; font-weight: bold; } |
| .conum[data-value] * { color: #fff !important; } |
| .conum[data-value] + b { display: none; } |
| .conum[data-value]:after { content: attr(data-value); } |
| pre .conum[data-value] { position: relative; top: -0.125em; } |
| |
| b.conum * { color: inherit !important; } |
| |
| .conum:not([data-value]):empty { display: none; } |
| |
| h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { border-bottom: 1px solid #ddd; } |
| |
| .sect1 { padding-bottom: 0; } |
| |
| #toctitle { color: #00406F; font-weight: normal; margin-top: 1.5em; } |
| |
| .sidebarblock { border-color: #aaa; } |
| |
| code { -webkit-border-radius: 4px; border-radius: 4px; } |
| |
| p.tableblock.header { color: #6d6e71; } |
| |
| .literalblock pre, .listingblock pre { background: #eee; } |
| |
| /* From https://github.com/KhronosGroup/Vulkan-Docs/pull/901 */ |
| a code { color: inherit; } |
| |
| /* From https://github.com/KhronosGroup/Vulkan-Docs/pull/1157 */ |
| /* Make VUID anchor handles*/ |
| li > p > a[id^="VUID-"] { visibility: hidden; position: absolute; z-index: 1001; width: 2.2ex; margin-left: -2.2ex; display: block; text-decoration: none !important; text-align: center; font-weight: normal; } |
| |
| li > p > a[id^="VUID-"]:before { content: "\00A7"; font-size: 1em; display: block; padding-top: 0em; background: #fff; } |
| |
| li > p:hover > a[id^="VUID-"], li > p > a[id^="VUID-"]:hover { visibility: visible; } |
| |
| li > p > a[id^="VUID-"].link { color: black; text-decoration: none; } |
| |
| /* TODO: not quite sure what these two do */ |
| li > p > a[id^="VUID-"].link:hover { color: black; } |
| |
| .vuid { color: #4d4d4d; font-family: monospace; } |
| |
| </style> |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> |
| <style> |
| pre.rouge table td { padding: 5px; } |
| pre.rouge table pre { margin: 0; } |
| pre.rouge .kp { |
| color: #445588; |
| font-weight: bold; |
| font-style: italic; |
| } |
| pre.rouge .fm { |
| color: #00c5cd; |
| font-weight: bold; |
| } |
| pre.rouge .nx { |
| color: #ff4500; |
| font-weight: bold; |
| } |
| pre.rouge .vm { |
| color: #ffa500; |
| font-weight: bold; |
| } |
| pre.rouge .cm { |
| color: #555544; |
| font-style: italic; |
| } |
| pre.rouge .cp { |
| color: #555555; |
| font-weight: bold; |
| } |
| pre.rouge .c1 { |
| color: #555544; |
| font-style: italic; |
| } |
| pre.rouge .cs { |
| color: #555555; |
| font-weight: bold; |
| font-style: italic; |
| } |
| pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf { |
| color: #555544; |
| font-style: italic; |
| } |
| pre.rouge, pre.rouge .w { |
| color: #24292f; |
| background-color: #f6f8fa; |
| } |
| pre.rouge .k, pre.rouge .kd, pre.rouge .kn, pre.rouge .kr, pre.rouge .kt, pre.rouge .kv { |
| color: #cf222e; |
| } |
| pre.rouge .gr { |
| color: #f6f8fa; |
| } |
| pre.rouge .gd { |
| color: #82071e; |
| background-color: #ffebe9; |
| } |
| pre.rouge .nb { |
| color: #953800; |
| } |
| pre.rouge .nc { |
| color: #953800; |
| } |
| pre.rouge .no { |
| color: #953800; |
| } |
| pre.rouge .nn { |
| color: #953800; |
| } |
| pre.rouge .sr { |
| color: #116329; |
| } |
| pre.rouge .na { |
| color: #116329; |
| } |
| pre.rouge .nt { |
| color: #116329; |
| } |
| pre.rouge .gi { |
| color: #116329; |
| background-color: #dafbe1; |
| } |
| pre.rouge .ges { |
| font-weight: bold; |
| font-style: italic; |
| } |
| pre.rouge .kc { |
| color: #0550ae; |
| } |
| pre.rouge .l, pre.rouge .ld, pre.rouge .m, pre.rouge .mb, pre.rouge .mf, pre.rouge .mh, pre.rouge .mi, pre.rouge .il, pre.rouge .mo, pre.rouge .mx { |
| color: #0550ae; |
| } |
| pre.rouge .sb { |
| color: #0550ae; |
| } |
| pre.rouge .bp { |
| color: #0550ae; |
| } |
| pre.rouge .ne { |
| color: #0550ae; |
| } |
| pre.rouge .nl { |
| color: #0550ae; |
| } |
| pre.rouge .py { |
| color: #0550ae; |
| } |
| pre.rouge .nv, pre.rouge .vc, pre.rouge .vg, pre.rouge .vi { |
| color: #0550ae; |
| } |
| pre.rouge .o, pre.rouge .ow { |
| color: #0550ae; |
| } |
| pre.rouge .gh { |
| color: #0550ae; |
| font-weight: bold; |
| } |
| pre.rouge .gu { |
| color: #0550ae; |
| font-weight: bold; |
| } |
| pre.rouge .s, pre.rouge .sa, pre.rouge .sc, pre.rouge .dl, pre.rouge .sd, pre.rouge .s2, pre.rouge .se, pre.rouge .sh, pre.rouge .sx, pre.rouge .s1, pre.rouge .ss { |
| color: #0a3069; |
| } |
| pre.rouge .nd { |
| color: #8250df; |
| } |
| pre.rouge .nf { |
| color: #8250df; |
| } |
| pre.rouge .err { |
| color: #f6f8fa; |
| background-color: #82071e; |
| } |
| pre.rouge .gl { |
| color: #6e7781; |
| } |
| pre.rouge .gt { |
| color: #6e7781; |
| } |
| pre.rouge .ni { |
| color: #24292f; |
| } |
| pre.rouge .si { |
| color: #24292f; |
| } |
| pre.rouge .ge { |
| color: #24292f; |
| font-style: italic; |
| } |
| pre.rouge .gs { |
| color: #24292f; |
| font-weight: bold; |
| } |
| </style> |
| <link rel="stylesheet" href="../katex/katex.min.css"> |
| <script src="../katex/katex.min.js"></script> |
| <script src="../katex/contrib/auto-render.min.js"></script> |
| <!-- Use KaTeX to render math once document is loaded, see |
| https://github.com/Khan/KaTeX/tree/master/contrib/auto-render --> |
| <script> |
| document.addEventListener("DOMContentLoaded", function () { |
| renderMathInElement( |
| document.body, |
| { |
| delimiters: [ |
| { left: "$$", right: "$$", display: true}, |
| { left: "\\[", right: "\\]", display: true}, |
| { left: "$", right: "$", display: false}, |
| { left: "\\(", right: "\\)", display: false} |
| ] |
| } |
| ); |
| }); |
| </script></head> |
| <body class="book toc2 toc-left"> |
| <div style="text-align: left;"> |
| <span class="image"><img src="data:image/png;base64,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" alt="OpenCL Logo" width="550" height="250"> |
| </span> |
| </div> |
| <div id="header" style="max-width: 100%;"> |
| <h1>The OpenCL<sup>™</sup> Extension Specification</h1> |
| <div class="details"> |
| <span id="author" class="author">Khronos<sup>®</sup> OpenCL Working Group</span><br> |
| <span id="revnumber">version v3.0.19,</span> |
| <span id="revdate">Thu, 10 Jul 2025 11:00:00 +0000</span> |
| <br><span id="revremark">from git branch: main commit: 85da0d12c298ffa9eefd2adb1864f2c8193cbe3e</span> |
| </div> |
| <div id="toc" class="toc2"> |
| <div id="toctitle">Table of Contents</div> |
| <ul class="sectlevel1"> |
| <li><a href="#extensions-overview">1. Extensions Overview</a></li> |
| <li><a href="#_extensions_promoted_to_core_features">Appendix A: Extensions Promoted to Core Features</a></li> |
| <li><a href="#_deprecated_extensions">Appendix B: Deprecated Extensions</a></li> |
| <li><a href="#quick-reference">Appendix C: Quick Reference</a></li> |
| </ul> |
| </div> |
| </div> |
| <div id="content" style="max-width: 100%;"> |
| <div id="preamble"> |
| <div class="sectionbody"> |
| <div style="page-break-after: always;"></div> |
| <div class="paragraph"> |
| <p>Copyright 2008-2025 The Khronos Group Inc.</p> |
| </div> |
| <div class="paragraph"> |
| <p>This Specification is protected by copyright laws and contains material proprietary to Khronos. |
| Except as described by these terms, it or any components may not be reproduced, republished, |
| distributed, transmitted, displayed, broadcast or otherwise exploited in any manner without the |
| express prior written permission of Khronos.</p> |
| </div> |
| <div class="paragraph"> |
| <p>This Specification has been created under the Khronos Intellectual Property Rights |
| Policy, which is Attachment A of the Khronos Group Membership Agreement available at |
| www.khronos.org/files/member_agreement.pdf and defines the terms 'Scope', 'Compliant Portion', |
| and 'Necessary Patent Claims'.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Khronos grants a conditional copyright license to use and reproduce the |
| unmodified Specification for any purpose, without fee or royalty, EXCEPT no licenses |
| to any patent, trademark or other intellectual property rights are granted under these |
| terms. Parties desiring to implement the Specification and make use of Khronos trademarks |
| in relation to that implementation, and receive reciprocal patent license protection under |
| the Khronos Intellectual Property Rights Policy must become Adopters and confirm the |
| implementation as conformant under the process defined by Khronos for this Specification; |
| see <a href="https://www.khronos.org/adopters" class="bare">https://www.khronos.org/adopters</a>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Khronos makes no, and expressly disclaims any, representations or warranties, |
| express or implied, regarding this Specification, including, without limitation: |
| merchantability, fitness for a particular purpose, non-infringement of any |
| intellectual property, correctness, accuracy, completeness, timeliness, and |
| reliability. Under no circumstances will Khronos, or any of its Promoters, |
| Contributors or Members, or their respective partners, officers, directors, |
| employees, agents or representatives be liable for any damages, whether direct, |
| indirect, special or consequential damages for lost revenues, lost profits, or |
| otherwise, arising from or in connection with these materials.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Where this Specification identifies specific sections of external references, only those |
| specifically identified sections define normative functionality. The Khronos Intellectual |
| Property Rights Policy excludes external references to materials and associated enabling |
| technology not created by Khronos from the Scope of this specification, and any licenses |
| that may be required to implement such referenced materials and associated technologies |
| must be obtained separately and may involve royalty payments.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Khronos® and Vulkan® are registered trademarks, and SPIR™, SPIR-V™, and SYCL™ are trademarks |
| of The Khronos Group Inc. OpenCLâ„¢ is a trademark of Apple Inc. used under license by Khronos. |
| OpenGL® is a registered trademark and the OpenGL ES™ and OpenGL SC™ logos |
| are trademarks of Hewlett Packard Enterprise used under license by Khronos. |
| All other product names, trademarks, and/or company names are used solely for identification |
| and belong to their respective owners.</p> |
| </div> |
| <div style="page-break-after: always;"></div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="extensions-overview"><a class="anchor" href="#extensions-overview"></a>1. Extensions Overview</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p><em>Extensions</em> are optional features which may be supported by OpenCL |
| implementations. |
| Extensions are not required to be supported by a conformant OpenCL |
| implementation, but are expected to be widely available, and in some cases |
| may define functionality that is likely to be required in a future revision |
| of the OpenCL specification.</p> |
| </div> |
| <div class="paragraph"> |
| <p>In the past, this document contained full specification language for |
| Khronos-approved <code>khr</code> extensions, described in terms of changes to the core |
| OpenCL Specification. |
| This extension language has now been integrated into the OpenCL 3.0 |
| Specification, and can be read in context there.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The remaining parts of this document describe general issues in <em>using</em> |
| extensions, such as API <a href="#naming-convention-for-optional-extensions">Naming |
| Conventions for Optional Extensions</a>; OpenCL C |
| <a href="#compiler-directives-for-optional-extensions">Compiler Directives for |
| Optional Extensions</a>; and <a href="#getting-opencl-api-extension-function-pointers">Getting OpenCL API Extension Function Pointers</a>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>In addition, there is a section on <a href="#spirv_extensions">Extensions to the |
| OpenCL SPIR-V Environment</a>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Finally, the <a href="#quick-reference">Quick Reference</a> appendix summarizes khr |
| extensions and links to them in the OpenCL API Specification. |
| In some cases, extensions are mostly or entirely to the OpenCL C language |
| rather than to the OpenCL API. |
| Such extensions can be reached by following the links in the API |
| Specification extension appendices.</p> |
| </div> |
| <div class="sect2"> |
| <h3 id="naming-convention-for-optional-extensions"><a class="anchor" href="#naming-convention-for-optional-extensions"></a>1.1. Naming Convention for Optional Extensions</h3> |
| <div class="paragraph"> |
| <p>OpenCL extensions approved by the OpenCL working group use the following |
| naming convention:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>A unique <em>name string</em> of the form <code>"<strong>cl_khr_<<em>name</em>></strong>"</code> is associated |
| with each extension. |
| If the extension is supported by an implementation, this string will be |
| present in the implementation’s <code>CL_PLATFORM_<wbr>EXTENSIONS</code> string or |
| <code>CL_DEVICE_<wbr>EXTENSIONS</code> string.</p> |
| </li> |
| <li> |
| <p>All API functions defined by the extension will have names of the form |
| <strong>cl<<em>function_name</em>>KHR</strong>.</p> |
| </li> |
| <li> |
| <p>All enumerants defined by the extension will have names of the form |
| <strong>CL_<<em>enum_name</em>>_KHR.</strong></p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Functions and enumerants defined by extensions that are promoted to |
| core features will have their <strong>KHR</strong> affix removed. |
| OpenCL implementations of such later revisions must also export the name |
| strings of promoted extensions in the <code>CL_PLATFORM_<wbr>EXTENSIONS</code> or |
| <code>CL_DEVICE_<wbr>EXTENSIONS</code> string, and support the <strong>KHR</strong>-affixed versions of |
| functions and enumerants as a transition aid.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Vendor extensions are strongly encouraged to follow a similar naming |
| convention:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>A unique <em>name string</em> of the form <code>"<strong>cl_<<em>vendor_name</em>>_<<em>name></em></strong>"</code> |
| is associated with each extension. |
| If the extension is supported by an implementation, this string will be |
| present in the implementation’s <code>CL_PLATFORM_<wbr>EXTENSIONS</code> string or |
| <code>CL_DEVICE_<wbr>EXTENSIONS</code> string.</p> |
| </li> |
| <li> |
| <p>All API functions defined by the vendor extension will have names of the |
| form <strong>cl<<em>function_name</em>><<em>vendor_name</em>></strong>.</p> |
| </li> |
| <li> |
| <p>All enumerants defined by the vendor extension will have names of the |
| form <strong>CL_<<em>enum_name</em>>_<<em>vendor_name</em>>.</strong></p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="compiler-directives-for-optional-extensions"><a class="anchor" href="#compiler-directives-for-optional-extensions"></a>1.2. Compiler Directives for Optional Extensions</h3> |
| <div class="paragraph"> |
| <p>The <strong>#pragma OPENCL EXTENSION</strong> directive controls the behavior of the OpenCL |
| compiler with respect to extensions. |
| The <strong>#pragma OPENCL EXTENSION</strong> directive is defined as:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="opencl_c"><span class="cp">#pragma OPENCL EXTENSION <extension_name> : <behavior> |
| #pragma OPENCL EXTENSION all : <behavior></span></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>where <em>extension_name</em> is the name of the extension. |
| The <em>extension_name</em> will have names of the form <strong>cl_khr_<<em>name</em>></strong> for an |
| extension approved by the OpenCL working group and will have names of the |
| form <strong>cl_<<em>vendor_name</em>>_<<em>name</em>></strong> for vendor extensions. |
| The token <strong>all</strong> means that the behavior applies to all extensions supported |
| by the compiler. |
| The <em>behavior</em> can be set to one of the following values given by the table |
| below.</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top"><strong>behavior</strong></th> |
| <th class="tableblock halign-left valign-top"><strong>Description</strong></th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>enable</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Behave as specified by the extension <em>extension_name</em>.</p> |
| <p class="tableblock"> Report an error on the <strong><code>#pragma OPENCL EXTENSION</code></strong> if the |
| <em>extension_name</em> is not supported, or if <strong>all</strong> is specified.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>disable</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Behave (including issuing errors and warnings) as if the extension |
| <em>extension_name</em> is not part of the language definition.</p> |
| <p class="tableblock"> If <strong>all</strong> is specified, then behavior must revert back to that of the |
| non-extended core version of the language being compiled to.</p> |
| <p class="tableblock"> Warn on the <strong><code>#pragma OPENCL EXTENSION</code></strong> if the extension <em>extension_name</em> |
| is not supported.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>The <strong><code>#pragma OPENCL EXTENSION</code></strong> directive is a simple, low-level mechanism |
| to set the behavior for each extension. |
| It does not define policies such as which combinations are appropriate; |
| those must be defined elsewhere. |
| The order of directives matter in setting the behavior for each extension. |
| Directives that occur later override those seen earlier. |
| The <strong>all</strong> variant sets the behavior for all extensions, overriding all |
| previously issued extension directives, but only if the <em>behavior</em> is set to |
| <strong>disable</strong>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The initial state of the compiler is as if the directive</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="opencl_c"><span class="cp">#pragma OPENCL EXTENSION all : disable</span></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>was issued, telling the compiler that all error and warning reporting must |
| be done according to this specification, ignoring any extensions.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Every extension which affects the OpenCL language semantics, syntax or adds |
| built-in functions to the language must create a preprocessor <code>#define</code> that |
| matches the extension name string. |
| This <code>#define</code> would be available in the language if and only if the |
| extension is supported on a given implementation.</p> |
| </div> |
| <div class="paragraph"> |
| <p><strong>Example</strong>:</p> |
| </div> |
| <div class="paragraph"> |
| <p>An extension which adds the extension string <code>"cl_khr_3d_image_writes"</code> |
| should also add a preprocessor <code>#define</code> called <strong>cl_khr_3d_image_writes</strong>. |
| A kernel can now use this preprocessor <code>#define</code> to do something like:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="opencl_c"><span class="cp">#ifdef cl_khr_3d_image_writes |
| </span> <span class="c1">// do something using the extension</span> |
| <span class="cp">#else |
| </span> <span class="c1">// do something else or #error!</span> |
| <span class="cp">#endif</span></code></pre> |
| </div> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="getting-opencl-api-extension-function-pointers"><a class="anchor" href="#getting-opencl-api-extension-function-pointers"></a>1.3. Getting OpenCL API Extension Function Pointers</h3> |
| <div class="paragraph"> |
| <p>The function |
| </p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="opencl"><span class="kt">void</span><span class="o">*</span> <span class="n">clGetExtensionFunctionAddressForPlatform</span><span class="p">(</span><span class="kt">cl_platform_id</span> <span class="n">platform</span><span class="p">,</span> |
| <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">funcname</span><span class="p">)</span></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>returns the address of the extension function named by <em>funcname</em> for a |
| given <em>platform</em> The pointer returned should be cast to a function pointer |
| type matching the extension function’s definition defined in the appropriate |
| extension specification and header file. |
| A return value of <code>NULL</code> indicates that the specified function does not |
| exist for the implementation or <em>platform</em> is not a valid platform. |
| A non-<code>NULL</code> return value for <strong>clGetExtensionFunctionAddressForPlatform</strong> |
| does not guarantee that an extension function is actually supported by the |
| platform. |
| The application must also make a corresponding query using |
| <strong>clGetPlatformInfo</strong>(platform, CL_PLATFORM_EXTENSIONS, …​) or |
| <strong>clGetDeviceInfo</strong>(device, CL_DEVICE_EXTENSIONS, …​) to determine if an |
| extension is supported by the OpenCL implementation.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Since there is no way to qualify the query with a |
| device, the function pointer returned must work for all implementations of |
| that extension on different devices for a platform. |
| The behavior of calling a device extension function on a device not |
| supporting that extension is undefined.</p> |
| </div> |
| <div class="paragraph"> |
| <p><strong>clGetExtensionFunctionAddressForPlatform</strong> may not be used to query for core |
| (non-extension) functions in OpenCL. |
| For extension functions that may be queried using |
| <strong>clGetExtensionFunctionAddressForPlatform</strong>, implementations may also choose to |
| export those functions statically from the object libraries |
| implementing those functions, however, portable applications cannot rely on |
| this behavior.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Function pointer typedefs must be declared for all extensions that add API |
| entrypoints. |
| These typedefs are a required part of the extension interface, to be |
| provided in an appropriate header (such as cl_ext.h if the extension is an |
| OpenCL extension, or cl_gl_ext.h if the extension is an OpenCL / OpenGL |
| sharing extension).</p> |
| </div> |
| <div class="paragraph"> |
| <p>The following convention must be followed for all extensions affecting the |
| host API:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="opencl"><span class="cp">#ifndef extension_name |
| #define extension_name 1 |
| </span> |
| <span class="c1">// all data typedefs, token #defines, prototypes, and</span> |
| <span class="c1">// function pointer typedefs for this extension</span> |
| |
| <span class="c1">// function pointer typedefs must use the</span> |
| <span class="c1">// following naming convention</span> |
| |
| <span class="k">typedef</span> <span class="nf">return_type</span> |
| <span class="p">(</span><span class="n">CL_API_CALL</span> <span class="o">*</span><span class="n">clExtensionFunctionNameTAG_fn</span><span class="p">)(...);</span> |
| |
| <span class="cp">#endif // _extension_name_</span></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>where <code>TAG</code> can be <code>KHR</code>, <code>EXT</code> or <code>vendor-specific</code>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Consider, for example, the <code>cl_khr_<wbr>gl_<wbr>sharing</code> extension. |
| This extension would add the following to cl_gl_ext.h:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="opencl"><span class="cp">#ifndef cl_khr_gl_sharing |
| #define cl_khr_gl_sharing 1 |
| </span> |
| <span class="c1">// all data typedefs, token #defines, prototypes, and</span> |
| <span class="c1">// function pointer typedefs for this extension</span> |
| <span class="cp">#define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR -1000 |
| #define CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR 0x2006 |
| #define CL_DEVICES_FOR_GL_CONTEXT_KHR 0x2007 |
| #define CL_GL_CONTEXT_KHR 0x2008 |
| #define CL_EGL_DISPLAY_KHR 0x2009 |
| #define CL_GLX_DISPLAY_KHR 0x200A |
| #define CL_WGL_HDC_KHR 0x200B |
| #define CL_CGL_SHAREGROUP_KHR 0x200C |
| </span> |
| <span class="c1">// function pointer typedefs must use the</span> |
| <span class="c1">// following naming convention</span> |
| <span class="k">typedef</span> <span class="nf">cl_int</span> |
| <span class="p">(</span><span class="n">CL_API_CALL</span> <span class="o">*</span><span class="n">clGetGLContextInfoKHR_fn</span><span class="p">)(</span> |
| <span class="k">const</span> <span class="kt">cl_context_properties</span> <span class="o">*</span> <span class="cm">/* properties */</span><span class="p">,</span> |
| <span class="kt">cl_gl_context_info</span> <span class="cm">/* param_name */</span><span class="p">,</span> |
| <span class="kt">size_t</span> <span class="cm">/* param_value_size */</span><span class="p">,</span> |
| <span class="kt">void</span> <span class="o">*</span> <span class="cm">/* param_value */</span><span class="p">,</span> |
| <span class="kt">size_t</span> <span class="o">*</span> <span class="cm">/*param_value_size_ret*/</span><span class="p">);</span> |
| |
| <span class="cp">#endif // cl_khr_gl_sharing</span></code></pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_extensions_promoted_to_core_features"><a class="anchor" href="#_extensions_promoted_to_core_features"></a>Appendix A: Extensions Promoted to Core Features</h2> |
| <div class="sectionbody"> |
| <div class="sect2"> |
| <h3 id="_for_opencl_1_1"><a class="anchor" href="#_for_opencl_1_1"></a>A.1. For OpenCL 1.1:</h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>The functionality previously described by <code>cl_khr_<wbr>byte_<wbr>addressable_<wbr>store</code> is now part of the core feature set.</p> |
| </li> |
| <li> |
| <p>The functionality previously described by <code>cl_khr_<wbr>global_<wbr>int32_<wbr>base_<wbr>atomics</code>, <code>cl_khr_<wbr>global_<wbr>int32_<wbr>extended_<wbr>atomics</code>, <code>cl_khr_<wbr>local_<wbr>int32_<wbr>base_<wbr>atomics</code>, and <code>cl_khr_<wbr>local_<wbr>int32_<wbr>extended_<wbr>atomics</code> is now part of the core feature set.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_for_opencl_1_2"><a class="anchor" href="#_for_opencl_1_2"></a>A.2. For OpenCL 1.2:</h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>The functionality previously described by <code>cl_khr_<wbr>fp64</code> is now an optional core feature.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_for_opencl_2_0"><a class="anchor" href="#_for_opencl_2_0"></a>A.3. For OpenCL 2.0:</h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>The functionality described by <code>cl_khr_<wbr>3d_<wbr>image_<wbr>writes</code> is part of the core feature set.</p> |
| </li> |
| <li> |
| <p>The functionality described by <code>cl_khr_<wbr>create_<wbr>command_<wbr>queue</code> is part of the core feature set.</p> |
| </li> |
| <li> |
| <p>The functionality described by <code>cl_khr_<wbr>depth_<wbr>images</code> is now part of the core feature set.</p> |
| </li> |
| <li> |
| <p>The functionality described by <code>cl_khr_<wbr>image2d_<wbr>from_<wbr>buffer</code> is now part of the core feature set.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_for_opencl_2_1"><a class="anchor" href="#_for_opencl_2_1"></a>A.4. For OpenCL 2.1:</h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>The functionality described by <code>cl_khr_<wbr>il_<wbr>program</code> is now part of the core feature set.</p> |
| </li> |
| <li> |
| <p>The API functionality described by <code>cl_khr_<wbr>subgroups</code> is now part of the core API feature set, but the built-in functions described by <code>cl_khr_<wbr>subgroups</code> must still be accessed as an extension to the OpenCL 2.0 C Language specification.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_for_opencl_3_0"><a class="anchor" href="#_for_opencl_3_0"></a>A.5. For OpenCL 3.0:</h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>The API functionality described by <code>cl_khr_<wbr>extended_<wbr>versioning</code> is now part of the core API feature set, with minor modifications.</p> |
| </li> |
| <li> |
| <p>The built-in functions described by <code>cl_khr_<wbr>subgroups</code> are now supported in OpenCL C 3.0 when the {opencl_c_subgroups} feature is supported.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_deprecated_extensions"><a class="anchor" href="#_deprecated_extensions"></a>Appendix B: Deprecated Extensions</h2> |
| <div class="sectionbody"> |
| <div class="sect2"> |
| <h3 id="_for_opencl_1_1_2"><a class="anchor" href="#_for_opencl_1_1_2"></a>B.1. For OpenCL 1.1:</h3> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>The <code>cl_khr_<wbr>select_<wbr>fprounding_<wbr>mode</code> extension has been deprecated. |
| Its use is no longer recommended.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="quick-reference"><a class="anchor" href="#quick-reference"></a>Appendix C: Quick Reference</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Each extension in this table includes a link to the corresponding appendix |
| in the OpenCL 3.0 API Specification, which provides a fuller description and |
| references to the actual extension specification language in the API and C |
| Language Specifications.</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <colgroup> |
| <col style="width: 45.4545%;"> |
| <col style="width: 36.3636%;"> |
| <col style="width: 18.1819%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Extension Name and Link</th> |
| <th class="tableblock halign-left valign-top">Brief Description</th> |
| <th class="tableblock halign-left valign-top">Status</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_3d_image_writes"></a> <a href="OpenCL_API.html#cl_khr_3d_image_writes"><code>cl_khr_<wbr>3d_<wbr>image_<wbr>writes</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Write to 3D images</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.0</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_async_work_group_copy_fence"></a> <a href="OpenCL_API.html#cl_khr_async_work_group_copy_fence"><code>cl_khr_<wbr>async_<wbr>work_<wbr>group_<wbr>copy_<wbr>fence</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Asynchronous Copy Fences</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_byte_addressable_store"></a> <a href="OpenCL_API.html#cl_khr_byte_addressable_store"><code>cl_khr_<wbr>byte_<wbr>addressable_<wbr>store</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Read and write from 8-bit and 16-bit pointers</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 1.1</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_command_buffer"></a> <a href="OpenCL_API.html#cl_khr_command_buffer"><code>cl_khr_<wbr>command_<wbr>buffer</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Record and Replay Commands</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Experimental Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_command_buffer_multi_device"></a> <a href="OpenCL_API.html#cl_khr_command_buffer_multi_device"><code>cl_khr_<wbr>command_<wbr>buffer_<wbr>multi_<wbr>device</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Allow a command-buffer to contain commands targeting different devices</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Experimental Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_command_buffer_mutable_dispatch"></a> <a href="OpenCL_API.html#cl_khr_command_buffer_mutable_dispatch"><code>cl_khr_<wbr>command_<wbr>buffer_<wbr>mutable_<wbr>dispatch</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Modify kernel execution commands between enqueues of a command-buffer</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Experimental Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_create_command_queue"></a> <a href="OpenCL_API.html#cl_khr_create_command_queue"><code>cl_khr_<wbr>create_<wbr>command_<wbr>queue</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">API to Create Command-Queues with Properties</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.0</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_d3d10_sharing"></a> <a href="OpenCL_API.html#cl_khr_d3d10_sharing"><code>cl_khr_<wbr>d3d10_<wbr>sharing</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Share Direct3D 10 Buffers and Textures with OpenCL</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_d3d11_sharing"></a> <a href="OpenCL_API.html#cl_khr_d3d11_sharing"><code>cl_khr_<wbr>d3d11_<wbr>sharing</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Share Direct3D 11 Buffers and Textures with OpenCL</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_depth_images"></a> <a href="OpenCL_API.html#cl_khr_depth_images"><code>cl_khr_<wbr>depth_<wbr>images</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Single Channel Depth Images</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.0</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_device_enqueue_local_arg_types"></a> <a href="OpenCL_API.html#cl_khr_device_enqueue_local_arg_types"><code>cl_khr_<wbr>device_<wbr>enqueue_<wbr>local_<wbr>arg_<wbr>types</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Pass Non-Void Local Pointers to Child Kernels</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_device_uuid"></a> <a href="OpenCL_API.html#cl_khr_device_uuid"><code>cl_khr_<wbr>device_<wbr>uuid</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Unique Device and Driver Identifier Queries</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_dx9_media_sharing"></a> <a href="OpenCL_API.html#cl_khr_dx9_media_sharing"><code>cl_khr_<wbr>dx9_<wbr>media_<wbr>sharing</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Share DirectX 9 Media Surfaces with OpenCL</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_egl_event"></a> <a href="OpenCL_API.html#cl_khr_egl_event"><code>cl_khr_<wbr>egl_<wbr>event</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Share EGL Sync Objects with OpenCL</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_egl_image"></a> <a href="OpenCL_API.html#cl_khr_egl_image"><code>cl_khr_<wbr>egl_<wbr>image</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Share EGL Images with OpenCL</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_extended_async_copies"></a> <a href="OpenCL_API.html#cl_khr_extended_async_copies"><code>cl_khr_<wbr>extended_<wbr>async_<wbr>copies</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">2D and 3D Async Copies</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_extended_bit_ops"></a> <a href="OpenCL_API.html#cl_khr_extended_bit_ops"><code>cl_khr_<wbr>extended_<wbr>bit_<wbr>ops</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Bit Insert, Extract, and Reverse Operations</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_extended_versioning"></a> <a href="OpenCL_API.html#cl_khr_extended_versioning"><code>cl_khr_<wbr>extended_<wbr>versioning</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extend versioning of platform, devices, extensions, etc.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 3.0 (with minor changes)</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_memory"></a> <a href="OpenCL_API.html#cl_khr_external_memory"><code>cl_khr_<wbr>external_<wbr>memory</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Common Functionality for External Memory Sharing</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_memory_dma_buf"></a> <a href="OpenCL_API.html#cl_khr_external_memory"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>dma_<wbr>buf</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">dma_buf External Memory Handles</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_memory_opaque_fd"></a> <a href="OpenCL_API.html#cl_khr_external_memory"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>opaque_<wbr>fd</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Opaque File Descriptor External Memory Handles</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_memory_win32"></a> <a href="OpenCL_API.html#cl_khr_external_memory"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>win32</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">NT Handle External Memory Handles</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_expect_assume"></a> <a href="OpenCL_API.html#cl_khr_expect_assume"><code>cl_khr_<wbr>expect_<wbr>assume</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Kernel Optimization Hints</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_semaphore"></a> <a href="OpenCL_API.html#cl_khr_external_semaphore"><code>cl_khr_<wbr>external_<wbr>semaphore</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Common Functionality for External Semaphore Sharing</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_semaphore_dx_fence"></a> <a href="OpenCL_API.html#cl_khr_external_semaphore"><code>cl_khr_<wbr>external_<wbr>semaphore_<wbr>dx_<wbr>fence</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Direct3D 12 External Semaphore Handles</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Experimental Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_semaphore_opaque_fd"></a> <a href="OpenCL_API.html#cl_khr_external_semaphore"><code>cl_khr_<wbr>external_<wbr>semaphore_<wbr>opaque_<wbr>fd</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Opaque File Descriptor External Semaphore Handles</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_semaphore_sync_fd"></a> <a href="OpenCL_API.html#cl_khr_external_semaphore"><code>cl_khr_<wbr>external_<wbr>semaphore_<wbr>sync_<wbr>fd</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Sync FD External Semaphore Handles</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_memory_android_hardware_buffer"></a> <a href="OpenCL_API.html#cl_khr_external_memory_android_hardware_buffer"><code>cl_khr_<wbr>external_<wbr>memory_<wbr>android_<wbr>hardware_<wbr>buffer</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Android Hardware Buffer External Memory Handle</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_external_semaphore_win32"></a> <a href="OpenCL_API.html#cl_khr_external_semaphore"><code>cl_khr_<wbr>external_<wbr>semaphore_<wbr>win32</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">NT Handle External Semaphore Handles</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Experimental Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_fp16"></a> <a href="OpenCL_API.html#cl_khr_fp16"><code>cl_khr_<wbr>fp16</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Operations on 16-bit Floating-Point Values</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_fp64"></a> <a href="OpenCL_API.html#cl_khr_fp64"><code>cl_khr_<wbr>fp64</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Operations on 64-bit Floating-Point Values</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Optional Core Feature in OpenCL 1.2</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_gl_depth_images"></a> <a href="OpenCL_API.html#cl_khr_gl_depth_images"><code>cl_khr_<wbr>gl_<wbr>depth_<wbr>images</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Share OpenGL Depth Images with OpenCL</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_gl_event"></a> <a href="OpenCL_API.html#cl_khr_gl_event"><code>cl_khr_<wbr>gl_<wbr>event</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Share OpenGL Fence Sync Objects with OpenCL</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_gl_msaa_sharing"></a> <a href="OpenCL_API.html#cl_khr_gl_msaa_sharing"><code>cl_khr_<wbr>gl_<wbr>msaa_<wbr>sharing</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Share OpenGL MSAA Textures with OpenCL</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_gl_sharing"></a> <a href="OpenCL_API.html#cl_khr_gl_sharing"><code>cl_khr_<wbr>gl_<wbr>sharing</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Sharing OpenGL Buffers and Textures with OpenCL</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_global_int32_base_atomics"></a> <a href="OpenCL_API.html#cl_khr_int32_atomics"><code>cl_khr_<wbr>global_<wbr>int32_<wbr>base_<wbr>atomics</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Basic Atomic Operations on 32-bit Integers in Global Memory</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 1.1</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_global_int32_extended_atomics"></a> <a href="OpenCL_API.html#cl_khr_int32_atomics"><code>cl_khr_<wbr>global_<wbr>int32_<wbr>extended_<wbr>atomics</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extended Atomic Operations on 32-bit Integers in Global Memory</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 1.1</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_icd"></a> <a href="OpenCL_API.html#cl_khr_icd"><code>cl_khr_<wbr>icd</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Installable Client Drivers</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_il_program"></a> <a href="OpenCL_API.html#cl_khr_il_program"><code>cl_khr_<wbr>il_<wbr>program</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Support for Intermediate Language (IL) Programs (SPIR-V)</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.1</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_image2d_from_buffer"></a> <a href="OpenCL_API.html#cl_khr_image2d_from_buffer"><code>cl_khr_<wbr>image2d_<wbr>from_<wbr>buffer</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Create 2D Images from Buffers</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.0</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_initialize_memory"></a> <a href="OpenCL_API.html#cl_khr_initialize_memory"><code>cl_khr_<wbr>initialize_<wbr>memory</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Initialize Local and Private Memory on Allocation</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_int64_base_atomics"></a> <a href="OpenCL_API.html#cl_khr_int64_atomics"><code>cl_khr_<wbr>int64_<wbr>base_<wbr>atomics</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Basic Atomic Operations on 64-bit Integers in Global and Local Memory</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_int64_extended_atomics"></a> <a href="OpenCL_API.html#cl_khr_int64_atomics"><code>cl_khr_<wbr>int64_<wbr>extended_<wbr>atomics</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extended Atomic Operations on 64-bit Integers in Global and Local Memory</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_local_int32_base_atomics"></a> <a href="OpenCL_API.html#cl_khr_int32_atomics"><code>cl_khr_<wbr>local_<wbr>int32_<wbr>base_<wbr>atomics</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Basic Atomic Operations on 32-bit Integers in Local Memory</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 1.1</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_local_int32_extended_atomics"></a> <a href="OpenCL_API.html#cl_khr_int32_atomics"><code>cl_khr_<wbr>local_<wbr>int32_<wbr>extended_<wbr>atomics</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extended Atomic Operations on 32-bit Integers in Local Memory</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 1.1</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_integer_dot_product"></a> <a href="OpenCL_API.html#cl_khr_integer_dot_product"><code>cl_khr_<wbr>integer_<wbr>dot_<wbr>product</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Integer dot product operations</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_kernel_clock"></a> <a href="OpenCL_API.html#cl_khr_kernel_clock"><code>cl_khr_<wbr>kernel_<wbr>clock</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Sample Clock Values Within a Kernel</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_mipmap_image"></a> <a href="OpenCL_API.html#cl_khr_mipmap_image"><code>cl_khr_<wbr>mipmap_<wbr>image</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Create and Use Images with Mipmaps</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_pci_bus_info"></a> <a href="OpenCL_API.html#cl_khr_pci_bus_info"><code>cl_khr_<wbr>pci_<wbr>bus_<wbr>info</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Query PCI Bus Information for an OpenCL Device</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_priority_hints"></a> <a href="OpenCL_API.html#cl_khr_priority_hints"><code>cl_khr_<wbr>priority_<wbr>hints</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Create Command-Queues with Different Priorities</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_select_fprounding_mode"></a> <a href="OpenCL_API.html#cl_khr_select_fprounding_mode"><code>cl_khr_<wbr>select_<wbr>fprounding_<wbr>mode</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Set the Current Kernel Rounding Mode</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">DEPRECATED</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_semaphore"></a> <a href="OpenCL_API.html#cl_khr_semaphore"><code>cl_khr_<wbr>semaphore</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Semaphore Synchronization Primitives</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_spir"></a> <a href="OpenCL_API.html#cl_khr_spir"><code>cl_khr_<wbr>spir</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Standard Portable Intermediate Representation Programs</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension, Superseded by IL Programs / SPIR-V</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_spirv_extended_debug_info"></a> <a href="OpenCL_API.html#cl_khr_spirv_extended_debug_info"><code>cl_khr_<wbr>spirv_<wbr>extended_<wbr>debug_<wbr>info</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Allows Use of the SPIR-V <code>OpenCL.DebugInfo.100</code> Extended Instruction Set</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_spirv_linkonce_odr"></a> <a href="OpenCL_API.html#cl_khr_spirv_linkonce_odr"><code>cl_khr_<wbr>spirv_<wbr>linkonce_<wbr>odr</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Allows Use of the SPIR-V <code>SPV_KHR_linkonce_odr</code> Extension</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_spirv_no_integer_wrap_decoration"></a> <a href="OpenCL_API.html#cl_khr_spirv_no_integer_wrap_decoration"><code>cl_khr_<wbr>spirv_<wbr>no_<wbr>integer_<wbr>wrap_<wbr>decoration</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Allows Use of the SPIR-V <code>SPV_KHR_no_integer_wrap_decoration</code> Extension</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_srgb_image_writes"></a> <a href="OpenCL_API.html#cl_khr_srgb_image_writes"><code>cl_khr_<wbr>srgb_<wbr>image_<wbr>writes</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Write to sRGB Images</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroups"></a> <a href="OpenCL_API.html#cl_khr_subgroups"><code>cl_khr_<wbr>subgroups</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Sub-Groupings of Work Items</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Core Feature in OpenCL 2.1 (with minor changes)</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_ballot"></a> <a href="OpenCL_API.html#cl_khr_subgroup_ballot"><code>cl_khr_<wbr>subgroup_<wbr>ballot</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Exchange Ballots Among Sub-Groupings of Work Items</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_clustered_reduce"></a> <a href="OpenCL_API.html#cl_khr_subgroup_clustered_reduce"><code>cl_khr_<wbr>subgroup_<wbr>clustered_<wbr>reduce</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Clustered Reductions for Sub-Groupings of Work Items</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_extended_types"></a> <a href="OpenCL_API.html#cl_khr_subgroup_extended_types"><code>cl_khr_<wbr>subgroup_<wbr>extended_<wbr>types</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Additional Type Support for Sub-group Functions</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_named_barrier"></a> <a href="OpenCL_API.html#cl_khr_subgroup_named_barrier"><code>cl_khr_<wbr>subgroup_<wbr>named_<wbr>barrier</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Barriers for Subsets of a Work-group</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_non_uniform_arithmetic"></a> <a href="OpenCL_API.html#cl_khr_subgroup_non_uniform_arithmetic"><code>cl_khr_<wbr>subgroup_<wbr>non_<wbr>uniform_<wbr>arithmetic</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Sub-group Arithmetic Functions in Non-Uniform Control Flow</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_non_uniform_vote"></a> <a href="OpenCL_API.html#cl_khr_subgroup_non_uniform_vote"><code>cl_khr_<wbr>subgroup_<wbr>non_<wbr>uniform_<wbr>vote</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Hold Votes Among Sub-Groupings of Work Items</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_rotate"></a> <a href="OpenCL_API.html#cl_khr_subgroup_rotate"><code>cl_khr_<wbr>subgroup_<wbr>rotate</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Rotation Among Sub-Groupings of Work Items</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_shuffle"></a> <a href="OpenCL_API.html#cl_khr_subgroup_shuffle"><code>cl_khr_<wbr>subgroup_<wbr>shuffle</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">General-Purpose Shuffles Among Sub-Groupings of Work Items</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_subgroup_shuffle_relative"></a> <a href="OpenCL_API.html#cl_khr_subgroup_shuffle_relative"><code>cl_khr_<wbr>subgroup_<wbr>shuffle_<wbr>relative</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Relative Shuffles Among Sub-Groupings of Work Items</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_suggested_local_work_size"></a> <a href="OpenCL_API.html#cl_khr_suggested_local_work_size"><code>cl_khr_<wbr>suggested_<wbr>local_<wbr>work_<wbr>size</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Query a Suggested Local Work Size</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_terminate_context"></a> <a href="OpenCL_API.html#cl_khr_terminate_context"><code>cl_khr_<wbr>terminate_<wbr>context</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Terminate an OpenCL Context</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_throttle_hints"></a> <a href="OpenCL_API.html#cl_khr_throttle_hints"><code>cl_khr_<wbr>throttle_<wbr>hints</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Create Command-Queues with Different Throttle Policies</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="cl_khr_work_group_uniform_arithmetic"></a> <a href="OpenCL_API.html#cl_khr_work_group_uniform_arithmetic"><code>cl_khr_<wbr>work_<wbr>group_<wbr>uniform_<wbr>arithmetic</code></a></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Work-group Uniform Arithmetic</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Extension</p></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
| </div> |
| |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script> |
| </body> |
| </html> |