CustomDX12API.cpp 2.7 KB

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