BsGpuPipelineState.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsGpuPipelineState.h"
  4. #include "BsRasterizerState.h"
  5. #include "BsBlendState.h"
  6. #include "BsDepthStencilState.h"
  7. #include "BsGpuProgram.h"
  8. #include "BsRenderStateManager.h"
  9. namespace BansheeEngine
  10. {
  11. /** Converts a sim thread pipeline state descriptor to a core thread one. */
  12. void convertPassDesc(const PIPELINE_STATE_DESC& input, PIPELINE_STATE_CORE_DESC& output)
  13. {
  14. output.blendState = input.blendState != nullptr ? input.blendState->getCore() : nullptr;
  15. output.rasterizerState = input.rasterizerState != nullptr ? input.rasterizerState->getCore() : nullptr;
  16. output.depthStencilState = input.depthStencilState != nullptr ? input.depthStencilState->getCore() : nullptr;
  17. output.vertexProgram = input.vertexProgram != nullptr ? input.vertexProgram->getCore() : nullptr;
  18. output.fragmentProgram = input.fragmentProgram != nullptr ? input.fragmentProgram->getCore() : nullptr;
  19. output.geometryProgram = input.geometryProgram != nullptr ? input.geometryProgram->getCore() : nullptr;
  20. output.hullProgram = input.hullProgram != nullptr ? input.hullProgram->getCore() : nullptr;
  21. output.domainProgram = input.domainProgram != nullptr ? input.domainProgram->getCore() : nullptr;
  22. }
  23. template<bool Core>
  24. TGpuPipelineState<Core>::TGpuPipelineState()
  25. { }
  26. template<bool Core>
  27. TGpuPipelineState<Core>::TGpuPipelineState(const StateDescType& data)
  28. :mData(data)
  29. { }
  30. template class TGpuPipelineState < false > ;
  31. template class TGpuPipelineState < true >;
  32. GpuPipelineStateCore::GpuPipelineStateCore(const PIPELINE_STATE_CORE_DESC& desc, GpuDeviceFlags deviceMask)
  33. :TGpuPipelineState(desc)
  34. { }
  35. SPtr<GpuPipelineStateCore> GpuPipelineStateCore::create(const PIPELINE_STATE_CORE_DESC& desc, GpuDeviceFlags deviceMask)
  36. {
  37. return RenderStateCoreManager::instance().createPipelineState(desc, deviceMask);
  38. }
  39. GpuPipelineState::GpuPipelineState(const PIPELINE_STATE_DESC& desc)
  40. :TGpuPipelineState(desc)
  41. { }
  42. SPtr<GpuPipelineStateCore> GpuPipelineState::getCore() const
  43. {
  44. return std::static_pointer_cast<GpuPipelineStateCore>(mCoreSpecific);
  45. }
  46. SPtr<CoreObjectCore> GpuPipelineState::createCore() const
  47. {
  48. PIPELINE_STATE_CORE_DESC desc;
  49. convertPassDesc(mData, desc);
  50. return RenderStateCoreManager::instance()._createPipelineState(desc);
  51. }
  52. SPtr<GpuPipelineState> GpuPipelineState::create(const PIPELINE_STATE_DESC& desc)
  53. {
  54. return RenderStateManager::instance().createPipelineState(desc);
  55. }
  56. }