BsD3D11EventQuery.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsD3D11EventQuery.h"
  4. #include "BsD3D11RenderAPI.h"
  5. #include "BsD3D11Device.h"
  6. #include "BsRenderStats.h"
  7. #include "BsException.h"
  8. namespace BansheeEngine
  9. {
  10. D3D11EventQuery::D3D11EventQuery(UINT32 deviceIdx)
  11. :mQuery(nullptr)
  12. {
  13. assert(deviceIdx == 0 && "Multiple GPUs not supported natively on DirectX 11.");
  14. D3D11RenderAPI* rs = static_cast<D3D11RenderAPI*>(RenderAPICore::instancePtr());
  15. D3D11Device& device = rs->getPrimaryDevice();
  16. D3D11_QUERY_DESC queryDesc;
  17. queryDesc.Query = D3D11_QUERY_EVENT;
  18. queryDesc.MiscFlags = 0;
  19. HRESULT hr = device.getD3D11Device()->CreateQuery(&queryDesc, &mQuery);
  20. if(hr != S_OK)
  21. {
  22. BS_EXCEPT(RenderingAPIException, "Failed to create an Event query.");
  23. }
  24. mContext = device.getImmediateContext();
  25. BS_INC_RENDER_STAT_CAT(ResCreated, RenderStatObject_Query);
  26. }
  27. D3D11EventQuery::~D3D11EventQuery()
  28. {
  29. if(mQuery != nullptr)
  30. {
  31. mQuery->Release();
  32. }
  33. BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_Query);
  34. }
  35. void D3D11EventQuery::begin()
  36. {
  37. mContext->End(mQuery);
  38. setActive(true);
  39. }
  40. bool D3D11EventQuery::isReady() const
  41. {
  42. BOOL queryData;
  43. return mContext->GetData(mQuery, &queryData, sizeof(BOOL), 0) == S_OK;
  44. }
  45. }