{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,3]],"date-time":"2026-07-03T19:32:32Z","timestamp":1783107152159,"version":"3.54.6"},"reference-count":24,"publisher":"Association for Computing Machinery (ACM)","issue":"4","license":[{"start":{"date-parts":[[2017,7,20]],"date-time":"2017-07-20T00:00:00Z","timestamp":1500508800000},"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":["IIS-1253530"],"award-info":[{"award-number":["IIS-1253530"]}],"id":[{"id":"10.13039\/100000001","id-type":"DOI","asserted-by":"publisher"}]},{"name":"NVIDIA Faculty Partnership"},{"name":"NVIDIA Graduate Fellowship"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Graph."],"published-print":{"date-parts":[[2017,8,31]]},"abstract":"<jats:p>\n            Modern game engines seek to balance the conflicting goals of high rendering performance and productive software development. To improve CPU performance, the most recent generation of real-time graphics APIs provide new primitives for performing efficient batch updates to shader parameters. However, modern game engines featuring large shader codebases have struggled to take advantage of these benefits. The problem is that even though shader parameters can be organized into efficient modules bound to the pipeline at various frequencies, modern shading languages lack corresponding primitives to organize shader logic (requiring these parameters) into modules as well. The result is that complex shaders are typically compiled to use a monolithic block of parameters, defeating the design, and performance benefits, of the new parameter binding API. In this paper we propose to resolve this mismatch by introducing\n            <jats:italic>shader components<\/jats:italic>\n            , a first-class unit of modularity in a shader program that encapsulates a unit of shader logic and the parameters that must be bound when that logic is in use. We show that by building sophisticated shaders out of components, we can retain essential aspects of performance (static specialization of the shader logic in use and efficient update of parameters at component granularity) while maintaining the modular shader code structure that is desirable in today's high-end game engines.\n          <\/jats:p>","DOI":"10.1145\/3072959.3073648","type":"journal-article","created":{"date-parts":[[2017,7,21]],"date-time":"2017-07-21T12:24:07Z","timestamp":1500639847000},"page":"1-11","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":16,"title":["Shader components"],"prefix":"10.1145","volume":"36","author":[{"given":"Yong","family":"He","sequence":"first","affiliation":[{"name":"Carnegie Mellon University"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Theresa","family":"Foley","sequence":"additional","affiliation":[{"name":"NVIDIA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Teguh","family":"Hofstee","sequence":"additional","affiliation":[{"name":"Carnegie Mellon University"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Haomin","family":"Long","sequence":"additional","affiliation":[{"name":"Tsinghua University"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Kayvon","family":"Fatahalian","sequence":"additional","affiliation":[{"name":"Carnegie Mellon University"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2017,7,20]]},"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","doi-asserted-by":"publisher","DOI":"10.1145\/1141911.1141947"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","DOI":"10.1111\/j.1467-8659.2008.01245.x"},{"key":"e_1_2_2_4_1","first-page":"197","article-title":"Cascaded Shadow Maps. In ShaderX5 - Advanced Rendering Techniques, Woflgang F. Engel (Ed.). Boston, Massachusetts","volume":"4","author":"Engel Woflgang F.","year":"2006","unstructured":"Woflgang F. Engel. 2006. Cascaded Shadow Maps. In ShaderX5 - Advanced Rendering Techniques, Woflgang F. Engel (Ed.). Boston, Massachusetts, Chapter 4, 197--206.","journal-title":"Chapter"},{"key":"e_1_2_2_5_1","unstructured":"Epic Games. 2015. Unreal Engine 4 Documentation. http:\/\/docs.unrealengine.com. (2015)."},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/2010324.1965002"},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/97880.97911"},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/2897824.2925923"},{"key":"e_1_2_2_9_1","volume-title":"SIGGRAPH 2013 Course Notes: Physically Based Shading in Theory and Practice. http:\/\/blog.selfshadow.com\/publications\/s2013-shading-course\/.","author":"Karis Brian","year":"2013","unstructured":"Brian Karis. 2013. Real Shading in Unreal Engine 4. In SIGGRAPH 2013 Course Notes: Physically Based Shading in Theory and Practice. http:\/\/blog.selfshadow.com\/publications\/s2013-shading-course\/."},{"key":"e_1_2_2_10_1","unstructured":"John Kessenich Dave Baldwin and Randi Rost. 2014. The OpenGL\u00a9 Shading Language (Version 4.50). https:\/\/www.opengl.org\/registry\/doc\/GLSLangSpec4.50.pdf."},{"key":"e_1_2_2_11_1","unstructured":"John Kessenich Boaz Ouriel and Raun Krisch. 2016. SPIR-V Specification Provisional (Version 1.1 Revision 4). https:\/\/www.khronos.org\/registry\/spir-v\/specs\/1.1\/SPIRV.pdf."},{"key":"e_1_2_2_12_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_13_1","unstructured":"Khronos Group Inc. 2016. Vulkan 1.0.38 Specification."},{"key":"e_1_2_2_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/882262.882362"},{"key":"e_1_2_2_15_1","volume-title":"McCool and Stefanus Du Toit","author":"Michael","year":"2004","unstructured":"Michael D. McCool and Stefanus Du Toit. 2004. Metaprogramming GPUs with Sh. A K Peters. I-XVII, 1--290 pages."},{"key":"e_1_2_2_16_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_17_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_18_1","unstructured":"Microsoft. 2011. Interfaces and Classes. https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/ff471421.aspx. (2011)."},{"key":"e_1_2_2_19_1","unstructured":"Microsoft. 2017. Direct3D 12 Programming Guide. https:\/\/msdn.microsoft.com\/en-us\/library\/windows\/desktop\/dn899121(v=vs.85).aspx. (2017)."},{"key":"e_1_2_2_20_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_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/2776880.2787704"},{"key":"e_1_2_2_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/383259.383275"},{"key":"e_1_2_2_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/1111411.1111423"},{"key":"e_1_2_2_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/364338.364387"}],"container-title":["ACM Transactions on Graphics"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3072959.3073648","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3072959.3073648","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3072959.3073648","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T03:30:23Z","timestamp":1750217423000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3072959.3073648"}},"subtitle":["modular and high performance shader development"],"short-title":[],"issued":{"date-parts":[[2017,7,20]]},"references-count":24,"journal-issue":{"issue":"4","published-print":{"date-parts":[[2017,8,31]]}},"alternative-id":["10.1145\/3072959.3073648"],"URL":"https:\/\/doi.org\/10.1145\/3072959.3073648","relation":{},"ISSN":["0730-0301","1557-7368"],"issn-type":[{"value":"0730-0301","type":"print"},{"value":"1557-7368","type":"electronic"}],"subject":[],"published":{"date-parts":[[2017,7,20]]},"assertion":[{"value":"2017-07-20","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}