A compute rasterizer sample implemented with Work Graphs running inside the Cauldron framework.
To build the Work Graphs Compute Rasterizer Sample, you must first install the following tools:
Follow the next steps:
-
Clone the repo with its submodules:
> git clone https://github.com/GPUOpen-LibrariesAndSDKs/WorkGraphComputeRasterizer --recurse-submodules
-
Generate the solutions:
> cd WorkGraphComputeRasterizer\build > GenerateSolutions.bat
-
Open the solution in the DX12 directory, compile and run. VK isn't supported.
-
The define
ENABLE_WORKGRAPHS
enables Work graphs. It's enabled by default. It can be disabled if PIX, RenderDoc or another tool without Work graphs support is used to debug. Use CMake to disable the feature:> cmake -DGFX_API_WG=OFF
-
The media samples from Cauldron may change and not all scenes may load, you can adjust scenes in src\Common\GLTFSample.json
-
You can request precise profiling data through commandline by passing json as arguments:
> cd WorkGraphComputeRasterizer\bin > GLTFSample_DX12.exe { "algorithm" : 4, "bins" : 13, "threadlaunch" : true, ^ "stablePowerState" : true, "profile" : true, "ProfileSettings": { "filter" : ^ "Rasterize", "exitWhenTimeEnds": true, "resultsFilename": "Sponza.csv", ^ "warmUpFrames": 50, "durationFrames": 20 } }
These are the custom parameters for the rasterizer, the many other options can be looked up in the Cauldron docs:
algorithm
:0 - monolithic compute rasterizer, called once per object 1 - monolithic compute rasterizer, all objects are consumed by one ExecuteIndirect 2 - multi-pass compute rasterizer, all objects are consumed by a pipeline of three ExecuteIndirect 3 - workgraph rasterizer, called once per object 4 - workgraph rasterizer, called once in total with all object batched 5 - workgraph rasterizer, all objects are consumed by an initial Broadcaster node
bins
:1 to 15: number of buckets/bins to group triangles by, 2^(bin-1) = area
threadlaunch
:false/true: use a thread-launch or coalesce node for triangle rasterization
profile
:false/true: enables automatic profiling and generation of a csv file
filter
:label: the label of the pass to collect timestamps for, if empty all passes are included in the csv
resultsFilename
:filename: the name of the csv in the current directory
warmUpFrames
:0 to inf: how many frames to wait for initialization to settle
durationFrames
:0 to inf: how many frames to include in the csv
The values in the resulting csv are raw gpu ticks without any conversion.
-
The algorithm and some results are presented in this GPUOpen blog entry: