{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,9,24]],"date-time":"2026-09-24T18:30:54Z","timestamp":1790274654309,"version":"4.1.0"},"reference-count":24,"publisher":"Association for Computing Machinery (ACM)","issue":"4","license":[{"start":{"date-parts":[[2018,7,30]],"date-time":"2018-07-30T00:00:00Z","timestamp":1532908800000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/100007065","name":"NVIDIA Corporation","doi-asserted-by":"crossref","id":[{"id":"10.13039\/100007065","id-type":"DOI","asserted-by":"crossref"}]},{"DOI":"10.13039\/100000001","name":"National Science Foundation","doi-asserted-by":"publisher","award":["IIS-1253530"],"award-info":[{"award-number":["IIS-1253530"]}],"id":[{"id":"10.13039\/100000001","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Graph."],"published-print":{"date-parts":[[2018,8,31]]},"abstract":"<jats:p>Designers of real-time rendering engines must balance the conflicting goals of maintaining clear, extensible shading systems and achieving high rendering performance. In response, engine architects have established effective design patterns for authoring shading systems, and developed engine-specific code synthesis tools, ranging from preprocessor hacking to domain-specific shading languages, to productively implement these patterns. The problem is that proprietary tools add significant complexity to modern engines, lack advanced language features, and create additional challenges for learning and adoption. We argue that the advantages of engine-specific code generation tools can be achieved using the underlying GPU shading language directly, provided the shading language is extended with a small number of best-practice principles from modern, well-established programming languages. We identify that adding generics with interface constraints, associated types, and interface\/structure extensions to existing C-like GPU shading languages enables real-time Tenderer developers to build shading systems that are extensible, maintainable, and execute efficiently on modern GPUs without the need for additional domain-specific tools. We embody these ideas in an extension of HLSL called Slang, and provide a reference design for a large, extensible shader library implemented using Slang's features. We rearchitect an open source Tenderer to use this library and Slang's compiler services, and demonstrate the resulting shading system is substantially simpler, easier to extend with new features, and achieves higher rendering performance than the original HLSL-based implementation.<\/jats:p>","DOI":"10.1145\/3197517.3201380","type":"journal-article","created":{"date-parts":[[2018,7,31]],"date-time":"2018-07-31T15:56:23Z","timestamp":1533052583000},"page":"1-13","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":24,"title":["Slang"],"prefix":"10.1145","volume":"37","author":[{"given":"Yong","family":"He","sequence":"first","affiliation":[{"name":"Carnegie Mellon University"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Kayvon","family":"Fatahalian","sequence":"additional","affiliation":[{"name":"Stanford University"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Theresa","family":"Foley","sequence":"additional","affiliation":[{"name":"NVIDIA"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2018,7,30]]},"reference":[{"key":"e_1_2_2_1_1","unstructured":"Amazon. 2016. Lumberyard Engine https:\/\/aws.amazon.com\/lumberyard\/. (2016)."},{"key":"e_1_2_2_2_1","unstructured":"Apple Inc. 2014a. Metal https:\/\/developer.apple.com\/documentation\/metal"},{"key":"e_1_2_2_3_1","unstructured":"Apple Inc. 2014b. The Swift Programming Language. https:\/\/itunes.apple.com\/us\/book\/the-swift-programming-language-swift-4-0-3\/id881256329"},{"key":"e_1_2_2_4_1","doi-asserted-by":"crossref","unstructured":"F. O. Bartell E. L. Dereniak and W. L Wolfe. 1981. The Theory And Measurement Of Bidirectional Reflectance Distribution Function (BRDF) And Bidirectional Transmittance Distribution Function (BTDF). (1981) 0257 - 0257 - 7 pages.","DOI":"10.1117\/12.959611"},{"key":"e_1_2_2_5_1","volume-title":"The Falcor Rendering Framework. (07","author":"Benty Nir","year":"2017","unstructured":"Nir Benty, Kai-Hwa Yao, Theresa Foley, Anton S. Kaplanyan, Conor Lavelle, Chris Wyman, and Ashwin Vijay 2017. The Falcor Rendering Framework. (07 2017). https:\/\/gir.hub.com\/NVTDIAGameWorks\/Falcor https:\/\/github.com\/NVIDIAGameWorks\/Falcor."},{"key":"e_1_2_2_6_1","unstructured":"ECMA International. 2017. C# Language Specification (ECMA-334:2017). (2017)."},{"key":"e_1_2_2_7_1","unstructured":"Epic Games. 2015. Unreal Engine 4 Documentation http:\/\/docs.unrealengine.com. (2015)."},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/3072959.3073648"},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/2897824.2925895"},{"key":"e_1_2_2_10_1","unstructured":"Sony Pictures Imageworks. 2017. Open Shading Language 1.9 Language Specification. https:\/\/github.com\/imageworks\/OpenShadingLanguage\/blob\/master\/src\/doc\/osl-languagespec.pdf. (2017)."},{"key":"e_1_2_2_11_1","unstructured":"Khronos Group Inc. 2009. ARB_shader_subroutine https:\/\/www.opengl.org\/registry\/specs\/ARB\/shader_subroutine.txt. (2009)."},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.5555\/1024226"},{"key":"e_1_2_2_13_1","doi-asserted-by":"publisher","DOI":"10.5555\/569046.569055"},{"key":"e_1_2_2_14_1","volume-title":"GPU Technology Conference 2016 (GTC). http:\/\/on-demand.gputechconf.com\/gtc\/2016\/events\/vulkanday\/High_Performance_Vulkan.pdf.","author":"McDonald John","year":"2016","unstructured":"John McDonald. 2016. High Performance Vulkan: Lessons Learned from Source 2. In GPU Technology Conference 2016 (GTC). http:\/\/on-demand.gputechconf.com\/gtc\/2016\/events\/vulkanday\/High_Performance_Vulkan.pdf."},{"key":"e_1_2_2_15_1","unstructured":"Microsoft. 2011. Interfaces and Classes https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ff471421.aspx. (2011)."},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","unstructured":"F. E. Nicodemus J. C. Richmond J. J. Hsia I. W. Ginsberg and T. Limperis. 1992. Radiometry Jones and Bartlett Publishers Inc. USA Chapter Geometrical Considerations and Nomenclature for Reflectance 94--145. http:\/\/dl.acm.org\/citation.cfm?id=136913.136929","DOI":"10.5555\/136913.136929"},{"key":"e_1_2_2_17_1","volume-title":"ORCA: Open Research Content Archive","author":"NVIDIA.","year":"2017","unstructured":"NVIDIA. 2017. ORCA: Open Research Content Archive. http:\/\/developer.nvidia.com\/orca. (2017)."},{"key":"e_1_2_2_18_1","unstructured":"Matt Pharr. 2004. An Introduction to Shader Interfaces. In GPU Gems: Programming Techniques Tips and Tricks for Real-Time Graphics Randima Fernando (Ed.). Pearson Higher Education."},{"key":"e_1_2_2_19_1","volume-title":"SIGGRAPH 2015 Course Notes: An Overview of Next-generation Graphics APIs. http:\/\/nextgenapis.realtimerendering.com\/presentations\/7_Pranckevicius_Unity.pptx.","author":"Pranckevi\u010dius Aras","year":"2015","unstructured":"Aras Pranckevi\u010dius. 2015. Porting Unity to new APIs. In SIGGRAPH 2015 Course Notes: An Overview of Next-generation Graphics APIs. http:\/\/nextgenapis.realtimerendering.com\/presentations\/7_Pranckevicius_Unity.pptx."},{"key":"e_1_2_2_20_1","unstructured":"Rust Project Developers. 2015. The Rust Programming Language. https:\/\/doc.rust-lang.org\/book\/."},{"key":"e_1_2_2_21_1","volume-title":"DirectX Raytracing. Game Developers Conference 2018 slides.. (2018","author":"Sandy Matt","year":"2018","unstructured":"Matt Sandy. 2018. DirectX Raytracing. Game Developers Conference 2018 slides.. (2018). https:\/\/msdnshared.blob.core.windows.net\/media\/2018\/03\/GDC_DXR_deck.pdf"},{"key":"e_1_2_2_22_1","unstructured":"Natalya Tatarchuk and Chris Tchou. 2017. Destiny Shader Pipeline. (2017). http:\/\/advances.realtimerendering.com\/destiny\/gdc_2017\/index.html."},{"key":"e_1_2_2_23_1","unstructured":"Unity Technologies. 2017. Unity 5.6 Users Manual. Available at https:\/\/docs.unity3d.com\/. (2017)."},{"key":"e_1_2_2_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/75277.75283"}],"container-title":["ACM Transactions on Graphics"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3197517.3201380","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3197517.3201380","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3197517.3201380","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T02:06:59Z","timestamp":1750212419000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3197517.3201380"}},"subtitle":["language mechanisms for extensible real-time shading systems"],"short-title":[],"issued":{"date-parts":[[2018,7,30]]},"references-count":24,"journal-issue":{"issue":"4","published-print":{"date-parts":[[2018,8,31]]}},"alternative-id":["10.1145\/3197517.3201380"],"URL":"https:\/\/doi.org\/10.1145\/3197517.3201380","relation":{},"ISSN":["0730-0301","1557-7368"],"issn-type":[{"value":"0730-0301","type":"print"},{"value":"1557-7368","type":"electronic"}],"subject":[],"published":{"date-parts":[[2018,7,30]]},"assertion":[{"value":"2018-07-30","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}