#pragma once
#include "EmberCLPch.h"
#include "OpenCLWrapper.h"
#include "IterOpenCLKernelCreator.h"
///
/// RendererClDevice class.
///
namespace EmberCLns
{
///
/// Class to manage a device that does the iteration portion of
/// the rendering process. Having a separate class for this purpose
/// enables multi-GPU support.
///
class EMBERCL_API RendererClDevice : public EmberReport
{
public:
RendererClDevice(size_t platform, size_t device, bool shared);
bool Init();
bool Ok() const noexcept;
bool Shared() const noexcept;
bool Nvidia() const noexcept;
size_t WarpSize() const noexcept;
size_t PlatformIndex() const noexcept;
size_t DeviceIndex() const noexcept;
//Public virtual functions overridden from base classes.
void ClearErrorReport() noexcept override;
string ErrorReportString() override;
vector ErrorReport() override;
size_t m_Calls;
OpenCLWrapper m_Wrapper;
private:
bool m_Init;
bool m_Shared;
bool m_NVidia;
size_t m_WarpSize;
size_t m_PlatformIndex;
size_t m_DeviceIndex;
shared_ptr m_Info;
};
}