{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,3]],"date-time":"2026-07-03T19:33:01Z","timestamp":1783107181342,"version":"3.54.6"},"reference-count":53,"publisher":"Association for Computing Machinery (ACM)","issue":"6","license":[{"start":{"date-parts":[[2019,11,8]],"date-time":"2019-11-08T00:00:00Z","timestamp":1573171200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/100000001","name":"National Science Foundation","doi-asserted-by":"publisher","award":["DGE-1148897"],"award-info":[{"award-number":["DGE-1148897"]}],"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":[[2019,12,31]]},"abstract":"<jats:p>The shader system for a modern game engine comprises much more than just compilation of source code to executable kernels. Shaders must also be exposed to art tools, interfaced with engine code, and specialized for performance. Engines typically address each of these tasks in an ad hoc fashion, without a unifying abstraction. The alternative of developing a more powerful compiler framework is prohibitive for most engines.<\/jats:p>\n          <jats:p>\n            In this paper, we identify\n            <jats:italic>staged metaprogramming<\/jats:italic>\n            as a unifying abstraction and implementation strategy to develop a powerful shader system with modest effort. By using a multi-stage language to perform metaprogramming at compile time, engine-specific code can consume, analyze, transform, and generate shader code that will execute at runtime. Staged metaprogramming reduces the effort required to implement a shader system that provides earlier error detection, avoids repeat declarations of shader parameters, and explores opportunities to improve performance.\n          <\/jats:p>\n          <jats:p>To demonstrate the value of this approach, we design and implement a shader system, called Selos, built using staged metaprogramming. In our system, shader and application code are written in the same language and can share types and functions. We implement a design space exploration framework for Selos that investigates static versus dynamic composition of shader features, exploring the impact of shader specialization in a deferred renderer. Staged metaprogramming allows Selos to provide compelling features with a simple implementation.<\/jats:p>","DOI":"10.1145\/3355089.3356554","type":"journal-article","created":{"date-parts":[[2019,11,8]],"date-time":"2019-11-08T20:27:58Z","timestamp":1573244878000},"page":"1-15","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":9,"title":["Staged metaprogramming for shader system development"],"prefix":"10.1145","volume":"38","author":[{"suffix":"JR.","given":"Kerry A.","family":"Seitz","sequence":"first","affiliation":[{"name":"University of California"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Theresa","family":"Foley","sequence":"additional","affiliation":[{"name":"NVIDIA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Serban D.","family":"Porumbescu","sequence":"additional","affiliation":[{"name":"University of California"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"John D.","family":"Owens","sequence":"additional","affiliation":[{"name":"University of California"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2019,11,8]]},"reference":[{"key":"e_1_2_2_1_1","volume-title":"Game Developers Conference","author":"Andersson Johan","year":"2011","unstructured":"Johan Andersson. 2011. DirectX 11 Rendering in Battlefield 3. Game Developers Conference 2011. http:\/\/www.dice.se\/news\/directx-11-rendering-battlefield-3\/"},{"key":"e_1_2_2_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/62678.62687"},{"key":"e_1_2_2_3_1","unstructured":"Sean Baxter. 2019. Circle. https:\/\/github.com\/seanbaxter\/circle"},{"key":"e_1_2_2_4_1","unstructured":"Nir Benty Kai-Hwa Yao Theresa Foley Matthew Oakes Conor Lavelle and Chris Wyman. 2018. The Falcor Rendering Framework. https:\/\/github.com\/NVIDIAGameWorks\/Falcor https:\/\/github.com\/NVIDIAGameWorks\/Falcor."},{"key":"e_1_2_2_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/1141911.1141947"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-39815-8_4"},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/217838.217868"},{"key":"e_1_2_2_8_1","unstructured":"Matus Chochlik Axel Naumann and David Sankel. 2018. Static reflection. C++ Standards Committee Papers. http:\/\/wg21.link\/p0194"},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/2661229.2661245"},{"key":"e_1_2_2_10_1","doi-asserted-by":"crossref","unstructured":"Robert L. Cook. 1984. Shade Trees. In Computer Graphics (Proceedings of SIGGRAPH 84). 223--231.","DOI":"10.1145\/800031.808602"},{"key":"e_1_2_2_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/1346281.1346312"},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491956.2462166"},{"key":"e_1_2_2_13_1","volume-title":"ACM SIGGRAPH 2016 Courses (SIGGRAPH '16)","author":"Garawany Ramy El","year":"2016","unstructured":"Ramy El Garawany. 2016. Advances in Real-time Rendering, Part I: Deferred Lighting in Uncharted 4. In ACM SIGGRAPH 2016 Courses (SIGGRAPH '16). http:\/\/advances.realtimerendering.com\/s2016\/index.html"},{"key":"e_1_2_2_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/1017472.1017482"},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/237721.237765"},{"key":"e_1_2_2_16_1","unstructured":"Epic Games. 2017. Unreal Engine Sun Temple Open Research Content Archive (ORCA). https:\/\/developer.nvidia.com\/ue4-sun-temple"},{"key":"e_1_2_2_17_1","unstructured":"Epic Games Inc. 2019. Unreal Engine 4 Documentation. https:\/\/docs.unrealengine.com\/en-us\/"},{"key":"e_1_2_2_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/581478.581486"},{"key":"e_1_2_2_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/2010324.1965002"},{"key":"e_1_2_2_20_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-11980-9_13"},{"key":"e_1_2_2_21_1","unstructured":"Romain Guy and Mathias Agopian. 2019. Filament. https:\/\/github.com\/google\/filament https:\/\/github.com\/google\/filament."},{"key":"e_1_2_2_22_1","doi-asserted-by":"crossref","unstructured":"Pat Hanrahan and Jim Lawson. 1990. A Language for Shading and Lighting Calculations. In Computer Graphics (Proceedings of SIGGRAPH 90). 289--298.","DOI":"10.1145\/97879.97911"},{"key":"e_1_2_2_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/3197517.3201380"},{"key":"e_1_2_2_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/2897824.2925923"},{"key":"e_1_2_2_25_1","doi-asserted-by":"publisher","DOI":"10.1002\/(SICI)1097-024X(199606)26:6"},{"key":"e_1_2_2_26_1","unstructured":"John Kessenich and Boaz Ouriel. 2018. SPIR-V Specification (Version 1.00). https:\/\/www.khronos.org\/registry\/spir-v\/specs\/1.0\/SPIRV.pdf."},{"key":"e_1_2_2_27_1","unstructured":"Khronos Group. 2016. Vulkan 1.0.12 - A Specification. https:\/\/www.khronos.org\/registry\/vulkan\/specs\/1.0\/pdf\/vkspec.pdf."},{"key":"e_1_2_2_28_1","volume-title":"Proceedings of SIGRAD","author":"Lejdfors Calle","year":"2004","unstructured":"Calle Lejdfors and Lennart Ohlsson. 2004. PyFX - An active effect framework. In Proceedings of SIGRAD 2004. Link\u00f6ping University Electronic Press, 17--24. http:\/\/www.ep.liu.se\/ecp\/article.asp?issue=013&article=006"},{"key":"e_1_2_2_29_1","volume-title":"Game Developers Conference","author":"Marchalot Ronan","year":"2018","unstructured":"Ronan Marchalot. 2018. Cluster Forward Rendering and Anti-Aliasing in 'Detroit: Become Human'. Game Developers Conference 2018. https:\/\/www.gdcvault.com\/play\/1025420\/Cluster-Forward-Rendering-and-Anti"},{"key":"e_1_2_2_30_1","volume-title":"ACM SIGGRAPH 2018 Courses (SIGGRAPH '18)","author":"McAuley Stephen","year":"2018","unstructured":"Stephen McAuley. 2018. Advances in Real-time Rendering in Games, Part I: The Challenges of Rendering an Open World in Far Cry 5. In ACM SIGGRAPH 2018 Courses (SIGGRAPH '18). ACM. http:\/\/advances.realtimerendering.com\/s2018\/index.htm"},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/367177.367199"},{"key":"e_1_2_2_32_1","volume-title":"Shader Metaprogramming. In Proceedings of the ACM SIGGRAPH\/EUROGRAPHICS Conference on Graphics Hardware (HWWS '02)","author":"McCool Michael D.","unstructured":"Michael D. McCool, Zheng Qin, and Tiberiu S. Popa. 2002. Shader Metaprogramming. In Proceedings of the ACM SIGGRAPH\/EUROGRAPHICS Conference on Graphics Hardware (HWWS '02). 57--68. http:\/\/dl.acm.org\/citation.cfm?id=569046.569055"},{"key":"e_1_2_2_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/1111411.1111425"},{"key":"e_1_2_2_34_1","volume-title":"https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ff476118(v=vs.85).aspx","author":"Effect Format","year":"2010","unstructured":"Microsoft. 2010. Effect Format (Direct3D 11). (2010). https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ff476118(v=vs.85).aspx."},{"key":"e_1_2_2_35_1","unstructured":"Microsoft. 2017. Direct3D 12 Programming Guide. https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/direct3d12\/directx-12-programming-guide"},{"key":"e_1_2_2_36_1","unstructured":"Microsoft. 2019. DirectX Shader Compiler. https:\/\/github.com\/Microsoft\/DirectXShaderCompiler https:\/\/github.com\/Microsoft\/DirectXShaderCompiler."},{"key":"e_1_2_2_37_1","volume-title":"NVIDIA CUDA Compute Unified Device Architecture Programming Guide. (Jan","author":"NVIDIA Corporation","year":"2007","unstructured":"NVIDIA Corporation. 2007. NVIDIA CUDA Compute Unified Device Architecture Programming Guide. (Jan. 2007). http:\/\/developer.nvidia.com\/cuda."},{"key":"e_1_2_2_38_1","unstructured":"NVIDIA Corporation. 2010. Introduction to CgFX. (2010). http:\/\/http.developer.nvidia.com\/CgTutorial\/cg_tutorial_chapter01.html."},{"key":"e_1_2_2_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/3306346.3322955"},{"key":"e_1_2_2_40_1","unstructured":"Aras Pranckevi\u010dius. 2013. HLSL to GLSL shader language translator. https:\/\/github.com\/aras-p\/hlsl2glslfork"},{"key":"e_1_2_2_41_1","unstructured":"Aras Pranckevi\u010dius. 2016. Personal Communication."},{"key":"e_1_2_2_42_1","doi-asserted-by":"publisher","DOI":"10.1145\/383259.383275"},{"key":"e_1_2_2_43_1","unstructured":"Rust Project Developers. 2015. The Rust Programming Language. https:\/\/doc.rustlang.org\/book\/."},{"key":"e_1_2_2_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/3133895"},{"key":"e_1_2_2_45_1","volume-title":"The OpenGL\u00a9 Graphics System: A Specification (Version 4.5 (Core Profile) -","author":"Segal Mark","year":"2015","unstructured":"Mark Segal, Kurt Akeley, Chris Frazier, Jon Leech, and Pat Brown. 2015. The OpenGL\u00a9 Graphics System: A Specification (Version 4.5 (Core Profile) - May 28, 2015). https:\/\/www.opengl.org\/registry\/doc\/glspec45.core.pdf."},{"key":"e_1_2_2_46_1","volume-title":"ACM SIGGRAPH 2016 Courses (SIGGRAPH '16)","author":"Sousa Tiago","year":"2016","unstructured":"Tiago Sousa and Jean Geffroy. 2016. Advances in Real-time Rendering, Part II: The Devil is in the Details: idTech 666. In ACM SIGGRAPH 2016 Courses (SIGGRAPH '16). http:\/\/advances.realtimerendering.com\/s2016\/index.html"},{"key":"e_1_2_2_47_1","doi-asserted-by":"publisher","DOI":"10.1023\/A:1010035624696"},{"key":"e_1_2_2_48_1","volume-title":"Metaclasses: Generative C++. C++ Standards Committee Papers. https:\/\/wg21.link\/P0707","author":"Sutter Herb","year":"2018","unstructured":"Herb Sutter. 2018. Metaclasses: Generative C++. C++ Standards Committee Papers. https:\/\/wg21.link\/P0707"},{"key":"e_1_2_2_49_1","doi-asserted-by":"publisher","DOI":"10.1016\/S0304-3975(00)00053-0"},{"key":"e_1_2_2_50_1","unstructured":"Walid Mohamed Taha. 1999. Multistage Programming: Its Theory and Applications. Ph.D. Dissertation. Oregon Graduate Institute of Science and Technology."},{"key":"e_1_2_2_51_1","volume-title":"Destiny Shader Pipeline. Game Developers Conference 2017","author":"Tatarchuk Natalya","year":"2017","unstructured":"Natalya Tatarchuk and Chris Tchou. 2017. Destiny Shader Pipeline. Game Developers Conference 2017. http:\/\/advances.realtimerendering.com\/destiny\/gdc_2017\/"},{"key":"e_1_2_2_52_1","volume-title":"Unity User Manual","author":"Technologies Unity","year":"2019","unstructured":"Unity Technologies. 2019. Unity User Manual (2019.1). https:\/\/docs.unity3d.com\/Manual\/index.html"},{"key":"e_1_2_2_53_1","unstructured":"Daveed Vandevoorde and Louis Dionne. 2017. Exploring the design space of metaprogramming and reflection. C++ Standards Committee Papers. https:\/\/wg21.link\/P0633"}],"container-title":["ACM Transactions on Graphics"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3355089.3356554","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3355089.3356554","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3355089.3356554","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T23:44:41Z","timestamp":1750203881000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3355089.3356554"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019,11,8]]},"references-count":53,"journal-issue":{"issue":"6","published-print":{"date-parts":[[2019,12,31]]}},"alternative-id":["10.1145\/3355089.3356554"],"URL":"https:\/\/doi.org\/10.1145\/3355089.3356554","relation":{},"ISSN":["0730-0301","1557-7368"],"issn-type":[{"value":"0730-0301","type":"print"},{"value":"1557-7368","type":"electronic"}],"subject":[],"published":{"date-parts":[[2019,11,8]]},"assertion":[{"value":"2019-11-08","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}