{"id":19732338,"url":"https://github.com/gpuopen-tools/gpu-reshape","last_synced_at":"2025-05-16T01:05:57.998Z","repository":{"id":217910351,"uuid":"416726539","full_name":"GPUOpen-Tools/GPU-Reshape","owner":"GPUOpen-Tools","description":"GPU Reshape (GRS) is an API \u0026 vendor agnostic instrumentation framework, with instruction level validation.","archived":false,"fork":false,"pushed_at":"2025-05-11T17:37:07.000Z","size":262873,"stargazers_count":422,"open_issues_count":15,"forks_count":17,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-05-11T18:33:03.793Z","etag":null,"topics":["d3d12","directx","directx-12","gpu-reshape","graphics","graphics-programming","instrumentation","validation","vulkan","vulkan-api"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GPUOpen-Tools.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":null,"funding":null,"license":"License.md","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,"zenodo":null}},"created_at":"2021-10-13T12:08:29.000Z","updated_at":"2025-05-07T08:48:19.000Z","dependencies_parsed_at":"2024-12-16T22:10:24.546Z","dependency_job_id":"34bd0b5f-d867-4537-9fd8-3cd04c92dd95","html_url":"https://github.com/GPUOpen-Tools/GPU-Reshape","commit_stats":null,"previous_names":["gpuopen-tools/gpu-reshape"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPUOpen-Tools%2FGPU-Reshape","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPUOpen-Tools%2FGPU-Reshape/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPUOpen-Tools%2FGPU-Reshape/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GPUOpen-Tools%2FGPU-Reshape/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GPUOpen-Tools","download_url":"https://codeload.github.com/GPUOpen-Tools/GPU-Reshape/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448579,"owners_count":22072764,"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":["d3d12","directx","directx-12","gpu-reshape","graphics","graphics-programming","instrumentation","validation","vulkan","vulkan-api"],"created_at":"2024-11-12T00:25:50.469Z","updated_at":"2025-05-16T01:05:52.970Z","avatar_url":"https://github.com/GPUOpen-Tools.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003e\u003cimg align=\"center\" height=\"75\" src=\"/Source/UIX/Studio/Resources/Icons/Icon_Frame.png\"\u003e \u003ca\u003eGPU Reshape\u003c/a\u003e\u003c/h1\u003e\n\n**GPU Reshape** offers API agnostic instrumentation of GPU side operations to perform, e.g., validation of potentially undefined behaviour, supporting both Vulkan and D3D12 (DXIL).\nNo application side integration is required.\n\nGPU Reshape is an open collaboration between **Miguel Petersen** (author), **Advanced Micro Devices** and **Avalanche Studios Group**.\n\n![Cover.png](Documentation/Resources/Images/Cover.png)\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"Documentation/QuickStart.md\"\u003eQuick Start\u003c/a\u003e -\n  \u003ca href=\"Documentation/Features.md\"\u003eFeatures\u003c/a\u003e -\n  \u003ca href=\"Documentation/Build.md\"\u003eBuild\u003c/a\u003e -\n  \u003ca href=\"Documentation/API.md\"\u003eAPI\u003c/a\u003e -\n  \u003ca href=\"Documentation/Motivation.md\"\u003eMotivation\u003c/a\u003e -\n  \u003ca href=\"Documentation/UIX.md\"\u003eUIX\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  Main is releases only, for the latest changes see the \u003ca href=\"https://github.com/GPUOpen-Tools/GPU-Reshape/tree/development\"\u003edevelopment branch\u003c/a\u003e.\n\u003c/p\u003e\n\n---\n\nCurrent feature scope provides instrumentation on operations which are either undefined behaviour, or typically indicative of user fault such as:\n\n- **AMD|Waterfall** \u003c/br\u003e Validation of AMD address scalarization / waterfalling, and detection of missing NonUniformResourceIndex on descriptor indexing.\n- **Resource Bounds** \u003c/br\u003e Validation of resource read / write coordinates against its bounds.\n- **Export Stability** \u003c/br\u003e Numeric stability validation of floating point exports (UAV writes, render targets, vertex exports), e.g. NaN / Inf.\n- **Descriptor Validation** \u003c/br\u003e Validation of descriptors, potentially dynamically indexed. This includes undefined, mismatched (compile-time to runtime), out of bounds descriptor indexing, and missing table bindings.\n- **Concurrency Validation** \u003c/br\u003e Validation of resource concurrency, i.e. single-producer or multiple-consumer, between queues and events, now on a per-texel/byte level.\n- **Resource Initialization** \u003c/br\u003e Validation of resource initialization, ensures any read was preceded by a write, now on a per-texel/byte level.\n- **Infinite Loops** \u003c/br\u003e Detection and guarding of infinite loops.\n\nThe future feature scope includes profiling and debugging functionality, such as branch hot spots, live breakpoints, and assertions. \nFor the full planned feature set, see [Features](Documentation/Features.md).\n\n## Instrumentation as a framework\n\nThe toolset provides a generalized SSA-based intermediate language from which all instrumentation is done, bi-directionally translated to SPIRV and DXIL.\nEach feature, such as the validation of out-of-bounds reads, operates solely on the intermediate language and has no visibility on the backend language nor API.\n\nEach feature can alter the program as it sees fit, such as adding basic-blocks, modifying instructions, and even removing instructions. The feature is given a [Program](Documentation/API/IL.md), which\nact as the abstraction for the active backend, from which the user has access to all functions, basic-blocks, instructions, types, etc..., and is able to modify as necessary.\nAfter modification, the backend then performs just-in-time recompilation of the modified program back to the backend language.\n\nThe toolset additionally provides a set of building blocks needed for instrumentation:\n\n- [Message Streams](Documentation/API/Message.md) help facilitate GPU -\u003e CPU communication, and also serves as the base for inter-process/endpoint communication.\n- Persistent data such as buffers, textures and push / root constants, visible to all instrumentation features. Certain features require state management.\n- User programs, entirely user driven compute kernels written through the intermediate language. All persistent data visible.\n- User side command hooking, certain features may wish to modify state, invoke kernels, before the pending command.\n- Resource tokens, abstracting away differences in binding models by providing a token from shader resource handles. Each token provides a physical UID, resource type and sub-resource base.\n- Command scheduling, record and submit custom (abstracted) command buffers / lists.\n\nFeatures do not need to concern themselves with backend specifics, such as vectorized versus scalarized execution, control-flow requirements, and other implementation details. Given compliance, each feature\nwill translate seamlessly to the backend language.\n\nThis toolset aims to serve as a **framework** for instrumentation, acting as a modular base from which any number of tools, techniques, optimizations, etc..., can be implemented. \n\n## Testing Suite\n\nGPU Reshape is routinely tested against a standard testbed, including AAA games, IHV/ISV samples/benchmarks, and user\nsubmitted applications. For a full list, please see the [Testing Suite](Documentation/TestingSuite.md).\n\n## Known Issues\n\n- Raytracing shaders are currently pass-through, no instrumentation is done on them. This is scheduled for the next release.\n\nDX12 features pending support:\n- Work Graphs\n\nVulkan extensions pending support:\n- Descriptor Buffers\n- Shader Objects\n\n## Credit\n\nGPU Reshape was initially developed as a prototype tool by Miguel Petersen at Avalanche Studios Group, extending validation tools to shader side operations.\nIt was then requested to continue development externally through an open collaboration on GPUOpen.\n\nDevelopment was supported by:\n\n- Lou Kramer (AMD)\n- Jonas Gustavsson (AMD)\n- Marek Machlinski (AMD)\n- Rys Sommefeldt (AMD)\n- Mark Simpson (AMD)\n- Daniel Isheden (Avalanche Studios)\n- Alexander Polya (Avalanche Studios)\n- Wiliam Hjelm (Avalanche Studios)\n\nCopyright (c) 2024 Advanced Micro Devices, Inc., \nFatalist Development AB (Avalanche Studio Group), \nand Miguel Petersen.\n\nAll Rights Reserved.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgpuopen-tools%2Fgpu-reshape","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgpuopen-tools%2Fgpu-reshape","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgpuopen-tools%2Fgpu-reshape/lists"}