ComputeSharp 2.0.0-preview2
Prefix ReservedSee the version list below for details.
dotnet add package ComputeSharp --version 2.0.0-preview2
NuGet\Install-Package ComputeSharp -Version 2.0.0-preview2
<PackageReference Include="ComputeSharp" Version="2.0.0-preview2" />
paket add ComputeSharp --version 2.0.0-preview2
#r "nuget: ComputeSharp, 2.0.0-preview2"
// Install ComputeSharp as a Cake Addin #addin nuget:?package=ComputeSharp&version=2.0.0-preview2&prerelease // Install ComputeSharp as a Cake Tool #tool nuget:?package=ComputeSharp&version=2.0.0-preview2&prerelease
What is it?
ComputeSharp is a .NET library to run C# code in parallel on the GPU through DX12 and dynamically generated HLSL compute shaders. The available APIs let you access GPU devices, allocate GPU buffers and textures, move data between them and the RAM, write compute shaders entirely in C# and have them run on the GPU. The goal of this project is to make GPU computing easy to use for all .NET developers! 🚀
Quick start
ComputeSharp exposes a GraphicsDevice
class that acts as entry point for all public APIs. The available GraphicsDevice.GetDefault()
method that lets you access the main GPU device on the current machine, which can be used to allocate buffers and perform operations. If your machine doesn't have a supported GPU (or if it doesn't have a GPU at all), ComputeSharp will automatically create a WARP device instead, which will still let you use the library normally, with shaders running on the CPU instead through an emulation layer. This means that you don't need to manually write a fallback path in case no GPU is available - ComputeSharp will automatically handle this for you.
Let's suppose we want to run a simple compute shader that multiplies all items in a target buffer by two. The first step is to create the GPU buffer and copy our data to it:
// Get some sample data
int[] array = Enumerable.Range(1, 100).ToArray();
// Allocate a GPU buffer and copy the data to it.
// We want the shader to modify the items in-place, so we
// can allocate a single read-write buffer to work on.
using ReadWriteBuffer<int> buffer = GraphicsDevice.GetDefault().AllocateReadWriteBuffer(array);
The AllocateReadWriteBuffer
extension takes care of creating a ReadWriteBuffer<T>
instance with the same size as the input array and copying its contents to the allocated GPU buffer. There are a number of overloads available as well, to create buffers of different types and with custom length.
Next, we need to define the GPU shader to run. To do this, we'll need to define a partial struct
type implementing the IComputeShader
interface (note that the partial
modifier is necessary for ComputeSharp to generate additional code to run the shader). This type will contain the code we want to run on the GPU, as well as fields representing the values we want to capture and pass to the GPU (such as GPU resources, or arbitrary values we need). In this case, we only need to capture the buffer to work on, so the shader type will look like this:
[AutoConstructor]
public readonly partial struct MultiplyByTwo : IComputeShader
{
public readonly ReadWriteBuffer<int> buffer;
public void Execute()
{
buffer[ThreadIds.X] *= 2;
}
}
We're using the [AutoConstructor]
attribute included in ComputeSharp, which creates a constructor for our type automatically. The shader body is also using a special ThreadIds
class, which is one of the available special classes to access dispatch parameters from within a shader body. In this case, ThreadIds
lets us access the current invocation index for the shader, just like if we were accessing the classic i
variable from within a for
loop.
We can now finally run the GPU shader and copy the data back to our array:
// Launch the shader
GraphicsDevice.GetDefault().For(buffer.Length, new MultiplyByTwo(buffer));
// Get the data back
buffer.CopyTo(array);
NOTE: this sample assumes that ComputeSharp.Dynamic is also installed. For info on how to only use precompiled shaders with the base ComputeSharp package, see the complete readme on GitHub.
There's more!
For a complete list of all features available in ComputeSharp, check the documentation in the GitHub repo.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- CommunityToolkit.Diagnostics (>= 8.0.0)
- ComputeSharp.Core (>= 2.0.0-preview2)
- Microsoft.Bcl.AsyncInterfaces (>= 6.0.0)
- Microsoft.Bcl.HashCode (>= 1.1.1)
- System.Runtime.CompilerServices.Unsafe (>= 6.0.0)
-
net6.0
- CommunityToolkit.Diagnostics (>= 8.0.0)
- ComputeSharp.Core (>= 2.0.0-preview2)
- TerraFX.Interop.D3D12MemoryAllocator (>= 2.0.1.1)
NuGet packages (9)
Showing the top 5 NuGet packages that depend on ComputeSharp:
Package | Downloads |
---|---|
ComputeSharp.Uwp
A UWP library with controls to render DX12 shaders powered by ComputeSharp. |
|
ComputeSharp.Dynamic
An extension library for ComputeSharp to enable dynamic compilation of shaders at runtime. |
|
ComputeSharp.WinUI
A WinUI 3 library with controls to render DX12 shaders powered by ComputeSharp. |
|
ComputeSharp.Pix
An extension library for ComputeSharp to enable PIX support to produce debugging information. |
|
ComputeSharp.Dxc
An extension library for ComputeSharp bundling the DXC compiler and enabling shader reflection. |
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on ComputeSharp:
Repository | Stars |
---|---|
Sergio0694/ComputeSharp
A .NET library to run C# code in parallel on the GPU through DX12, D2D1, and dynamically generated HLSL compute and pixel shaders, with the goal of making GPU computing easy to use for all .NET developers! 🚀
|
|
rocksdanister/weather
Windows native weather app powered by DirectX12 animations
|
Version | Downloads | Last updated |
---|---|---|
3.1.0-preview2 | 191 | 10/22/2024 |
3.1.0-preview1 | 339 | 9/19/2024 |
3.0.1 | 2,061 | 6/18/2024 |
3.0.0 | 165 | 6/10/2024 |
3.0.0-preview2 | 728 | 12/17/2023 |
3.0.0-preview1 | 230 | 11/24/2023 |
2.2.0-preview2 | 56 | 10/14/2024 |
2.2.0-preview1 | 300 | 10/10/2023 |
2.1.0 | 3,565 | 9/27/2023 |
2.1.0-preview3 | 314 | 7/9/2023 |
2.1.0-preview2 | 241 | 5/1/2023 |
2.1.0-preview1 | 116 | 4/27/2023 |
2.0.3 | 3,047 | 12/24/2022 |
2.0.2 | 186 | 12/9/2022 |
2.0.0 | 335 | 11/29/2022 |
2.0.0-preview2 | 196 | 10/22/2022 |
2.0.0-preview1 | 249 | 10/8/2022 |
2.0.0-alpha.29 | 161 | 9/19/2022 |
2.0.0-alpha.28 | 166 | 9/6/2022 |
2.0.0-alpha.27 | 596 | 8/22/2022 |
2.0.0-alpha.26 | 491 | 8/1/2022 |
2.0.0-alpha.25 | 329 | 6/6/2022 |
2.0.0-alpha.24 | 232 | 5/24/2022 |
2.0.0-alpha.23 | 277 | 5/12/2022 |
2.0.0-alpha.22 | 271 | 4/24/2022 |
2.0.0-alpha.21 | 5,978 | 4/21/2022 |
2.0.0-alpha.20 | 243 | 4/10/2022 |
2.0.0-alpha.19 | 667 | 3/5/2022 |
2.0.0-alpha.18 | 271 | 2/2/2022 |
2.0.0-alpha.17 | 183 | 1/31/2022 |
2.0.0-alpha.16 | 139 | 1/30/2022 |
2.0.0-alpha.15 | 197 | 1/27/2022 |
2.0.0-alpha.14 | 170 | 1/23/2022 |
2.0.0-alpha.13 | 139 | 1/18/2022 |
2.0.0-alpha.12 | 162 | 1/9/2022 |
2.0.0-alpha.11 | 141 | 1/6/2022 |
2.0.0-alpha.10 | 139 | 1/6/2022 |
2.0.0-alpha.9 | 185 | 12/19/2021 |
2.0.0-alpha.8 | 187 | 11/27/2021 |
2.0.0-alpha.7 | 198 | 10/31/2021 |
2.0.0-alpha.6 | 426 | 7/18/2021 |
2.0.0-alpha.5 | 174 | 7/15/2021 |
2.0.0-alpha.4 | 179 | 7/1/2021 |
2.0.0-alpha.3 | 252 | 5/13/2021 |
2.0.0-alpha.2 | 233 | 4/5/2021 |
2.0.0-alpha.1 | 237 | 3/7/2021 |