Нема описа
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

HardwareRayTracingShader.cs 3.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using Unity.Mathematics;
  2. using UnityEngine.Assertions;
  3. namespace UnityEngine.Rendering.UnifiedRayTracing
  4. {
  5. internal class HardwareRayTracingShader : IRayTracingShader
  6. {
  7. RayTracingShader m_Shader;
  8. string m_ShaderDispatchFuncName;
  9. internal HardwareRayTracingShader(RayTracingShader shader, string dispatchFuncName, GraphicsBuffer unused)
  10. {
  11. m_Shader = shader;
  12. m_ShaderDispatchFuncName = dispatchFuncName;
  13. }
  14. public uint3 GetThreadGroupSizes()
  15. {
  16. return new uint3(0, 0, 0);
  17. }
  18. public void PopulateDispatchDimensionBuffer(CommandBuffer cmd, GraphicsBuffer dispatchDimensionsBuffer, uint3 dimensions)
  19. {
  20. Assert.IsTrue((dispatchDimensionsBuffer.target & GraphicsBuffer.Target.IndirectArguments) != 0);
  21. Assert.IsTrue((dispatchDimensionsBuffer.target & GraphicsBuffer.Target.Structured) != 0);
  22. Assert.IsTrue(dispatchDimensionsBuffer.count * dispatchDimensionsBuffer.stride == 24);
  23. cmd.SetBufferData(dispatchDimensionsBuffer, new uint[] { dimensions.x, dimensions.y, dimensions.z, 0, 0, 0 });
  24. }
  25. public void SetAccelerationStructure(CommandBuffer cmd, string name, IRayTracingAccelStruct accelStruct)
  26. {
  27. cmd.SetRayTracingShaderPass(m_Shader, "RayTracing");
  28. var hwAccelStruct = accelStruct as HardwareRayTracingAccelStruct;
  29. Assert.IsNotNull(hwAccelStruct);
  30. cmd.SetRayTracingAccelerationStructure(m_Shader, Shader.PropertyToID(name+"accelStruct"), hwAccelStruct.accelStruct);
  31. }
  32. public void SetIntParam(CommandBuffer cmd, int nameID, int val)
  33. {
  34. cmd.SetRayTracingIntParam(m_Shader, nameID, val);
  35. }
  36. public void SetFloatParam(CommandBuffer cmd, int nameID, float val)
  37. {
  38. cmd.SetRayTracingFloatParam(m_Shader, nameID, val);
  39. }
  40. public void SetVectorParam(CommandBuffer cmd, int nameID, Vector4 val)
  41. {
  42. cmd.SetRayTracingVectorParam(m_Shader, nameID, val);
  43. }
  44. public void SetMatrixParam(CommandBuffer cmd, int nameID, Matrix4x4 val)
  45. {
  46. cmd.SetRayTracingMatrixParam(m_Shader, nameID, val);
  47. }
  48. public void SetTextureParam(CommandBuffer cmd, int nameID, RenderTargetIdentifier rt)
  49. {
  50. cmd.SetRayTracingTextureParam(m_Shader, nameID, rt);
  51. }
  52. public void SetBufferParam(CommandBuffer cmd, int nameID, GraphicsBuffer buffer)
  53. {
  54. cmd.SetRayTracingBufferParam(m_Shader, nameID, buffer);
  55. }
  56. public void SetBufferParam(CommandBuffer cmd, int nameID, ComputeBuffer buffer)
  57. {
  58. cmd.SetRayTracingBufferParam(m_Shader, nameID, buffer);
  59. }
  60. public void Dispatch(CommandBuffer cmd, GraphicsBuffer scratchBuffer, uint width, uint height, uint depth)
  61. {
  62. cmd.DispatchRays(m_Shader, m_ShaderDispatchFuncName, width, height, depth, null);
  63. }
  64. public ulong GetTraceScratchBufferRequiredSizeInBytes(uint width, uint height, uint depth)
  65. {
  66. return 0;
  67. }
  68. public void Dispatch(CommandBuffer cmd, GraphicsBuffer scratchBuffer, GraphicsBuffer argsBuffer)
  69. {
  70. Assert.IsTrue((argsBuffer.target & GraphicsBuffer.Target.IndirectArguments) != 0);
  71. Assert.IsTrue((argsBuffer.target & GraphicsBuffer.Target.Structured) != 0);
  72. Assert.IsTrue(argsBuffer.count * argsBuffer.stride == 24);
  73. cmd.DispatchRays(m_Shader, m_ShaderDispatchFuncName, argsBuffer, RayTracingHelper.k_DimensionByteOffset);
  74. }
  75. }
  76. }