<?xml version="1.0"?>
<oembed><version>1.0</version><provider_name>DirectX Developer Blog</provider_name><provider_url>https://devblogs.microsoft.com/directx</provider_url><author_name>Amanda Adams</author_name><author_url>https://devblogs.microsoft.com/directx/author/amandaadams/</author_url><title>Agility SDK 1.716.0-preview &amp; 1.615-retail: Shader hash bypass - DirectX Developer Blog</title><type>rich</type><width>600</width><height>338</height><html>&lt;blockquote class="wp-embedded-content" data-secret="UCIbfaQd6S"&gt;&lt;a href="https://devblogs.microsoft.com/directx/agility-sdk-1-716-0-preview-1-615-retail-shader-hash-bypass/"&gt;Agility SDK 1.716.0-preview &amp; 1.615-retail: Shader hash bypass&lt;/a&gt;&lt;/blockquote&gt;&lt;iframe sandbox="allow-scripts" security="restricted" src="https://devblogs.microsoft.com/directx/agility-sdk-1-716-0-preview-1-615-retail-shader-hash-bypass/embed/#?secret=UCIbfaQd6S" width="600" height="338" title="&#x201C;Agility SDK 1.716.0-preview &amp; 1.615-retail: Shader hash bypass&#x201D; &#x2014; DirectX Developer Blog" data-secret="UCIbfaQd6S" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" class="wp-embedded-content"&gt;&lt;/iframe&gt;&lt;script type="text/javascript"&gt;
/* &lt;![CDATA[ */
/*! This file is auto-generated */
!function(d,l){"use strict";l.querySelector&amp;&amp;d.addEventListener&amp;&amp;"undefined"!=typeof URL&amp;&amp;(d.wp=d.wp||{},d.wp.receiveEmbedMessage||(d.wp.receiveEmbedMessage=function(e){var t=e.data;if((t||t.secret||t.message||t.value)&amp;&amp;!/[^a-zA-Z0-9]/.test(t.secret)){for(var s,r,n,a=l.querySelectorAll('iframe[data-secret="'+t.secret+'"]'),o=l.querySelectorAll('blockquote[data-secret="'+t.secret+'"]'),c=new RegExp("^https?:$","i"),i=0;i&lt;o.length;i++)o[i].style.display="none";for(i=0;i&lt;a.length;i++)s=a[i],e.source===s.contentWindow&amp;&amp;(s.removeAttribute("style"),"height"===t.message?(1e3&lt;(r=parseInt(t.value,10))?r=1e3:~~r&lt;200&amp;&amp;(r=200),s.height=r):"link"===t.message&amp;&amp;(r=new URL(s.getAttribute("src")),n=new URL(t.value),c.test(n.protocol))&amp;&amp;n.host===r.host&amp;&amp;l.activeElement===s&amp;&amp;(d.top.location.href=t.value))}},d.addEventListener("message",d.wp.receiveEmbedMessage,!1),l.addEventListener("DOMContentLoaded",function(){for(var e,t,s=l.querySelectorAll("iframe.wp-embedded-content"),r=0;r&lt;s.length;r++)(t=(e=s[r]).getAttribute("data-secret"))||(t=Math.random().toString(36).substring(2,12),e.src+="#?secret="+t,e.setAttribute("data-secret",t)),e.contentWindow.postMessage({message:"ready",secret:t},"*")},!1)))}(window,document);
//# sourceURL=https://devblogs.microsoft.com/directx/wp-includes/js/wp-embed.min.js
/* ]]&gt; */
&lt;/script&gt;
</html><thumbnail_url>https://devblogs.microsoft.com/directx/wp-content/uploads/sites/42/2017/01/XII_BLACK_1kx1k.jpg</thumbnail_url><thumbnail_width>1024</thumbnail_width><thumbnail_height>1024</thumbnail_height><description>The D3D runtime as of 1.615 officially supports applications opting to bypass shader hash validation. The historical purpose of the hash that the DX shader compiler embeds in every shader binary was to give the D3D runtime to confidence that shaders being given to it are well formed.&#xA0; The assumption was that a hashed shader [&hellip;]</description></oembed>
