2
0

ShaderCore.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2025 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #ifndef JPH_SHADER_OVERRIDE_MACROS
  5. #ifdef __cplusplus
  6. JPH_SUPPRESS_WARNING_PUSH
  7. JPH_SUPPRESS_WARNINGS
  8. using JPH_float = float;
  9. using JPH_float3 = JPH::Float3;
  10. using JPH_float4 = JPH::Float4;
  11. using JPH_uint = JPH::uint32;
  12. using JPH_uint3 = JPH::uint32[3];
  13. using JPH_uint4 = JPH::uint32[4];
  14. using JPH_int = int;
  15. using JPH_int3 = int[3];
  16. using JPH_int4 = int[4];
  17. using JPH_Quat = JPH::Float4;
  18. using JPH_Plane = JPH::Float4;
  19. using JPH_Mat44 = JPH::Float4[4]; // matrix, column major
  20. #define JPH_SHADER_CONSTANT(type, name, value) constexpr type name = value;
  21. #define JPH_SHADER_CONSTANTS_BEGIN(type, name) struct type {
  22. #define JPH_SHADER_CONSTANTS_MEMBER(type, name) type c##name;
  23. #define JPH_SHADER_CONSTANTS_END(type) };
  24. #define JPH_SHADER_BIND_BEGIN(name)
  25. #define JPH_SHADER_BIND_END(name)
  26. #define JPH_SHADER_BIND_BUFFER(type, name)
  27. #define JPH_SHADER_BIND_RW_BUFFER(type, name)
  28. JPH_SUPPRESS_WARNING_POP
  29. #else
  30. #define JPH_SUPPRESS_WARNING_PUSH
  31. #define JPH_SUPPRESS_WARNING_POP
  32. #define JPH_SUPPRESS_WARNINGS
  33. typedef float JPH_float;
  34. typedef float3 JPH_float3;
  35. typedef float4 JPH_float4;
  36. typedef uint JPH_uint;
  37. typedef uint3 JPH_uint3;
  38. typedef uint4 JPH_uint4;
  39. typedef int JPH_int;
  40. typedef int3 JPH_int3;
  41. typedef int4 JPH_int4;
  42. typedef float4 JPH_Quat; // xyz = imaginary part, w = real part
  43. typedef float4 JPH_Plane; // xyz = normal, w = constant
  44. typedef float4 JPH_Mat44[4]; // matrix, column major
  45. #define JPH_SHADER_CONSTANT(type, name, value) static const type name = value;
  46. #define JPH_SHADER_CONSTANTS_BEGIN(type, name) cbuffer name {
  47. #define JPH_SHADER_CONSTANTS_MEMBER(type, name) type c##name;
  48. #define JPH_SHADER_CONSTANTS_END(type) };
  49. #define JPH_SHADER_FUNCTION_BEGIN(return_type, name, group_size_x, group_size_y, group_size_z) \
  50. [numthreads(group_size_x, group_size_y, group_size_z)] \
  51. return_type name(
  52. #define JPH_SHADER_PARAM_THREAD_ID(name) uint3 name : SV_DispatchThreadID
  53. #define JPH_SHADER_FUNCTION_END )
  54. #define JPH_SHADER_BUFFER(type) StructuredBuffer<type>
  55. #define JPH_SHADER_RW_BUFFER(type) RWStructuredBuffer<type>
  56. #define JPH_SHADER_BIND_BEGIN(name)
  57. #define JPH_SHADER_BIND_END(name)
  58. #define JPH_SHADER_BIND_BUFFER(type, name) JPH_SHADER_BUFFER(type) name;
  59. #define JPH_SHADER_BIND_RW_BUFFER(type, name) JPH_SHADER_RW_BUFFER(type) name;
  60. #define JPH_AtomicAdd InterlockedAdd
  61. #endif
  62. #define JPH_SHADER_STRUCT_BEGIN(name) struct name {
  63. #define JPH_SHADER_STRUCT_MEMBER(type, name) type m##name;
  64. #define JPH_SHADER_STRUCT_END(name) };
  65. #define JPH_IN(type) in type
  66. #define JPH_OUT(type) out type
  67. #define JPH_IN_OUT(type) in out type
  68. #endif // JPH_OVERRIDE_SHADER_MACROS