{"id":7692,"date":"2023-03-30T12:00:33","date_gmt":"2023-03-30T19:00:33","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/directx\/?p=7692"},"modified":"2024-03-11T11:49:37","modified_gmt":"2024-03-11T18:49:37","slug":"preview-agility-sdk-1-710-0","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/directx\/preview-agility-sdk-1-710-0\/","title":{"rendered":"Agility SDK 1.710.0-preview: GPU Upload Heaps and Non-normalized Sampling"},"content":{"rendered":"<p><span data-contrast=\"auto\">We\u2019re pleased to announce that we have a new preview Agility SDK out today, letting developers experiment with two new features: GPU Upload Heaps and Non-normalized Sampling!<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Head to <\/span><a href=\"https:\/\/devblogs.microsoft.com\/directx\/directx12agility\/\"><span data-contrast=\"none\">Agility SDK Downloads<\/span><\/a><span data-contrast=\"auto\"> to grab it.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p aria-level=\"1\"><strong><span style=\"font-size: 18pt;\">GPU Upload Heaps\u00a0<\/span><\/strong><\/p>\n<p><strong><span style=\"font-size: 14pt;\" data-contrast=\"auto\">Introduction<\/span><\/strong><\/p>\n<p><span data-contrast=\"auto\">Historically a GPU\u2019s VRAM was inaccessible to the CPU, forcing programs to have to copy large amounts of data to the GPU via the PCI bus. Most modern GPUs have introduced VRAM resizable base address register (BAR) enabling Windows to manage the GPU VRAM in WDDM 2.0 or later.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">With the VRAM being managed by Windows, D3D now exposes the heap memory access directly to the CPU! This allows both the CPU and GPU to directly access the memory simultaneously, removing the need to copy data from the CPU to the GPU increasing performance in certain scenarios.\u00a0 <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span style=\"font-size: 14pt;\"><strong>Requirements<\/strong><\/span><\/p>\n<p>The preview release GPU upload heaps released with Agility SDK 1.710.0-preview requires Developer Mode.<\/p>\n<p><em>(Updated as of Agility SDK 1.613.0):<\/em> The retail release of GPU upload heaps, released with Agility SDK 1.613.0, requires a target machine on Windows 11 Insider Preview Build 26080 or later.<\/p>\n<p aria-level=\"2\"><span data-contrast=\"none\">To check if GPU upload heaps are supported on the current device, check <\/span>D3D12_FEATURE_DATA_D3D12_OPTIONS16::<span data-contrast=\"auto\">GPUUploadHeapSupported<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p>GPU upload heaps can be used on both iGPUs and dGPUs. For dGPUs, resizable bar need to be turned on in BIOS. iGPUs do not have this requirement, since GPU upload heaps are going to use L0 memory for UMA.<\/p>\n<p><span style=\"font-size: 14pt;\"><strong>How to Use<\/strong><\/span><\/p>\n<ul>\n<li>Create a resource using D3D12_HEAP_TYPE_GPU_UPLOAD, with D3D12_CPU_PAGE_PROPERTY_UNKNOWN and D3D12_MEMORY_POOL_UNKNOWN.\n(Or D3D12_HEAP_TYPE_CUSTOM, then use GetCustomHeapProperties to get the page property and memory pool)<\/li>\n<li>Use Map to get a CPU pointer to the resource and upload CPU data to the resource.<\/li>\n<li><span class=\"ui-provider gp b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\" dir=\"ltr\">Optional <\/span>(Pix): Use TrackWrite to notify Pix about modifications to the resource.<\/li>\n<li>Use the resource directly without copying the resource to a default heap.<\/li>\n<\/ul>\n<p aria-level=\"2\"><span data-contrast=\"auto\">For full documentation (including restrictions and how to manage video budget) on this new feature please refer to the <a href=\"https:\/\/microsoft.github.io\/DirectX-Specs\/d3d\/D3D12GPUUploadHeaps.html\">reference documentation<\/a>.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p aria-level=\"2\"><span style=\"font-size: 18pt;\"><strong>Non-normalized Sampling\u00a0<\/strong><\/span><\/p>\n<p aria-level=\"2\"><span data-contrast=\"auto\">With this Agility SDK on supported hardware, a new sampler flag is available to create a sampler that interprets sampling coordinates as absolute. To verify hardware support, check <\/span><span data-contrast=\"auto\">D3D12_FEATURE_DATA_D3D12_OPTIONS17::NonNormalizedCoordinateSamplersSupported<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}\">\u00a0<\/span><\/p>\n<p aria-level=\"2\"><span data-contrast=\"auto\">When a sampler is created with the <\/span><span data-contrast=\"auto\">D3D12_SAMPLER_FLAG_NON_NORMALIZED_COORDINATES<\/span><span data-contrast=\"auto\"> flag, the coordinates will refer to the absolute texel location within the texture and are therefore bound by the dimensions of the sampled texture, not 0 to 1.0.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}\">\u00a0<\/span><\/p>\n<p aria-level=\"2\"><span data-contrast=\"auto\">Samplers that are created with this flag have the following restrictions:\u00a0<\/span><\/p>\n<ul>\n<li aria-level=\"2\"><span data-contrast=\"auto\">They must target <\/span><span data-contrast=\"auto\">TEXTURE1D<\/span><span data-contrast=\"auto\"> or <\/span><span data-contrast=\"auto\">TEXTURE2D<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\u00b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\u00b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">They must have a mip count of 1<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\u00b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\u00b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">They cannot be sampled with the Offset parameter in Sample* functions,<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\u00b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\u00b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">The filter\u2019s <\/span><span data-contrast=\"auto\">MIN<\/span><span data-contrast=\"auto\"> and <\/span><span data-contrast=\"auto\">MAG<\/span><span data-contrast=\"auto\"> must match<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\u00b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\u00b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"auto\">The filter\u2019s <\/span><span data-contrast=\"auto\">MIP<\/span><span data-contrast=\"auto\"> must be <\/span><span data-contrast=\"auto\">POINT<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\u00b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\u00b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"6\" data-aria-level=\"1\"><span data-contrast=\"auto\">The filter cannot be comparison or anisotropy<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\u00b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\u00b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"7\" data-aria-level=\"1\"><span data-contrast=\"auto\">MinLOD<\/span><span data-contrast=\"auto\"> and <\/span><span data-contrast=\"auto\">MaxLOD<\/span><span data-contrast=\"auto\"> must be 0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\u00b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\u00b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"8\" data-aria-level=\"1\"><span data-contrast=\"auto\">AddressU<\/span><span data-contrast=\"auto\"> and <\/span><span data-contrast=\"auto\">AddressV<\/span><span data-contrast=\"auto\"> must be either <\/span><span data-contrast=\"auto\">CLAMP<\/span><span data-contrast=\"auto\"> or <\/span><span data-contrast=\"auto\">BORDER<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Static samplers are also available as non-normalized when using the new static sampler description, <\/span><span data-contrast=\"auto\">D3D12_STATIC_SAMPLER_DESC1<\/span><span data-contrast=\"auto\">, in the new root signature version 1.2.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}\">\u00a0<\/span><\/p>\n<p aria-level=\"1\"><strong><span style=\"font-size: 18pt;\">Preview PIX Support on Day 1\u00a0<\/span><\/strong><\/p>\n<p><span data-contrast=\"auto\">PIX has support for both GPU Upload Heaps and Non-normalized sampling in its latest preview release, version 2303.30-preview to accompany today\u2019s Agility SDK release. See <\/span><a href=\"https:\/\/devblogs.microsoft.com\/pix\/pix-2303-30\/\"><span data-contrast=\"none\">here<\/span><\/a><span data-contrast=\"auto\"> for more information.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">For GPU Upload Heaps, we recommend using <\/span><a href=\"https:\/\/devblogs.microsoft.com\/pix\/pix-and-id3d12manualwritetrackingresource\/\"><span data-contrast=\"none\">ID3D12ManualWriteTrackingResource<\/span><\/a><span data-contrast=\"auto\"> with PIX to achieve better performance at capture time.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span style=\"font-size: 18pt;\"><strong>Drivers\u00a0\u00a0<\/strong><\/span><\/p>\n<p><span data-contrast=\"auto\"><strong>AMD<\/strong>: A preview AMD Software: Adrenalin Edition\u2122 driver including the AMD implementation of the current GPU Upload Heaps specification on AMD Radeon\u2122 RX 7000 Series graphics cards can be downloaded <a href=\"https:\/\/www.amd.com\/en\/support\/kb\/release-notes\/rn-rad-ms-agility-sdk-2023-6-711\" target=\"_blank\" rel=\"noopener\">here<\/a><\/span><\/p>\n<p><span data-contrast=\"auto\"><strong>Intel<\/strong>: A driver with Intel support for these features can be found at: <\/span><a href=\"https:\/\/nam06.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fwww.intel.com%2Fcontent%2Fwww%2Fus%2Fen%2Fdownload%2F726609%2Fintel-arc-iris-xe-graphics-whql-windows.html&amp;data=05%7C01%7CJacques.Van%40microsoft.com%7Ce4c6024c2705481e8c7e08db2c9a9633%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C638152814772213255%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=Sf8tPN1WuoY%2FYrsiwlaLL%2FhhMWKC%2FI6rj4hzVx0n0eg%3D&amp;reserved=0\"><span data-contrast=\"none\">Intel\u00ae Arc\u2122 &amp; Iris\u00ae Xe Graphics Driver 31.0.101.4255<\/span><\/a><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\"><strong>NVIDIA<\/strong>:\u00a0<\/span>NVIDIA\u2019s latest Game Ready Drivers and NVIDIA Studio Drivers (version 531.41) offer support for both GPU Upload Heaps on Ampere and newer GPUs and Non-normalized Sampling on all GPUs. You can update to this driver version seamlessly through GeForce Experience or by downloading directly from NVIDIA.com.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We\u2019re pleased to announce that we have a new preview Agility SDK out today, letting developers experiment with two new features: GPU Upload Heaps and Non-normalized Sampling!\u00a0 Head to Agility SDK Downloads to grab it.\u00a0 GPU Upload Heaps\u00a0 Introduction Historically a GPU\u2019s VRAM was inaccessible to the CPU, forcing programs to have to copy large [&hellip;]<\/p>\n","protected":false},"author":42930,"featured_media":2727,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-7692","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-directx"],"acf":[],"blog_post_summary":"<p>We\u2019re pleased to announce that we have a new preview Agility SDK out today, letting developers experiment with two new features: GPU Upload Heaps and Non-normalized Sampling!\u00a0 Head to Agility SDK Downloads to grab it.\u00a0 GPU Upload Heaps\u00a0 Introduction Historically a GPU\u2019s VRAM was inaccessible to the CPU, forcing programs to have to copy large [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/posts\/7692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/users\/42930"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/comments?post=7692"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/posts\/7692\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/media\/2727"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/media?parent=7692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/categories?post=7692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/directx\/wp-json\/wp\/v2\/tags?post=7692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}