Просмотр исходного кода

Added device index property to GPU params, GPU param block buffer and vertex declaration types, in preparation for multi-GPU support

BearishSun 9 лет назад
Родитель
Сommit
3bbc25413f

+ 7 - 6
Source/BansheeCore/Include/BsGpuParamBlockBuffer.h

@@ -19,7 +19,7 @@ namespace BansheeEngine
 	class BS_CORE_EXPORT GpuParamBlockBufferCore : public CoreObjectCore
 	{
 	public:
-		GpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage);
+		GpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage, GpuDeviceFlags deviceMask);
 		virtual ~GpuParamBlockBufferCore();
 
 		/** Writes all of the specified data to the buffer. Data size must be the same size as the buffer. */
@@ -61,11 +61,12 @@ namespace BansheeEngine
 		UINT32 getSize() const { return mSize; }
 
 		/** @copydoc HardwareBufferCoreManager::createGpuParamBlockBuffer */
-		static SPtr<GpuParamBlockBufferCore> create(UINT32 size, GpuParamBlockUsage usage = GPBU_DYNAMIC);
+		static SPtr<GpuParamBlockBufferCore> create(UINT32 size, GpuParamBlockUsage usage = GPBU_DYNAMIC,
+			GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
 	protected:
 		/** @copydoc CoreObjectCore::syncToCore */
-		virtual void syncToCore(const CoreSyncData& data)  override;
+		void syncToCore(const CoreSyncData& data)  override;
 
 		GpuParamBlockUsage mUsage;
 		UINT32 mSize;
@@ -81,7 +82,7 @@ namespace BansheeEngine
 	class BS_CORE_EXPORT GenericGpuParamBlockBufferCore : public GpuParamBlockBufferCore
 	{
 	public:
-		GenericGpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage);
+		GenericGpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage, GpuDeviceFlags deviceMask);
 		~GenericGpuParamBlockBufferCore();
 
 		/** @copydoc GpuParamBlockBufferCore::writeToGPU */
@@ -94,7 +95,7 @@ namespace BansheeEngine
 		UINT8* mData;
 
 		/** @copydoc CoreObjectCore::initialize */
-		virtual void initialize() override;
+		void initialize() override;
 	};
 
 	/** @} */
@@ -154,7 +155,7 @@ namespace BansheeEngine
 		SPtr<CoreObjectCore> createCore() const override;
 
 		/** @copydoc CoreObject::syncToCore */
-		virtual CoreSyncData syncToCore(FrameAlloc* allocator) override;
+		CoreSyncData syncToCore(FrameAlloc* allocator) override;
 
 		GpuParamBlockUsage mUsage;
 		UINT32 mSize;

+ 6 - 5
Source/BansheeCore/Include/BsGpuParams.h

@@ -262,15 +262,17 @@ namespace BansheeEngine
 	public:
 		~GpuParamsCore() { }
 
-		/** @copydoc GpuParams::create */
-		static SPtr<GpuParamsCore> create(const GPU_PARAMS_DESC& desc);
+		/** 
+		 * @copydoc GpuParams::create 
+		 * @param[in]	deviceMask		Mask that determines on which GPU devices should the buffer be created on.
+		 */
+		static SPtr<GpuParamsCore> create(const GPU_PARAMS_DESC& desc, GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
 	protected:
 		friend class GpuParams;
 		friend class HardwareBufferCoreManager;
 
-		/** @copydoc GpuParams::create */
-		GpuParamsCore(const GPU_PARAMS_DESC& desc);
+		GpuParamsCore(const GPU_PARAMS_DESC& desc, GpuDeviceFlags deviceMask);
 
 		/** @copydoc CoreObject::getThisPtr */
 		SPtr<GpuParamsCore> _getThisPtr() const override;
@@ -323,7 +325,6 @@ namespace BansheeEngine
 	protected:
 		friend class HardwareBufferManager;
 
-		/** @copydoc GpuParams::create */
 		GpuParams(const GPU_PARAMS_DESC& desc);
 
 		/** @copydoc CoreObject::getThisPtr */

+ 27 - 11
Source/BansheeCore/Include/BsHardwareBufferManager.h

@@ -91,15 +91,26 @@ namespace BansheeEngine
 		 */
 		SPtr<IndexBufferCore> createIndexBuffer(const INDEX_BUFFER_DESC& desc, GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
-		/** @copydoc HardwareBufferManager::createVertexDeclaration */
-		SPtr<VertexDeclarationCore> createVertexDeclaration(const SPtr<VertexDataDesc>& desc);
+		/** 
+		 * @copydoc HardwareBufferManager::createVertexDeclaration 
+		 * @param[in]	deviceMask		Mask that determines on which GPU devices should the buffer be created on.
+		 */
+		SPtr<VertexDeclarationCore> createVertexDeclaration(const SPtr<VertexDataDesc>& desc,
+			GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
-		/** @copydoc HardwareBufferManager::createVertexDeclaration */
-		SPtr<VertexDeclarationCore> createVertexDeclaration(const List<VertexElement>& elements);
+		/** 
+		 * @copydoc HardwareBufferManager::createVertexDeclaration 
+		 * @param[in]	deviceMask		Mask that determines on which GPU devices should the buffer be created on.
+		 */
+		SPtr<VertexDeclarationCore> createVertexDeclaration(const List<VertexElement>& elements, 
+			GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
-		/** @copydoc HardwareBufferManager::createGpuParamBlockBuffer */
+		/** 
+		 * @copydoc HardwareBufferManager::createGpuParamBlockBuffer 
+		 * @param[in]	deviceMask		Mask that determines on which GPU devices should the buffer be created on.
+		 */
 		SPtr<GpuParamBlockBufferCore> createGpuParamBlockBuffer(UINT32 size, 
-			GpuParamBlockUsage usage = GPBU_DYNAMIC);
+			GpuParamBlockUsage usage = GPBU_DYNAMIC, GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
 		/** 
 		 * @copydoc HardwareBufferManager::createGpuBuffer
@@ -107,8 +118,11 @@ namespace BansheeEngine
 		 */
 		SPtr<GpuBufferCore> createGpuBuffer(const GPU_BUFFER_DESC& desc, GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
-		/** @copydoc HardwareBufferManager::createGpuParams */
-		SPtr<GpuParamsCore> createGpuParams(const GPU_PARAMS_DESC& desc);
+		/** 
+		 * @copydoc HardwareBufferManager::createGpuParams 
+		 * @param[in]	deviceMask		Mask that determines on which GPU devices should the buffer be created on.
+		 */
+		SPtr<GpuParamsCore> createGpuParams(const GPU_PARAMS_DESC& desc, GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
 	protected:
 		friend class IndexBuffer;
@@ -130,17 +144,19 @@ namespace BansheeEngine
 
 		/** @copydoc createGpuParamBlockBuffer */
 		virtual SPtr<GpuParamBlockBufferCore> createGpuParamBlockBufferInternal(UINT32 size, 
-			GpuParamBlockUsage usage = GPBU_DYNAMIC) = 0;
+			GpuParamBlockUsage usage = GPBU_DYNAMIC, GpuDeviceFlags deviceMask = GDF_DEFAULT) = 0;
 
 		/** @copydoc createGpuBuffer */
 		virtual SPtr<GpuBufferCore> createGpuBufferInternal(const GPU_BUFFER_DESC& desc, 
 			GpuDeviceFlags deviceMask = GDF_DEFAULT) = 0;
 
 		/** @copydoc createVertexDeclaration */
-		virtual SPtr<VertexDeclarationCore> createVertexDeclarationInternal(const List<VertexElement>& elements);
+		virtual SPtr<VertexDeclarationCore> createVertexDeclarationInternal(const List<VertexElement>& elements,
+			GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
 		/** @copydoc createGpuParams */
-		virtual SPtr<GpuParamsCore> createGpuParamsInternal(const GPU_PARAMS_DESC& desc);
+		virtual SPtr<GpuParamsCore> createGpuParamsInternal(const GPU_PARAMS_DESC& desc, 
+			GpuDeviceFlags deviceMask = GDF_DEFAULT);
 	};
 
 	/** @} */

+ 1 - 1
Source/BansheeCore/Include/BsIndexBuffer.h

@@ -98,7 +98,7 @@ namespace BansheeEngine
 		/**	Returns information about the index buffer. */
 		const IndexBufferProperties& getProperties() const { return mProperties; }
 
-		/** @copydoc HardwareBufferManager::createIndexBuffer */
+		/** @copydoc HardwareBufferCoreManager::createIndexBuffer */
 		static SPtr<IndexBufferCore> create(const INDEX_BUFFER_DESC& desc, GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
 	protected:

+ 2 - 2
Source/BansheeCore/Include/BsVertexDeclaration.h

@@ -240,12 +240,12 @@ namespace BansheeEngine
 		Vector<VertexElement> getMissingElements(const SPtr<VertexDeclarationCore>& shaderDecl);
 
 		/** @copydoc HardwareBufferCoreManager::createVertexDeclaration */
-		static SPtr<VertexDeclarationCore> create(const SPtr<VertexDataDesc>& desc);
+		static SPtr<VertexDeclarationCore> create(const SPtr<VertexDataDesc>& desc, GpuDeviceFlags deviceMask = GDF_DEFAULT);
 
     protected:
 		friend class HardwareBufferCoreManager;
 
-		VertexDeclarationCore(const List<VertexElement>& elements);
+		VertexDeclarationCore(const List<VertexElement>& elements, GpuDeviceFlags deviceMask);
 
 		VertexDeclarationProperties mProperties;
 		UINT32 mId;

+ 37 - 35
Source/BansheeCore/Source/BsGpuParamBlockBuffer.cpp

@@ -6,7 +6,7 @@
 
 namespace BansheeEngine
 {
-	GpuParamBlockBufferCore::GpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage)
+	GpuParamBlockBufferCore::GpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage, GpuDeviceFlags deviceMask)
 		:mUsage(usage), mSize(size), mCachedData(nullptr), mGPUBufferDirty(false)
 	{
 		if (mSize > 0)
@@ -81,9 +81,43 @@ namespace BansheeEngine
 		write(0, data.getBuffer(), data.getBufferSize());
 	}
 
-	SPtr<GpuParamBlockBufferCore> GpuParamBlockBufferCore::create(UINT32 size, GpuParamBlockUsage usage)
+	SPtr<GpuParamBlockBufferCore> GpuParamBlockBufferCore::create(UINT32 size, GpuParamBlockUsage usage, 
+		GpuDeviceFlags deviceMask)
 	{
-		return HardwareBufferCoreManager::instance().createGpuParamBlockBuffer(size, usage);
+		return HardwareBufferCoreManager::instance().createGpuParamBlockBuffer(size, usage, deviceMask);
+	}
+
+	GenericGpuParamBlockBufferCore::GenericGpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage, 
+		GpuDeviceFlags deviceMask)
+		:GpuParamBlockBufferCore(size, usage, deviceMask), mData(nullptr)
+	{ }
+
+	GenericGpuParamBlockBufferCore::~GenericGpuParamBlockBufferCore()
+	{
+		if (mData != nullptr)
+			bs_free(mData);
+	}
+
+	void GenericGpuParamBlockBufferCore::writeToGPU(const UINT8* data)
+	{
+		memcpy(mData, data, mSize);
+	}
+
+	void GenericGpuParamBlockBufferCore::readFromGPU(UINT8* data) const
+	{
+		memcpy(data, mData, mSize);
+	}
+
+	void GenericGpuParamBlockBufferCore::initialize()
+	{
+		if (mSize > 0)
+			mData = (UINT8*)bs_alloc(mSize);
+		else
+			mData = nullptr;
+
+		memset(mData, 0, mSize);
+
+		GpuParamBlockBufferCore::initialize();
 	}
 
 	GpuParamBlockBuffer::GpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage)
@@ -167,36 +201,4 @@ namespace BansheeEngine
 	{
 		return HardwareBufferManager::instance().createGpuParamBlockBuffer(size, usage);
 	}
-
-	GenericGpuParamBlockBufferCore::GenericGpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage)
-		:GpuParamBlockBufferCore(size, usage), mData(nullptr)
-	{ }
-
-	GenericGpuParamBlockBufferCore::~GenericGpuParamBlockBufferCore()
-	{
-		if (mData != nullptr)
-			bs_free(mData);
-	}
-
-	void GenericGpuParamBlockBufferCore::writeToGPU(const UINT8* data)
-	{
-		memcpy(mData, data, mSize);
-	}
-
-	void GenericGpuParamBlockBufferCore::readFromGPU(UINT8* data) const
-	{
-		memcpy(data, mData, mSize);
-	}
-
-	void GenericGpuParamBlockBufferCore::initialize()
-	{
-		if (mSize > 0)
-			mData = (UINT8*)bs_alloc(mSize);
-		else
-			mData = nullptr;
-
-		memset(mData, 0, mSize);
-
-		GpuParamBlockBufferCore::initialize();
-	}
 }

+ 4 - 9
Source/BansheeCore/Source/BsGpuParams.cpp

@@ -686,7 +686,7 @@ UINT32 GpuParamsBase::getDataParamSize(GpuProgramType type, const String& name)
 	template BS_CORE_EXPORT void TGpuParams<true>::getParam<Matrix4x2>(GpuProgramType type, const String&, TGpuDataParam<Matrix4x2, true>&) const;
 	template BS_CORE_EXPORT void TGpuParams<true>::getParam<Matrix4x3>(GpuProgramType type, const String&, TGpuDataParam<Matrix4x3, true>&) const;
 
-	GpuParamsCore::GpuParamsCore(const GPU_PARAMS_DESC& desc)
+	GpuParamsCore::GpuParamsCore(const GPU_PARAMS_DESC& desc, GpuDeviceFlags deviceMask)
 		: TGpuParams(desc)
 	{
 
@@ -762,9 +762,9 @@ UINT32 GpuParamsBase::getDataParamSize(GpuProgramType type, const String& name)
 		}
 	}
 
-	SPtr<GpuParamsCore> GpuParamsCore::create(const GPU_PARAMS_DESC& desc)
+	SPtr<GpuParamsCore> GpuParamsCore::create(const GPU_PARAMS_DESC& desc, GpuDeviceFlags deviceMask)
 	{
-		return HardwareBufferCoreManager::instance().createGpuParams(desc);
+		return HardwareBufferCoreManager::instance().createGpuParams(desc, deviceMask);
 	}
 
 	const GpuDataParamInfos GpuParams::PARAM_SIZES;
@@ -795,12 +795,7 @@ UINT32 GpuParamsBase::getDataParamSize(GpuProgramType type, const String& name)
 		desc.domainParams = mParamDescs[GPT_DOMAIN_PROGRAM];
 		desc.computeParams = mParamDescs[GPT_COMPUTE_PROGRAM];
 
-		GpuParamsCore* obj = new (bs_alloc<GpuParamsCore>()) GpuParamsCore(desc);
-
-		SPtr<CoreObjectCore> coreObj = bs_shared_ptr<GpuParamsCore>(obj);
-		coreObj->_setThisPtr(coreObj);
-
-		return coreObj;
+		return HardwareBufferCoreManager::instance().createGpuParams(desc);
 	}
 
 	void GpuParams::_markCoreDirty()

+ 18 - 12
Source/BansheeCore/Source/BsHardwareBufferManager.cpp

@@ -90,33 +90,37 @@ namespace BansheeEngine
 		return vbuf;
 	}
 
-	SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclaration(const SPtr<VertexDataDesc>& desc)
+	SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclaration(const SPtr<VertexDataDesc>& desc, 
+		GpuDeviceFlags deviceMask)
 	{
-		SPtr<VertexDeclarationCore> declPtr = createVertexDeclarationInternal(desc->createElements());
+		SPtr<VertexDeclarationCore> declPtr = createVertexDeclarationInternal(desc->createElements(), deviceMask);
 		declPtr->initialize();
 
 		return declPtr;
 	}
 
-	SPtr<GpuParamsCore> HardwareBufferCoreManager::createGpuParams(const GPU_PARAMS_DESC& desc)
+	SPtr<GpuParamsCore> HardwareBufferCoreManager::createGpuParams(const GPU_PARAMS_DESC& desc, 
+		GpuDeviceFlags deviceMask)
     {
-		SPtr<GpuParamsCore> params = createGpuParamsInternal(desc);
+		SPtr<GpuParamsCore> params = createGpuParamsInternal(desc, deviceMask);
 		params->initialize();
 
 		return params;
     }
 
-	SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclaration(const List<VertexElement>& elements)
+	SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclaration(const List<VertexElement>& elements,
+		GpuDeviceFlags deviceMask)
 	{
-		SPtr<VertexDeclarationCore> declPtr = createVertexDeclarationInternal(elements);
+		SPtr<VertexDeclarationCore> declPtr = createVertexDeclarationInternal(elements, deviceMask);
 		declPtr->initialize();
 
 		return declPtr;
 	}
 
-	SPtr<GpuParamBlockBufferCore> HardwareBufferCoreManager::createGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage)
+	SPtr<GpuParamBlockBufferCore> HardwareBufferCoreManager::createGpuParamBlockBuffer(UINT32 size, 
+		GpuParamBlockUsage usage, GpuDeviceFlags deviceMask)
 	{
-		SPtr<GpuParamBlockBufferCore> paramBlockPtr = createGpuParamBlockBufferInternal(size, usage);
+		SPtr<GpuParamBlockBufferCore> paramBlockPtr = createGpuParamBlockBufferInternal(size, usage, deviceMask);
 		paramBlockPtr->initialize();
 
 		return paramBlockPtr;
@@ -131,9 +135,10 @@ namespace BansheeEngine
 		return gbuf;
 	}
 
-	SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclarationInternal(const List<VertexElement>& elements)
+	SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclarationInternal(
+		const List<VertexElement>& elements, GpuDeviceFlags deviceMask)
 	{
-		VertexDeclarationCore* decl = new (bs_alloc<VertexDeclarationCore>()) VertexDeclarationCore(elements);
+		VertexDeclarationCore* decl = new (bs_alloc<VertexDeclarationCore>()) VertexDeclarationCore(elements, deviceMask);
 
 		SPtr<VertexDeclarationCore> ret = bs_shared_ptr<VertexDeclarationCore>(decl);
 		ret->_setThisPtr(ret);
@@ -141,9 +146,10 @@ namespace BansheeEngine
 		return ret;
 	}
 
-	SPtr<GpuParamsCore> HardwareBufferCoreManager::createGpuParamsInternal(const GPU_PARAMS_DESC& desc)
+	SPtr<GpuParamsCore> HardwareBufferCoreManager::createGpuParamsInternal(const GPU_PARAMS_DESC& desc, 
+		GpuDeviceFlags deviceMask)
     {
-		GpuParamsCore* params = new (bs_alloc<GpuParamsCore>()) GpuParamsCore(desc);
+		GpuParamsCore* params = new (bs_alloc<GpuParamsCore>()) GpuParamsCore(desc, deviceMask);
 		SPtr<GpuParamsCore> paramsPtr = bs_shared_ptr<GpuParamsCore>(params);
 		paramsPtr->_setThisPtr(paramsPtr);
 

+ 3 - 3
Source/BansheeCore/Source/BsVertexDeclaration.cpp

@@ -238,7 +238,7 @@ namespace BansheeEngine
 
 	UINT32 VertexDeclarationCore::NextFreeId = 0;
 
-	VertexDeclarationCore::VertexDeclarationCore(const List<VertexElement>& elements)
+	VertexDeclarationCore::VertexDeclarationCore(const List<VertexElement>& elements, GpuDeviceFlags deviceMask)
 		:mProperties(elements)
 	{
 		
@@ -250,9 +250,9 @@ namespace BansheeEngine
 		CoreObjectCore::initialize();
 	}
 
-	SPtr<VertexDeclarationCore> VertexDeclarationCore::create(const SPtr<VertexDataDesc>& desc)
+	SPtr<VertexDeclarationCore> VertexDeclarationCore::create(const SPtr<VertexDataDesc>& desc, GpuDeviceFlags deviceMask)
 	{
-		return HardwareBufferCoreManager::instance().createVertexDeclaration(desc);
+		return HardwareBufferCoreManager::instance().createVertexDeclaration(desc, deviceMask);
 	}
 
 	bool VertexDeclarationCore::isCompatible(const SPtr<VertexDeclarationCore>& shaderDecl)

+ 2 - 2
Source/BansheeD3D11RenderAPI/Include/BsD3D11GpuParamBlockBuffer.h

@@ -15,7 +15,7 @@ namespace BansheeEngine
 	class BS_D3D11_EXPORT D3D11GpuParamBlockBufferCore : public GpuParamBlockBufferCore
 	{
 	public:
-		D3D11GpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage);
+		D3D11GpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage, GpuDeviceFlags deviceMask);
 		~D3D11GpuParamBlockBufferCore();
 
 		/** @copydoc GpuParamBlockBufferCore::writeToGPU */
@@ -28,7 +28,7 @@ namespace BansheeEngine
 		ID3D11Buffer* getD3D11Buffer() const;
 	protected:
 		/** @copydoc GpuParamBlockBufferCore::initialize */
-		virtual void initialize() override;
+		void initialize() override;
 
 	private:
 		D3D11HardwareBuffer* mBuffer;

+ 1 - 1
Source/BansheeD3D11RenderAPI/Include/BsD3D11HardwareBufferManager.h

@@ -28,7 +28,7 @@ namespace BansheeEngine
 
 		/** @copydoc HardwareBufferCoreManager::createGpuParamBlockBufferInternal  */
 		SPtr<GpuParamBlockBufferCore> createGpuParamBlockBufferInternal(UINT32 size, 
-			GpuParamBlockUsage usage = GPBU_DYNAMIC) override;
+			GpuParamBlockUsage usage = GPBU_DYNAMIC, GpuDeviceFlags deviceMask = GDF_DEFAULT) override;
 
 		/** @copydoc HardwareBufferCoreManager::createGpuBufferInternal */
 		SPtr<GpuBufferCore> createGpuBufferInternal(const GPU_BUFFER_DESC& desc,

+ 4 - 3
Source/BansheeD3D11RenderAPI/Source/BsD3D11GpuParamBlockBuffer.cpp

@@ -8,10 +8,11 @@
 
 namespace BansheeEngine
 {
-	D3D11GpuParamBlockBufferCore::D3D11GpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage)
-		:GpuParamBlockBufferCore(size, usage), mBuffer(nullptr)
+	D3D11GpuParamBlockBufferCore::D3D11GpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage, 
+		GpuDeviceFlags deviceMask)
+		:GpuParamBlockBufferCore(size, usage, deviceMask), mBuffer(nullptr)
 	{
-
+		assert((deviceMask == GDF_DEFAULT || deviceMask == GDF_PRIMARY) && "Multiple GPUs not supported natively on DirectX 11.");
 	}
 
 	D3D11GpuParamBlockBufferCore::~D3D11GpuParamBlockBufferCore()

+ 4 - 2
Source/BansheeD3D11RenderAPI/Source/BsD3D11HardwareBufferManager.cpp

@@ -31,9 +31,11 @@ namespace BansheeEngine
 		return ret;
 	}
 
-	SPtr<GpuParamBlockBufferCore> D3D11HardwareBufferCoreManager::createGpuParamBlockBufferInternal(UINT32 size, GpuParamBlockUsage usage)
+	SPtr<GpuParamBlockBufferCore> D3D11HardwareBufferCoreManager::createGpuParamBlockBufferInternal(UINT32 size, 
+		GpuParamBlockUsage usage, GpuDeviceFlags deviceMask)
 	{
-		D3D11GpuParamBlockBufferCore* paramBlockBuffer = new (bs_alloc<D3D11GpuParamBlockBufferCore>()) D3D11GpuParamBlockBufferCore(size, usage);
+		D3D11GpuParamBlockBufferCore* paramBlockBuffer = 
+			new (bs_alloc<D3D11GpuParamBlockBufferCore>()) D3D11GpuParamBlockBufferCore(size, usage, deviceMask);
 
 		SPtr<GpuParamBlockBufferCore> paramBlockBufferPtr = bs_shared_ptr<D3D11GpuParamBlockBufferCore>(paramBlockBuffer);
 		paramBlockBufferPtr->_setThisPtr(paramBlockBufferPtr);

+ 1 - 1
Source/BansheeGLRenderAPI/Include/BsGLGpuParamBlockBuffer.h

@@ -15,7 +15,7 @@ namespace BansheeEngine
 	class BS_RSGL_EXPORT GLGpuParamBlockBufferCore : public GpuParamBlockBufferCore
 	{
 	public:
-		GLGpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage);
+		GLGpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage, GpuDeviceFlags deviceMask);
 		~GLGpuParamBlockBufferCore();
 
 		/** @copydoc GpuParamBlockBufferCore::writeToGPU */

+ 1 - 1
Source/BansheeGLRenderAPI/Include/BsGLHardwareBufferManager.h

@@ -32,7 +32,7 @@ namespace BansheeEngine
 
 		/** @copydoc HardwareBufferCoreManager::createGpuParamBlockBufferInternal */
 		SPtr<GpuParamBlockBufferCore> createGpuParamBlockBufferInternal(UINT32 size, 
-			GpuParamBlockUsage usage = GPBU_DYNAMIC) override;
+			GpuParamBlockUsage usage = GPBU_DYNAMIC, GpuDeviceFlags deviceMask = GDF_DEFAULT) override;
 
 		/** @copydoc HardwareBufferCoreManager::createGpuBufferInternal */
 		SPtr<GpuBufferCore> createGpuBufferInternal(const GPU_BUFFER_DESC& desc, 

+ 3 - 2
Source/BansheeGLRenderAPI/Source/BsGLGpuParamBlockBuffer.cpp

@@ -6,9 +6,10 @@
 
 namespace BansheeEngine
 {
-	GLGpuParamBlockBufferCore::GLGpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage)
-		:GpuParamBlockBufferCore(size, usage), mGLHandle(0)
+	GLGpuParamBlockBufferCore::GLGpuParamBlockBufferCore(UINT32 size, GpuParamBlockUsage usage, GpuDeviceFlags deviceMask)
+		:GpuParamBlockBufferCore(size, usage, deviceMask), mGLHandle(0)
 	{
+		assert((deviceMask == GDF_DEFAULT || deviceMask == GDF_PRIMARY) && "Multiple GPUs not supported natively on OpenGL.");
 	}
 
 	GLGpuParamBlockBufferCore::~GLGpuParamBlockBufferCore()

+ 4 - 2
Source/BansheeGLRenderAPI/Source/BsGLHardwareBufferManager.cpp

@@ -29,9 +29,11 @@ namespace BansheeEngine
 		return ret;
 	}
 
-	SPtr<GpuParamBlockBufferCore> GLHardwareBufferCoreManager::createGpuParamBlockBufferInternal(UINT32 size, GpuParamBlockUsage usage)
+	SPtr<GpuParamBlockBufferCore> GLHardwareBufferCoreManager::createGpuParamBlockBufferInternal(UINT32 size, 
+		GpuParamBlockUsage usage, GpuDeviceFlags deviceMask)
 	{
-		GLGpuParamBlockBufferCore* paramBlockBuffer = new (bs_alloc<GLGpuParamBlockBufferCore>()) GLGpuParamBlockBufferCore(size, usage);
+		GLGpuParamBlockBufferCore* paramBlockBuffer = 
+			new (bs_alloc<GLGpuParamBlockBufferCore>()) GLGpuParamBlockBufferCore(size, usage, deviceMask);
 
 		SPtr<GpuParamBlockBufferCore> paramBlockBufferPtr = bs_shared_ptr<GLGpuParamBlockBufferCore>(paramBlockBuffer);
 		paramBlockBufferPtr->_setThisPtr(paramBlockBufferPtr);