Advertisement
Guest User

Veldrid compute shader test

a guest
Jun 23rd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. using DEngine.Common;
  2. using Veldrid;
  3.  
  4. namespace DEngine.Generation.Shaders
  5. {
  6. public class NoiseShader : ComputeShaderAbstract
  7. {
  8. public const uint Width = 256;
  9. public const uint BlockCount = Width * Width * Width;
  10.  
  11. private DeviceBuffer NoiseBuffer;
  12. private Pipeline _computePipeline;
  13. private ResourceSet _computeResourceSet;
  14. private CommandList _cl;
  15.  
  16. public NoiseShader(ResourceFactory factory) : base(factory, "ComputeNoise")
  17. {
  18. NoiseBuffer = factory.CreateBuffer(
  19. new BufferDescription(
  20. (uint)sizeof(float) * BlockCount,
  21. BufferUsage.StructuredBufferReadWrite,
  22. (uint)sizeof(float)));
  23.  
  24. ResourceLayout blockStorageLayout = factory.CreateResourceLayout(new ResourceLayoutDescription(
  25. new ResourceLayoutElementDescription("NoiseBuffer", ResourceKind.StructuredBufferReadWrite, ShaderStages.Compute)));
  26.  
  27. ComputePipelineDescription computePipelineDesc = new ComputePipelineDescription(
  28. ComputeShader,
  29. new[] { blockStorageLayout },
  30. Width, 1, Width);
  31. _computePipeline = factory.CreateComputePipeline(ref computePipelineDesc);
  32.  
  33. _computeResourceSet = factory.CreateResourceSet(new ResourceSetDescription(blockStorageLayout, NoiseBuffer));
  34.  
  35. _cl = factory.CreateCommandList();
  36. }
  37.  
  38. public void TestExecute()
  39. {
  40. _cl.Begin();
  41.  
  42. _cl.SetPipeline(_computePipeline);
  43. _cl.SetComputeResourceSet(0, _computeResourceSet);
  44. _cl.Dispatch(1, 1, Width);
  45.  
  46. _cl.End();
  47.  
  48. References.Device.SubmitCommands(_cl);
  49.  
  50. // TODO: Read NoiseBuffer?
  51. }
  52. }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement