CustomDX12API.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "CustomDX12API.h"
  2. #include <d3d12.h>
  3. #include <DX12Buffer.h>
  4. #include <DX12Shader.h>
  5. #include "CustomClosestHitShader.h"
  6. #include "CustomMissShader.h"
  7. #include "CustomRayGenShader.h"
  8. using namespace Framework;
  9. CustomDX12API::CustomDX12API()
  10. : DirectX12()
  11. {}
  12. void CustomDX12API::initializePipeline()
  13. {
  14. DX12Shader* rayGenShader
  15. = new DX12Shader(CustomRayGenShader, sizeof(CustomRayGenShader));
  16. // RayGen from RayGen.hlsl
  17. DX12ShaderSignature* rayGenSignature = new DX12ShaderSignature();
  18. rayGenSignature->addRegisterUsageLinkedToDescriptorHeap(
  19. 0, DX12_SHADER_REGISTER_U_UNORDERED_ACCESS, 0);
  20. rayGenSignature->addRegisterUsageLinkedToDescriptorHeap(
  21. 1, DX12_SHADER_REGISTER_U_UNORDERED_ACCESS, 1);
  22. rayGenSignature->addRegisterUsageLinkedToDescriptorHeap(
  23. 2, DX12_SHADER_REGISTER_B_CONST_BUFFER, 0);
  24. rayGenSignature->addRegisterUsageLinkedToDescriptorHeap(
  25. 3, DX12_SHADER_REGISTER_T_SHADER_RESOURCE, 0);
  26. defaultRayGenerationShaderFunction = new DX12ShaderFunction(
  27. "RayGen", rayGenSignature, DX12_SHADER_FUNCTION_TYPE_RAY_GEN);
  28. rayGenShader->addFunction(defaultRayGenerationShaderFunction);
  29. pipeline->addShader(rayGenShader);
  30. DX12Shader* missShader
  31. = new DX12Shader(CustomMissShader, sizeof(CustomMissShader));
  32. // Miss from Miss.hlsl
  33. missShader->addFunction(new DX12ShaderFunction(
  34. "Miss", new DX12ShaderSignature(), DX12_SHADER_FUNCTION_TYPE_MISS));
  35. pipeline->addShader(missShader);
  36. DX12Shader* hitShader = new DX12Shader(
  37. CustomClosestHitShader, sizeof(CustomClosestHitShader));
  38. // ClosestHit from Hit.hlsl
  39. DX12ShaderFunction* closestHitFunction
  40. = new DX12ShaderFunction("ClosestHit",
  41. new DX12ShaderSignature(),
  42. DX12_SHADER_FUNCTION_TYPE_CLOSEST_HIT);
  43. hitShader->addFunction(closestHitFunction);
  44. pipeline->addShader(hitShader);
  45. defaultHitGroup = new DX12ShaderHitGroup("HitGroup");
  46. defaultHitGroup->setAttributeSize(8);
  47. defaultHitGroup->setPayloadSize(16);
  48. defaultHitGroup->setClosestHitShaderFunction(closestHitFunction);
  49. pipeline->addHitGroup(defaultHitGroup);
  50. pipeline->setMaxRecursionDepth(10);
  51. pipeline->createPipelineState(device, pfnD3D12SerializeRootSignature);
  52. }
  53. void CustomDX12API::initializeGlobalDescriptorHeap()
  54. {
  55. DirectX12::initializeGlobalDescriptorHeap();
  56. }
  57. void CustomDX12API::fillShaderBindingTable(
  58. Framework::DX12ShaderBindingTable* zShaderBindingTable,
  59. Framework::Model3D* zModel,
  60. int objectIndex)
  61. {
  62. DirectX12::fillShaderBindingTable(zShaderBindingTable, zModel, objectIndex);
  63. }