https://arxiv.org/abs/2109.14682 close this message Donate to arXiv Please join the Simons Foundation and our generous member organizations in supporting arXiv during our giving campaign September 23-27. 100% of your contribution will fund improvements and new initiatives to benefit arXiv's global scientific community. DONATE [secure site, no need to create account] Skip to main content Cornell University We gratefully acknowledge support from the Simons Foundation and member institutions. arXiv.org > cs > arXiv:2109.14682 [ ] Help | Advanced Search [All fields ] Search arXiv Cornell University Logo [ ] GO quick links * Login * Help Pages * About Computer Science > Graphics arXiv:2109.14682 (cs) [Submitted on 29 Sep 2021] Title:Unified Shader Programming in C++ Authors:Kerry A. Seitz Jr., Theresa Foley, Serban D. Porumbescu, John D. Owens Download PDF Abstract: In real-time graphics, the strict separation of programming languages and environments for host (CPU) code and GPU code results in code duplication, subtle compatibility bugs, and additional development and maintenance costs. In contrast, popular general-purpose GPU (GPGPU) programming models like CUDA and C++ AMP avoid many of these issues by presenting unified programming environments where both host and GPU code are written in the same language, can be in the same file, and share lexical scopes. To bring the benefits of unified programming to real-time graphics, this paper examines graphics-specific challenges that complicate the development of such a unified model and explores how to overcome them in a widely used programming language. We observe that GPU code specialization, a key optimization in real-time graphics, requires coordination between parameters that are compile-time-constant in GPU code but are assigned values at runtime in host code based on dynamic data. Current methods used to implement specialization do not translate to a unified environment where host and GPU code share declarations of these parameters. Furthermore, this compile-time vs. runtime coordination is not innately expressible in the popular languages used in this domain. In this paper, we create a unified environment for real-time graphics programming in C++ by co-opting existing features of the language and implementing them with alternate semantics to express the services required. Specifically, we co-opt C++ attributes and virtual functions, which enables us to provide first-class support for specialization in our unified system. By co-opting existing features, we enable programmers to use familiar C++ programming techniques to write host and GPU code together, while still achieving efficient generated C++ and HLSL code via our source-to-source translator. Comments: 13 pages, 1 figure, 8 code listings, 2 tables. In preparation for future conference/journal submission Subjects: Graphics (cs.GR); Programming Languages (cs.PL) ACM classes: I.3.6; D.3.2; D.3.4 Cite as: arXiv:2109.14682 [cs.GR] (or arXiv:2109.14682v1 [cs.GR] for this version) Submission history From: Kerry A. Seitz Jr. [view email] [v1] Wed, 29 Sep 2021 19:36:57 UTC (2,987 KB) Full-text links: Download: * PDF * Other formats [by-4] Current browse context: cs.GR < prev | next > new | recent | 2109 Change to browse by: cs cs.PL References & Citations * NASA ADS * Google Scholar * Semantic Scholar a export bibtex citation Loading... Bibtex formatted citation x [loading... ] Data provided by: Bookmark BibSonomy logo Mendeley logo Reddit logo ScienceWISE logo (*) Bibliographic Tools Bibliographic and Citation Tools [ ] Bibliographic Explorer Toggle Bibliographic Explorer (What is the Explorer?) [ ] Litmaps Toggle Litmaps (What is Litmaps?) [ ] scite.ai Toggle scite Smart Citations (What are Smart Citations?) ( ) Code & Data Code and Data Associated with this Article [ ] arXiv Links to Code Toggle arXiv Links to Code & Data (What is Links to Code & Data?) ( ) Related Papers Recommenders and Search Tools [ ] Connected Papers Toggle Connected Papers (What is Connected Papers?) [ ] Core recommender toggle CORE Recommender (What is CORE?) ( ) About arXivLabs arXivLabs: experimental projects with community collaborators arXivLabs is a framework that allows collaborators to develop and share new arXiv features directly on our website. Both individuals and organizations that work with arXivLabs have embraced and accepted our values of openness, community, excellence, and user data privacy. arXiv is committed to these values and only works with partners that adhere to them. Have an idea for a project that will add value for arXiv's community? Learn more about arXivLabs and how to get involved. Which authors of this paper are endorsers? | Disable MathJax (What is MathJax?) * About * Help * Click here to contact arXiv Contact * Click here to subscribe Subscribe * Copyright * Privacy Policy * Web Accessibility Assistance * arXiv Operational Status Get status notifications via email or slack