blob: fcc07f431f4718168c1f20a6668a79d3b266ef97 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 1.5.8">
<title>cl_intel_planar_yuv</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: white; color: #222222; 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: #333333; }
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 #dddddd; 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 #dddddd; 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 #dddddd; }
blockquote cite { display: block; font-size: 0.8125em; color: #5e93b8; }
blockquote cite:before { content: "\2014 \0020"; }
blockquote cite a, blockquote cite a:visited { color: #5e93b8; }
blockquote, blockquote p { line-height: 1.6; color: #333333; }
/* Microformats */
.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #dddddd; 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: white; margin-bottom: 1.25em; border: solid 1px #d8d8ce; }
table thead, table tfoot { background: -webkit-linear-gradient(top, #add386, #90b66a); 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: white; 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: #edf2f2; }
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: white; -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; -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 #dddddd; }
#header > h1:only-child, body.toc2 #header > h1:nth-last-child(2) { border-bottom: 1px solid #dddddd; padding-bottom: 8px; }
#header .details { border-bottom: 1px solid #dddddd; line-height: 1.45; padding-top: 0.25em; padding-bottom: 0.25em; padding-left: 0.25em; color: #5e93b8; 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: #333333; }
#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: #333333; }
#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 #dddddd; padding-bottom: 8px; margin-top: 0; padding-top: 1rem; margin-bottom: 1.25rem; }
#toc { border-bottom: 0 solid #dddddd; 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: white; position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #dddddd; 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 #dddddd; 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: white; -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-color: 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 #dddddd; }
#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 #dddddd; color: #5e93b8; }
.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: white; -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: white; -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: #eeeeee; }
.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 #666666; -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: #eeeeee; 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 #dddddd; }
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: #333333; 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 #5e93b8; }
.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: #333333; 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: #5e93b8; }
.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: -webkit-linear-gradient(top, #add386, #90b66a); }
tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: white; 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 white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; }
.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 #dddddd; }
.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: #eeeeee; }
</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">
<div id="header">
<h1>cl_intel_planar_yuv</h1>
<div class="details">
<span id="revnumber">version v3.0.8,</span>
<span id="revdate">Wed, 30 Jun 2021 22:00:00 +0000</span>
<br><span id="revremark">from git branch: master commit: 09130de814688ec7b463cb089986b807c628ead3</span>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="_name_strings"><a class="anchor" href="#_name_strings"></a>Name Strings</h2>
<div class="sectionbody">
<div class="paragraph">
<p><code>cl_intel_planar_yuv</code></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_contact"><a class="anchor" href="#_contact"></a>Contact</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Ben Ashbaugh, Intel (ben 'dot' ashbaugh 'at' intel 'dot' com)</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_contributors"><a class="anchor" href="#_contributors"></a>Contributors</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Dan Petre, Intel<br>
Krzysztof Laskowski, Intel<br>
Bartosz Sochacki, Intel<br>
Ben Ashbaugh, Intel<br>
Biju George, Intel</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_notice"><a class="anchor" href="#_notice"></a>Notice</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Copyright (c) 2021 Intel Corporation. All rights reserved.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_status"><a class="anchor" href="#_status"></a>Status</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Shipping</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_version"><a class="anchor" href="#_version"></a>Version</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Built On: 2021-06-29<br>
Revision: 1.0.1</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_dependencies"><a class="anchor" href="#_dependencies"></a>Dependencies</h2>
<div class="sectionbody">
<div class="paragraph">
<p>OpenCL 1.2 is required.</p>
</div>
<div class="paragraph">
<p>This extension is written against the OpenCL Specification Version 3.0.7.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_overview"><a class="anchor" href="#_overview"></a>Overview</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The purpose of this extension is to provide OpenCL support for the Planar YUV (YCbCr)
image formats. The NV12 format must be supported; support for other Planar YUV formats
that may be defined in this extension is optional.</p>
</div>
<div class="paragraph">
<p>The extension introduces two new <code>cl_mem_flags</code>:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>CL_MEM_NO_ACCESS_INTEL</code> may be used together with image formats for which
device does not support reading from or writing to at the OpenCL kernel level, but are
still useful in other use-cases.</p>
</li>
<li>
<p><code>CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL</code> may be used to relax the memory access
rights specified in <code>cl_mem_flags</code> at memory object creation time and allow to access
and modify the contents of the underlying data storage in an unrestricted way e.g. by
creating another memory object from that memory object or using dedicated device
mechanisms.</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_new_api_enums"><a class="anchor" href="#_new_api_enums"></a>New API Enums</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Accepted as <code>cl_mem_flags</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>#define CL_MEM_NO_ACCESS_INTEL (1 &lt;&lt; 24)
#define CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL (1 &lt;&lt; 25)</code></pre>
</div>
</div>
<div class="paragraph">
<p>Accepted as the <code>image_channel_order</code> of <code>cl_image_format</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>#define CL_NV12_INTEL 0x410E</code></pre>
</div>
</div>
<div class="paragraph">
<p>Accepted value for the <em>param_name</em> parameter to <strong>clGetDeviceInfo</strong>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>#define CL_DEVICE_PLANAR_YUV_MAX_WIDTH_INTEL 0x417E
#define CL_DEVICE_PLANAR_YUV_MAX_HEIGHT_INTEL 0x417F</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_modifications_to_the_opencl_api_specification"><a class="anchor" href="#_modifications_to_the_opencl_api_specification"></a>Modifications to the OpenCL API Specification</h2>
<div class="sectionbody">
<div class="dlist">
<dl>
<dt class="hdlist1">(Add to Table 5 - OpenCL Device Queries in Section 4.2 - Querying Devices) </dt>
<dd>
<div class="openblock">
<div class="content">
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 5. List of supported param_names by clGetDeviceInfo</caption>
<colgroup>
<col style="width: 30%;">
<col style="width: 20%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Device Info</th>
<th class="tableblock halign-left valign-top">Return Type</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_DEVICE_PLANAR_YUV_MAX_WIDTH_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>size_t</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Max width of a Planar YUV image in pixels.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_DEVICE_PLANAR_YUV_MAX_HEIGHT_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>size_t</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Max height of a Planar YUV image in pixels.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</dd>
<dt class="hdlist1">(Add to Table 12 - List of supported memory flag values in Section 5.2.1 - Creating Buffer Objects) </dt>
<dd>
<div class="openblock">
<div class="content">
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 12. List of supported memory flag values</caption>
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Memory Flags</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_MEM_NO_ACCESS_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the device will not read or write to the memory
object.</p>
<p class="tableblock"> <code>CL_MEM_NO_ACCESS_INTEL</code> and <code>CL_MEM_READ_WRITE</code>, <code>CL_MEM_WRITE_ONLY</code>, or
<code>CL_MEM_READ_ONLY</code> are mutually exclusive</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">This flag indicates that the host and device access flags used together
with this flag do not strictly prohibit reading or modifying the contents
of this memory object. Memory objects created from this memory object may
re-specify the host and device access capabilities of the created memory
object with new access capabilities, and any mechanisms provided by the
implementation which explicitly support certain operations on memory
objects of this type are allowed to access this memory object without any
restrictions.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</dd>
<dt class="hdlist1">(Extend the argument description for clCreateImage in Section 5.3.1 - Creating Image Objects) </dt>
<dd>
<div class="openblock">
<div class="content">
<div class="ulist">
<ul>
<li>
<p><em>flags</em> is a bit-field that is used to specify allocation and usage
information about the image memory object being created and is described in
the supported memory flag values table. [&#8230;&#8203;] If the <code>image_channel_order</code> of
<em>image_format</em> is a Planar YUV format then <em>flags</em> must include
<code>CL_MEM_HOST_NO_ACCESS</code>. If <code>CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL</code> was
specified in the memory flags associated with <em>mem_object</em> then <em>flags</em> can
specify any host and device access capabilities regardless of the memory flags
associated with <em>mem_object</em>.</p>
</li>
</ul>
</div>
</div>
</div>
</dd>
<dt class="hdlist1">(Modify the error code descriptions for clCreateImage in Section 5.3.1 - Creating Image Objects) </dt>
<dd>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p><strong>clCreateImage</strong> returns a valid non-zero image object created and <em>errcode_ret</em> is
set to <code>CL_SUCCESS</code> if the image object is created successfully. Otherwise, it returns
a <code>NULL</code> value with one of the following error values returned in <em>errcode_ret</em>:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>&#8230;&#8203;</p>
</li>
<li>
<p><code>CL_INVALID_VALUE</code> if the <code>image_channel_order</code> of <em>image_format</em> is a Planar
YUV format and <em>flags</em> does not include <code>CL_MEM_HOST_NO_ACCESS</code>.</p>
</li>
<li>
<p><code>CL_INVALID_VALUE</code> if an image is being created from another memory object
(buffer or image) under one of the following circumstances: 1) <em>mem_object</em>
was created with <code>CL_MEM_WRITE_ONLY</code> and <em>flags</em> specifies <code>CL_MEM_READ_WRITE</code>
or <code>CL_MEM_READ_ONLY</code>, 2) <em>mem_object</em> was created with <code>CL_MEM_READ_ONLY</code> and
<em>flags</em> specifies <code>CL_MEM_READ_WRITE</code> or <code>CL_MEM_WRITE_ONLY</code>, 3) <em>mem_object</em>
was created with <code>CL_MEM_NO_ACCESS_INTEL</code> and <em>flags</em> specifies
<code>CL_MEM_READ_ONLY</code>, <code>CL_MEM_WRITE_ONLY</code> or <code>CL_MEM_READ_WRITE</code>, 4) <em>flags</em>
specifies <code>CL_MEM_USE_HOST_PTR</code> or <code>CL_MEM_ALLOC_HOST_PTR</code> or
<code>CL_MEM_COPY_HOST_PTR</code>. However, restrictions 1), 2) and 3) described above do
not apply if <em>mem_object</em> was created with
<code>CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL</code>.</p>
</li>
<li>
<p><code>CL_INVALID_VALUE</code> if an image is being created from another memory object
(buffer or image) and <em>mem_object</em> was created with <code>CL_MEM_HOST_WRITE_ONLY</code>
and <em>flags</em> specifies <code>CL_MEM_HOST_READ_ONLY</code>, or if <em>mem_object</em> was created
with <code>CL_MEM_HOST_READ_ONLY</code> and <em>flags</em> specifies <code>CL_MEM_HOST_WRITE_ONLY</code>,
or if <em>mem_object</em> was created with <code>CL_MEM_HOST_NO_ACCESS</code> and flags
specifies <code>CL_MEM_HOST_READ_ONLY</code> or <code>CL_MEM_HOST_WRITE_ONLY</code>. However, these
restrictions do not apply if <em>mem_object</em> was created with
<code>CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL</code>.</p>
</li>
</ul>
</div>
</div>
</div>
</dd>
<dt class="hdlist1">(Add to Table 15 - Required <em>host_ptr</em> buffer sizes for images in Section 5.3.1 - Creating Image Objects) </dt>
<dd>
<div class="openblock">
<div class="content">
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 15. Required <em>host_ptr</em> buffer sizes for images</caption>
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Image Type</th>
<th class="tableblock halign-left valign-top">Size of buffer that <em>host_ptr</em> points to</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_MEM_OBJECT_IMAGE2D</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&gt;= image_row_pitch * image_height + image_row_pitch * image_height / 2,
for images with <code>image_channel_order</code> equal to <code>CL_NV12_INTEL</code>.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</dd>
<dt class="hdlist1">(Add to the description of creation of an image object from another image object in Section 5.3.1.2 - Image Descriptor) </dt>
<dd>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>Creating a 2D image from a Planar YUV image object allows creation of a new
image object that shares the Planar YUV image object&#8217;s data store but
represents only the specified plane. Restrictions are:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>All the values specified in <em>image_desc</em> except for <em>mem_object</em> must match
the image descriptor information associated with <em>mem_object</em>, with exception
where <em>mem_object</em> is a Planar YUV image object then <em>image_width</em> and
<em>image_height</em> are ignored and derived from the <em>mem_object</em> and <em>image_depth</em>
specifies the index of the target plane the image will be created against and
must be one of the following:</p>
<table class="tableblock frame-all grid-all" style="width: 75%;">
<colgroup>
<col style="width: 40%;">
<col style="width: 20%;">
<col style="width: 40%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top"><em>image_channel_order</em> of <em>mem_object</em></th>
<th class="tableblock halign-left valign-top">Plane</th>
<th class="tableblock halign-left valign-top"><em>image_depth</em> specified in <em>image_desc</em></th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_NV12_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Y</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_NV12_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UV</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>The derived values of image_width and image_height can be later queried using
clGetImageInfo.</p>
</div>
</li>
<li>
<p>The channel data type specified in <em>image_format</em> must match the channel data
type associated with <em>mem_object</em> with exception to the following list of
supported combinations:</p>
<table class="tableblock frame-all grid-all" style="width: 75%;">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top"><em>image_channel_order</em> of <em>mem_object</em></th>
<th class="tableblock halign-left valign-top"><em>image_channel_data_type</em> specified in <em>image_format</em></th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_NV12_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_UNORM_INT8</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_NV12_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_UNSIGNED_INT8</code></p></td>
</tr>
</tbody>
</table>
</li>
<li>
<p>If <em>mem_object</em> is a Planar YUV image object the channel order specified in
image format must be one of the following:</p>
<table class="tableblock frame-all grid-all" style="width: 75%;">
<colgroup>
<col style="width: 37.5%;">
<col style="width: 25%;">
<col style="width: 12.5%;">
<col style="width: 25%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top"><em>image_channel_order</em> specified in <em>image_format</em></th>
<th class="tableblock halign-left valign-top"><em>image_channel_order</em> of <em>mem_object</em></th>
<th class="tableblock halign-left valign-top">Plane</th>
<th class="tableblock halign-left valign-top">Channel Mappings</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_R</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_NV12_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Y</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">R = Y</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_RG</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_NV12_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UV</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">R = U, G = V</p></td>
</tr>
</tbody>
</table>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph">
<p>Concurrent reading from or writing to both a Planar YUV image object and
an image object created from the Planar YUV image object is undefined.</p>
</div>
<div class="paragraph">
<p>Reading from or writing to an image created from a Planar YUV image and then
reading from or writing to the Planar YUV image in a kernel even if appropriate
synchronization operations (such as a barrier) are performed between the reads
or writes is undefined. Similarly, reading from and writing to the Planar YUV
image and then reading from or writing to the image created from the Planar YUV
image with appropriate synchronization between the reads or writes is undefined.</p>
</div>
</td>
</tr>
</table>
</div>
</div>
</div>
</dd>
<dt class="hdlist1">(Add to Table 16 - List of supported Image Channel Order Values in Section 5.3.1 - Creating Image Objects) </dt>
<dd>
<div class="openblock">
<div class="content">
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Table 16. List of supported Image Channel Order Values</caption>
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Image Channel Order</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_NV12_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">A Planar YUV image format with two planes.
There are three channels in a <code>CL_NV12_INTEL</code> image.
For a <code>CL_NV12_INTEL</code> image, the image element size refers to an image
element in the Y plane.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</dd>
<dt class="hdlist1">(Extend the descriptions in Section 5.3.1.2 - Image Descriptor) </dt>
<dd>
<div class="openblock">
<div class="content">
<div class="ulist">
<ul>
<li>
<p><code>image_width</code> is the width of the image in pixels. [&#8230;&#8203;] For a <code>CL_NV12_INTEL</code>
image, the image width must be a multiple of 4 and less than or equal to
<code>CL_DEVICE_PLANAR_YUV_MAX_WIDTH_INTEL</code>.</p>
</li>
<li>
<p><code>image_height</code> is the height of the image in pixels. [&#8230;&#8203;] For a
<code>CL_NV12_INTEL</code> image, the image height must be a multiple of 4 and less than or
equal to <code>CL_DEVICE_PLANAR_YUV_MAX_HEIGHT_INTEL</code>.</p>
</li>
<li>
<p><code>image_depth</code> is the depth of the image in pixels. [&#8230;&#8203;] For a <code>CL_NV12_INTEL</code>
image, the image depth must be 1.</p>
</li>
</ul>
</div>
</div>
</div>
</dd>
<dt class="hdlist1">(Add Section 5.3.1.X - Memory Layout for Planar YUV Images) </dt>
<dd>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>In Planar YUV formats the Y, U and V components can all be stored as separate
planes or the U and V components can be stored combined as one plane. There are
various flavors of Planar YUV formats, differing in the number of planes, order,
layout and the sub-sampling methods used for the U and V components.</p>
</div>
<div class="paragraph">
<p>The <code>CL_NV12_INTEL</code> image format consists of two planes, Y (luma) plane and an
interleaved UV (chroma) plane:</p>
</div>
<div class="listingblock">
<div class="content">
<pre> &lt;---- WIDTH ----&gt;
+------------------------+ ^
|YYYYYYYYYYYYYYYYYYYY^^^^| |
|YYYYYYYYYYYYYYYYYYYY^^^^| H
|YYYYYYYYYYYYYYYYYYYY^^^^| E
|YYYYYYYYYYYYYYYYYYYY^^^^| I Luma plane (Y)
|YYYYYYYYYYYYYYYYYYYY^^^^| G
|YYYYYYYYYYYYYYYYYYYY^^^^| H
|YYYYYYYYYYYYYYYYYYYY^^^^| T
|YYYYYYYYYYYYYYYYYYYY^^^^| |
+------------------------+ v
|UVUVUVUVUVUVUVUVUVUV^^^^|
|UVUVUVUVUVUVUVUVUVUV^^^^| Chroma plane (UV)
|UVUVUVUVUVUVUVUVUVUV^^^^|
|UVUVUVUVUVUVUVUVUVUV^^^^|
+------------------------+
&lt;---- ROW PITCH ---&gt;</pre>
</div>
</div>
<div class="paragraph">
<p>The luma plane contains 8 bit Y samples in case of the <code>CL_NV12_INTEL</code> format,
one for each image element:</p>
</div>
<div class="listingblock">
<div class="content">
<pre> +-----+-----+-----+-----+--
| Y00 | Y01 | Y02 | Y03 | ...
+-----+-----+-----+-----+--
| Y10 | Y11 | Y12 | Y13 | ...
+-----+-----+-----+-----+--
| Y20 | Y21 | Y22 | Y23 | ...
+-----+-----+-----+-----+--
| ... | ... | ... | ... |
Sample -&gt; 0 1 2 3
Offset</pre>
</div>
</div>
<div class="paragraph">
<p>The chroma plane contains interleaved 8 bit UV 2x2 samples in case of the
<code>CL_NV12_INTEL</code> format. The chroma components are sampled only once for every
other image element and for every other row of image elements:</p>
</div>
<div class="listingblock">
<div class="content">
<pre> +-----+-----+-----+-----+--
| U00 | V00 | U02 | V02 | ...
+-----+-----+-----+-----+--
| U20 | V20 | U22 | V22 | ...
+-----+-----+-----+-----+--
| ... | ... | ... | ... |
Sample -&gt; 0 1 2 3
Offset</pre>
</div>
</div>
<div class="paragraph">
<p>Using the above notation we can represent image elements like this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre> +-----+-----+-----+-----+--
| P00 | P01 | P02 | P03 | ...
+-----+-----+-----+-----+--
| P10 | P11 | P12 | P13 | ...
+-----+-----+-----+-----+--
| P20 | P21 | P22 | P23 | ...
+-----+-----+-----+-----+--
| ... | ... | ... | ... |</pre>
</div>
</div>
<div class="paragraph">
<p>where:</p>
</div>
<div class="listingblock">
<div class="content">
<pre> P00 = Y00U00V00 P01 = Y01U00V00
P10 = Y10U00V00 P11 = Y11U00V00
...
P20 = Y20U20V20 P21 = Y21U20V20
...
P30 = Y30U20V20 P31 = Y31U20V20</pre>
</div>
</div>
<div class="paragraph">
<p>etc.</p>
</div>
<div class="paragraph">
<p>The Y (luma) plane is followed immediately by the UV (chroma) plane.
Both the Y and the UV planes have the same <em>image_row_pitch</em>.
The Y plane height is <em>image_height</em>.
The UV plane height is (<em>image_height</em> / 2).
The Y plane width is <em>image_width</em>.
The UV plane width is (<em>image_width</em> / 2).</p>
</div>
</div>
</div>
</dd>
<dt class="hdlist1">(Extend the description of <em>flags</em> in Section 5.3.2 - Querying List of Supported Image Formats) </dt>
<dd>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p><em>flags</em> is a bit-field that is used to specify information about the image
formats being queried [&#8230;&#8203;]. To get a list of images that cannot be read from
nor written to by a kernel, flags must be set to <code>CL_MEM_NO_ACCESS_INTEL</code>.</p>
</div>
</div>
</div>
</dd>
<dt class="hdlist1">(Add a table to Section 5.3.2.1 - Minimum List of Supported Image Formats) </dt>
<dd>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>For 2D image objects, the mandated minimum list of image formats that are not
required to be read from nor written to by a kernel and that must be supported
by all devices that support the <code>c_intel_planar_yuv</code> extension is:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 34%;">
<col style="width: 33%;">
<col style="width: 33%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">num_channels</th>
<th class="tableblock halign-left valign-top">channel_order</th>
<th class="tableblock halign-left valign-top">channel_data_type</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_NV12_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_UNORM_INT8</code></p></td>
</tr>
</tbody>
</table>
</div>
</div>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_modifications_to_the_opencl_c_specification"><a class="anchor" href="#_modifications_to_the_opencl_c_specification"></a>Modifications to the OpenCL C Specification</h2>
<div class="sectionbody">
<div class="dlist">
<dl>
<dt class="hdlist1">(Add Planar YUV formats to Section 6.15.15.1.1 - Determining the border color or value) </dt>
<dd>
<div class="openblock">
<div class="content">
<div class="ulist">
<ul>
<li>
<p>If image channel order is <code>CL_NV12_INTEL</code> the border color is value is undefined.</p>
</li>
</ul>
</div>
</div>
</div>
</dd>
<dt class="hdlist1">(Add to the un-numbered table in Section 6.15.15.7 - Mapping image channels to color values returned by read_image and color values passed to write_image to image channels) </dt>
<dd>
<div class="openblock">
<div class="content">
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Channel Order</strong></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>float4</code>, <code>int4</code> or <code>uint4</code> <strong>components of channel data</strong></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>CL_NV12_INTEL</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">(V, Y, U, 1.0)</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</dd>
<dt class="hdlist1">(Add to the beginning of Section 6.15.15.2 Built-in Image Read Functions) </dt>
<dd>
<div class="openblock">
<div class="content">
<div class="paragraph">
<p>Note that reading from a <code>CL_NV12_INTEL</code> image object is only supported by <strong>read_imagef</strong>
functions that take integer coordinates.</p>
</div>
</div>
</div>
</dd>
</dl>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_sample_code"><a class="anchor" href="#_sample_code"></a>Sample Code</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_sample_host_code"><a class="anchor" href="#_sample_host_code"></a>Sample Host Code</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>cl_image_format image_format;
image_format.image_channel_order = CL_NV12_INTEL;
image_format.image_channel_data_type = CL_UNORM_INT8;
cl_image_desc image_desc;
image_desc.image_type = CL_MEM_OBJECT_IMAGE2D;
image_desc.image_width = width;
image_desc.image_height = height;
image_desc.image_array_size = 0;
image_desc.image_row_pitch = 0;
image_desc.image_slice_pitch = 0;
image_desc.num_mip_levels = 0;
image_desc.num_samples = 0;
image_desc.mem_object = NULL;
// create a CL_NV12_IMAGE
cl_mem nv12Img = clCreateImage(context,
CL_MEM_READ_ONLY | CL_MEM_HOST_NO_ACCESS |
CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL,
image_format, image_desc,
host_ptr, errcode_ret);
// image_width &amp; image_height are ignored for plane extraction
image_desc.image_width = 0;
image_desc.image_height = 0;
// set mem_object to the full NV12 image
image_desc.mem_object = nv12Img;
// get access to the Y plane (CL_R)
image_desc.image_depth = 0;
// set proper image_format for the Y plane
image_format.image_channel_order = CL_R;
image_format.image_channel_data_type = CL_UNORM_INT8;
cl_mem nv12YplaneImg = clCreateImage(context, CL_MEM_READ_WRITE,
image_format, image_desc,
NULL, errcode_ret);
// get access to the UV plane (CL_RG)
image_desc.image_depth = 1;
// set proper image_format for the UV plane
image_format.image_channel_order = CL_RG;
image_format.image_channel_data_type = CL_UNORM_INT8;
cl_mem nv12UVplaneImg = clCreateImage(context, CL_MEM_READ_WRITE,
image_format, image_desc,
NULL, errcode_ret);
// NOT SUPPORTED: transfer the whole NV12 image to the device
// status = clEnqueueWriteImage(queue, nv12Img, true, origin, region,
// row_pitch, slice_pitch,
// ptr, 0, NULL, NULL);
// write Y plane of NV12 image
status = clEnqueueWriteImage(queue, nv12YplaneImg, true,
origin, region, row_pitch, slice_pitch,
ptr, 0, NULL, NULL);
// write UV plane of NV12 image
status = clEnqueueWriteImage(queue, nv12YplaneImg, true,
origin, region, row_pitch, slice_pitch,
ptr + uvPlaneOffset, 0, NULL, NULL);
// NOT SUPPORTED: read the whole NV12 image back
// status = clEnqueueReadImage(queue, nv12Img, true,
// origin, region, row_pitch, slice_pitch,
// ptr, 0, NULL, NULL);
// read Y plane of NV12 image
status = clEnqueueReadImage(queue, nv12UVplaneImg, true,
origin, region, row_pitch, slice_pitch,
ptr, 0, NULL, NULL);
// read UV plane of NV12 image
status = clEnqueueReadImage(queue, nv12UVplaneImg, true,
origin, region, row_pitch, slice_pitch,
ptr + uvPlaneOffset, 0, NULL, NULL);</code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_sample_kernel_code"><a class="anchor" href="#_sample_kernel_code"></a>Sample Kernel Code</h3>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>// do something with a whole NV12 image
kernel void DoSomethingWithNV12
(
...
read_write image2d_t nv12Img,
...
)
{
...
// sample the CL_NV12_INTEL image - supported if CL_NV12_INTEL format is
// available with CL_MEM_READ_ONLY or CL_MEM_READ_WRITE access flags
// based on clGetSupportedImageFormats query.
float4 p = read_imagef(nv12Img, sampler, coord);
...
// write to the CL_NV12_INTEL image - supported if CL_NV12_INTEL format is
// available with CL_MEM_WRITE_ONLY or CL_MEM_READ_WRITE access flags
// based on clGetSupportedImageFormats query.
write_imagef(nv12Img, coord, p);
...
}
// do something with planes of an NV12 image
kernel void DoSomethingWithNV12Planes
(
...
read_write image2d_t nv12ImgYPlane,
read_write image2d_t nv12ImgUVPlane,
...
)
{
...
// sample the Y &amp; UV planes
float4 py = read_imagef(nv12ImgYPlane, sampler, coord);
float4 puv = read_imagef(nv12ImgUVPlane, sampler, coord);
...
// write to Y &amp; UV planes
write_imagef(nv12ImgYPlane, coord, py);
write_imagef(nv12ImgUVPlane, coord, puv);
...
}</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_issues"><a class="anchor" href="#_issues"></a>Issues</h2>
<div class="sectionbody">
<div class="paragraph">
<p>None.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_revision_history"><a class="anchor" href="#_revision_history"></a>Revision History</h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-rows stretch">
<colgroup>
<col style="width: 4.7619%;">
<col style="width: 14.2857%;">
<col style="width: 14.2857%;">
<col style="width: 66.6667%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Rev</th>
<th class="tableblock halign-left valign-top">Date</th>
<th class="tableblock halign-left valign-top">Author</th>
<th class="tableblock halign-left valign-top">Changes</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.0.0</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2016-11-22</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Krzysztof Laskowski</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Initial Revision</strong></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1.0.1</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">2021-06-11</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Ben Ashbaugh</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Converted to asciidoc, added HOST_NO_ACCESS error description, corrected border color value.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Version v3.0.8<br>
Last updated 2021-06-29 12:20:08 -0700
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script>
</body>
</html>