{"id":18782080,"url":"https://github.com/gpuopen-librariesandsdks/renderpipelineshaders","last_synced_at":"2025-04-06T09:07:44.571Z","repository":{"id":64867299,"uuid":"578559440","full_name":"GPUOpen-LibrariesAndSDKs/RenderPipelineShaders","owner":"GPUOpen-LibrariesAndSDKs","description":"Render Pipeline Shaders SDK","archived":false,"fork":false,"pushed_at":"2024-05-17T21:16:04.000Z","size":13029,"stargazers_count":333,"open_issues_count":16,"forks_count":25,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-03-30T06:11:08.469Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GPUOpen-LibrariesAndSDKs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-15T10:47:27.000Z","updated_at":"2025-03-25T15:04:03.000Z","dependencies_parsed_at":"2024-01-13T23:47:35.523Z","dependency_job_id":"97dd21c7-6a8c-4a83-94f2-f905212b8732","html_url":"https://github.com/GPUOpen-LibrariesAndSDKs/RenderPipelineShaders","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPUOpen-LibrariesAndSDKs%2FRenderPipelineShaders","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPUOpen-LibrariesAndSDKs%2FRenderPipelineShaders/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPUOpen-LibrariesAndSDKs%2FRenderPipelineShaders/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPUOpen-LibrariesAndSDKs%2FRenderPipelineShaders/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GPUOpen-LibrariesAndSDKs","download_url":"https://codeload.github.com/GPUOpen-LibrariesAndSDKs/RenderPipelineShaders/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247457801,"owners_count":20941906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T20:34:46.451Z","updated_at":"2025-04-06T09:07:44.554Z","avatar_url":"https://github.com/GPUOpen-LibrariesAndSDKs.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AMD Render Pipeline Shaders (RPS) SDK\n\nCopyright (c) 2024 Advanced Micro Devices, Inc.\n\nThe AMD Render Pipeline Shaders (RPS) SDK is released under the MIT LICENSE. Please see file\n[LICENSE.txt](LICENSE.txt) for full license details.\n\nThe AMD Render Pipeline Shaders (RPS) SDK Open Beta was previously released under the \nAMD INTERNAL EVALUATION LICENSE.\n\n## Introduction\n\nThe AMD Render Pipeline Shaders (RPS) SDK is a comprehensive and extensible Render Graph framework.\n\nSince the debut of explicit graphics APIs (Direct3D 12 and Vulkan®), Render Graphs (or Frame Graphs) have been proposed\nas an elegant and efficient solution to various problems such as generating resource barriers, managing transient memory\nand scheduling GPU workload. In practice, it is non-trivial to implement a render graph system from scratch, and it\nrequires effort to keep it optimal according to hardware, API and content changes. Porting effects and techniques\nbetween different render graph systems may also consume extra engineering time.\n\n![image](./docs/assets/rps_purpose.svg)\n\nThe RPS SDK intends to make Render Graphs more easily accessible and to provide a generally optimal barrier generator\nand (aliasing) memory scheduler. RPS also tries to simplify Render Graph construction by extending HLSL with attributes\nand intrinsics to create a domain specific language for render graph programming. This enables opt-in applications to\nprogram Render Graphs implicitly via a high-level, declarative programming model, allowing users to focus on the render\npipeline logic rather than node configuration details. We call the extended language \"Render Pipeline Shader Language\",\nor RPSL.\n\nThe SDK has a compiler-like architecture. It includes a frontend used to specify resources and a node sequence, a\nruntime compiler which compiles the linear node sequence into a graph and schedules it, and a runtime backend that\nconverts the scheduled render graph into graphics API commands.\n\n![image](./docs/assets/sdk_structure.svg)\n\nThe RPS SDK is built with controllability and extensibility in mind. The HLSL language extension and API provide a rich\nset of controls for customizing its behavior. Both the frontend, the runtime render graph compiler, and the backend can\nbe extended and customized.\n\n## Content Structure\n\nNotable directories and files of the SDK:\n\n- [./include](./include/): Main public API headers.\n- [./src](./src): Main implementation sources and C++ class definitions.\n- [./tools/rps_hlslc](./tools/rps_hlslc/): The RPSL compiler toolchain ([Windows x64](./tools/rps_hlslc/win-64), [Linux x64](./tools/rps_hlslc/linux-x64)).\n- [./tools/rps_hlslc/rpsl/rpsl.h](./tools/rps_hlslc/rpsl/rpsl.h): The RPSL language documentation embedded in a header file.\n- [./tools/rps_visualizer](./tools/rps_visualizer): A library to visualize RPS render graph resources and memory layout. Please refer to [README.md](./tools/rps_visualizer/README.md) for more details.\n- [./tools/rps_explorer](./tools/rps_explorer): A tool to load and test RPSL files.\n- [./tests/console](./tests/console) and [./tests/gui](./tests/gui): Test cases. Currently also serve as samples.\n\n## Build\n\n### Prerequisites\n\n- OS: Windows 10 21H2 or later.\n- Compiler: A C++11 compliant compiler. Tested compilers include Visual C++ toolset v141 or later (VS2017+) and Clang 15.0.1.\n- CMake: CMake 3.12.1 or later.\n- Vulkan SDK 1.2.162.1 or later (If the Vulkan backend and its dependents are desired).\n\n### Submodule dependencies\n\nThe SDK has [catch2](https://github.com/catchorg/Catch2.git) and [imgui](https://github.com/ocornut/imgui.git) as\nexternal git submodule dependencies. If you didn't initially clone with `--recursive` or another method that fetches the\nsubmodule dependencies automatically, please `git submodule init` and `git submodule update` inside the SDK clone\ndirectory to fetch them before attempting to build.\n\n### Build Steps\n\nThe SDK uses CMake. There are a few ways to start:\n\n- Using default build batch file [./build.bat](./build.bat).\n- Manually config using CMake:\n\n    ```cmake\n    cmake -S ./ -B ./build -A x64\n    cmake --build ./build --config RelWithDebInfo\n    ```\n\n### Running Tests \u0026 RPSL Explorer\n\nAfter a successful build:\n\n- By default (or when CMake option RpsBuildTests is ON), all tests can be executed by running ctest from the build folder:\n\n    ```bash\n    cd build\n    ctest -C RelWithDebInfo\n    ```\n\n- By default, the RPSL Explorer binaries can be located at `./build/tools/rpsl_explorer/\u003cconfig_name\u003e/`. Run `rpsl_explorer.exe` and open an RPSL file to start hacking!\n\n## Getting Started\n\nIf you are new to RPS, we recommend reading through our tutorial which you can find at [./docs/tutorial](./docs/tutorial) in this repository and at [https://gpuopen.com/learn/rps-tutorial](https://gpuopen.com/learn/rps-tutorial) on GPUOpen.\n\nAfter this, you should be well equipped to browse the [test samples](./tests) and let RPS drive the frame graph logic of your own 3D application.\n\n## Documentation\n\nThe main sources of documentation for the RPS public APIs are inlined Doxygen-style comments, which can be built into\nHTML documents if Doxygen is installed (tested with Doxygen version 1.9.2):\n\n```bash\ndoxygen\n```\n\n## Getting Help\n\nIf you are facing any problems that you cannot solve by checking out the documentation or the samples, do not worry. You can contact us by [raising GitHub issues](https://github.com/GPUOpen-LibrariesAndSDKs/RenderPipelineShaders/issues), [@GPUOpen](https://twitter.com/GPUOpen) on Twitter, [@GPUOpen@mastodon.gamedev.place](@GPUOpen@mastodon.gamedev.place) on Mastodon and by using [this invitation link](https://discord.gg/sZhDJ2rDa9), you can join our Discord server and chat with the RPS team directly. \n\n## Integration\n\nIf the parent project uses CMake, RPS can be added as a subdirectory, e.g.:\n\n```cmake\nset(RpsRootSolutionFolder \"rps\")\nadd_subdirectory(libs/AMD/rps)\n```\n\nRPS can also be integrated as pre-built static libraries, or you may include the RPS sources directly.\n\nThe main header to include is [./include/rps/rps.h](./include/rps/rps.h). A few macros (`RPS_D3D12_RUNTIME`,\n`RPS_VK_RUNTIME`, `RPS_D3D11_RUNTIME`) can be used to selectively enable default runtime backends.\n\nRPSL files can be compiled into C source code with the provided RPS-HLSLC tool chain at development time. The generated\n.C file can be integrated into the engine or application sources. Typical usage:\n\n```bash\nrps-hlslc.exe \u003crpsl_file_name\u003e [-od \u003coutout_directory\u003e] [-m \u003coverride_module_name\u003e] ...\n```\n\nPlease see [./tools/rps_hlslc/README.md](./tools/rps_hlslc/README.md) for usage details.\n\nCurrently, the RPS SDK is released under the AMD Internal Evaluation License. We welcome everyone to try it out and\nappreciate any feedback! If you are interested in using it in a future engine or title product, please contact an AMD\nAlliance Manager or Developer Technology engineer.\n\n## Third-Party Software\n\n- [Catch2](https://github.com/catchorg/Catch2)\n- [Dear ImGui](https://github.com/ocornut/imgui)\n- [Microsoft DirectX Shader Compiler](https://github.com/microsoft/DirectXShaderCompiler)\n- [LLVM](https://llvm.org/)\n- [LLVM-CBE (C Backend)](https://github.com/JuliaHubOSS/llvm-cbe)\n\n## Attribution\n\n- AMD, the AMD Arrow logo, Radeon, Crossfire, and combinations thereof are either registered trademarks or trademarks of Advanced Micro Devices, Inc. in the United States and/or other countries.\n- Microsoft, DirectX, Visual Studio, and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgpuopen-librariesandsdks%2Frenderpipelineshaders","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgpuopen-librariesandsdks%2Frenderpipelineshaders","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgpuopen-librariesandsdks%2Frenderpipelineshaders/lists"}