Bläddra i källkod

Move some constants around

Panagiotis Christopoulos Charitos 7 år sedan
förälder
incheckning
bc8aad91f3

+ 16 - 10
src/anki/core/StagingGpuMemoryManager.cpp

@@ -31,19 +31,25 @@ Error StagingGpuMemoryManager::init(GrManager* gr, const ConfigSet& cfg)
 	m_perFrameBuffers[StagingGpuMemoryType::VERTEX].m_size = cfg.getNumber("core.vertexPerFrameMemorySize");
 	m_perFrameBuffers[StagingGpuMemoryType::TEXTURE].m_size = cfg.getNumber("core.textureBufferPerFrameMemorySize");
 
-	U32 alignment;
-	PtrSize maxSize;
-
-	gr->getUniformBufferInfo(alignment, maxSize);
-	initBuffer(StagingGpuMemoryType::UNIFORM, alignment, maxSize, BufferUsageBit::UNIFORM_ALL, *gr);
-
-	gr->getStorageBufferInfo(alignment, maxSize);
-	initBuffer(StagingGpuMemoryType::STORAGE, alignment, maxSize, BufferUsageBit::STORAGE_ALL, *gr);
+	initBuffer(StagingGpuMemoryType::UNIFORM,
+		gr->getDeviceCapabilities().m_uniformBufferBindOffsetAlignment,
+		gr->getDeviceCapabilities().m_uniformBufferMaxRange,
+		BufferUsageBit::UNIFORM_ALL,
+		*gr);
+
+	initBuffer(StagingGpuMemoryType::STORAGE,
+		gr->getDeviceCapabilities().m_storageBufferBindOffsetAlignment,
+		gr->getDeviceCapabilities().m_storageBufferMaxRange,
+		BufferUsageBit::STORAGE_ALL,
+		*gr);
 
 	initBuffer(StagingGpuMemoryType::VERTEX, 16, MAX_U32, BufferUsageBit::VERTEX | BufferUsageBit::INDEX, *gr);
 
-	gr->getTextureBufferInfo(alignment, maxSize);
-	initBuffer(StagingGpuMemoryType::TEXTURE, alignment, maxSize, BufferUsageBit::TEXTURE_ALL, *gr);
+	initBuffer(StagingGpuMemoryType::TEXTURE,
+		gr->getDeviceCapabilities().m_textureBufferBindOffsetAlignment,
+		gr->getDeviceCapabilities().m_textureBufferMaxRange,
+		BufferUsageBit::TEXTURE_ALL,
+		*gr);
 
 	return Error::NONE;
 }

+ 23 - 0
src/anki/gr/Common.h

@@ -108,9 +108,32 @@ extern Array<CString, U(GpuVendor::COUNT)> GPU_VENDOR_STR;
 class GpuDeviceCapabilities
 {
 public:
+	/// Max push constant size.
 	U32 m_pushConstantsSize = 128;
+
+	/// GPU vendor.
 	GpuVendor m_gpuVendor = GpuVendor::UNKNOWN;
+
+	/// Device supports subgroup operations.
 	Bool8 m_shaderSubgroups = false;
+
+	/// The alignment of offsets when bounding uniform buffers.
+	PtrSize m_uniformBufferBindOffsetAlignment = MAX_U32;
+
+	/// The max visible range of uniform buffers inside the shaders.
+	PtrSize m_uniformBufferMaxRange = 0;
+
+	/// The alignment of offsets when bounding storage buffers.
+	PtrSize m_storageBufferBindOffsetAlignment = MAX_U32;
+
+	/// The max visible range of storage buffers inside the shaders.
+	PtrSize m_storageBufferMaxRange = 0;
+
+	/// The alignment of offsets when bounding texture buffers.
+	PtrSize m_textureBufferBindOffsetAlignment = MAX_U32;
+
+	/// The max visible range of texture buffers inside the shaders.
+	PtrSize m_textureBufferMaxRange = 0;
 };
 
 /// The type of the allocator for heap allocations

+ 0 - 9
src/anki/gr/GrManager.h

@@ -70,15 +70,6 @@ public:
 	ANKI_USE_RESULT RenderGraphPtr newRenderGraph();
 	/// @}
 
-	/// Get some buffer alignment and size info.
-	void getUniformBufferInfo(U32& bindOffsetAlignment, PtrSize& maxUniformBlockSize) const;
-
-	/// Get some buffer alignment info.
-	void getStorageBufferInfo(U32& bindOffsetAlignment, PtrSize& maxStorageBlockSize) const;
-
-	/// Get some buffer alignment info.
-	void getTextureBufferInfo(U32& bindOffsetAlignment, PtrSize& maxRange) const;
-
 anki_internal:
 	GrAllocator<U8>& getAllocator()
 	{

+ 0 - 30
src/anki/gr/gl/GrManager.cpp

@@ -141,34 +141,4 @@ RenderGraphPtr GrManager::newRenderGraph()
 
 #undef ANKI_SAFE_CONSTRUCT
 
-void GrManager::getUniformBufferInfo(U32& bindOffsetAlignment, PtrSize& maxUniformBlockSize) const
-{
-	ANKI_GL_SELF_CONST(GrManagerImpl);
-
-	bindOffsetAlignment = self.getState().m_uboAlignment;
-	maxUniformBlockSize = self.getState().m_uniBlockMaxSize;
-
-	ANKI_ASSERT(bindOffsetAlignment > 0 && maxUniformBlockSize > 0);
-}
-
-void GrManager::getStorageBufferInfo(U32& bindOffsetAlignment, PtrSize& maxStorageBlockSize) const
-{
-	ANKI_GL_SELF_CONST(GrManagerImpl);
-
-	bindOffsetAlignment = self.getState().m_ssboAlignment;
-	maxStorageBlockSize = self.getState().m_storageBlockMaxSize;
-
-	ANKI_ASSERT(bindOffsetAlignment > 0 && maxStorageBlockSize > 0);
-}
-
-void GrManager::getTextureBufferInfo(U32& bindOffsetAlignment, PtrSize& maxRange) const
-{
-	ANKI_GL_SELF_CONST(GrManagerImpl);
-
-	bindOffsetAlignment = self.getState().m_tboAlignment;
-	maxRange = self.getState().m_tboMaxRange;
-
-	ANKI_ASSERT(bindOffsetAlignment > 0 && maxRange > 0);
-}
-
 } // end namespace anki

+ 6 - 0
src/anki/gr/gl/GrManagerImpl.cpp

@@ -53,6 +53,12 @@ Error GrManagerImpl::init(GrManagerInitInfo& init, GrAllocator<U8> alloc)
 	// Misc
 	m_capabilities.m_gpuVendor = m_state->m_gpu;
 	m_capabilities.m_shaderSubgroups = !!(m_state->m_extensions & GlExtensions::ARB_SHADER_BALLOT);
+	m_capabilities.m_uniformBufferBindOffsetAlignment = m_state->m_uboAlignment;
+	m_capabilities.m_uniformBufferMaxRange = m_state->m_uniBlockMaxSize;
+	m_capabilities.m_storageBufferBindOffsetAlignment = m_state->m_ssboAlignment;
+	m_capabilities.m_storageBufferMaxRange = m_state->m_storageBlockMaxSize;
+	m_capabilities.m_textureBufferBindOffsetAlignment = m_state->m_tboAlignment;
+	m_capabilities.m_textureBufferMaxRange = m_state->m_tboMaxRange;
 
 	return Error::NONE;
 }

+ 0 - 21
src/anki/gr/vulkan/GrManager.cpp

@@ -130,25 +130,4 @@ RenderGraphPtr GrManager::newRenderGraph()
 	return RenderGraphPtr(RenderGraph::newInstance(this));
 }
 
-void GrManager::getUniformBufferInfo(U32& bindOffsetAlignment, PtrSize& maxUniformBlockSize) const
-{
-	ANKI_VK_SELF_CONST(GrManagerImpl);
-	bindOffsetAlignment = self.getPhysicalDeviceProperties().limits.minUniformBufferOffsetAlignment;
-	maxUniformBlockSize = self.getPhysicalDeviceProperties().limits.maxUniformBufferRange;
-}
-
-void GrManager::getStorageBufferInfo(U32& bindOffsetAlignment, PtrSize& maxStorageBlockSize) const
-{
-	ANKI_VK_SELF_CONST(GrManagerImpl);
-	bindOffsetAlignment = self.getPhysicalDeviceProperties().limits.minStorageBufferOffsetAlignment;
-	maxStorageBlockSize = self.getPhysicalDeviceProperties().limits.maxStorageBufferRange;
-}
-
-void GrManager::getTextureBufferInfo(U32& bindOffsetAlignment, PtrSize& maxRange) const
-{
-	ANKI_VK_SELF_CONST(GrManagerImpl);
-	bindOffsetAlignment = self.getPhysicalDeviceProperties().limits.minTexelBufferOffsetAlignment;
-	maxRange = MAX_U32;
-}
-
 } // end namespace anki

+ 8 - 0
src/anki/gr/vulkan/GrManagerImpl.cpp

@@ -406,6 +406,14 @@ Error GrManagerImpl::initInstance(const GrManagerInitInfo& init)
 
 	vkGetPhysicalDeviceFeatures(m_physicalDevice, &m_devFeatures);
 
+	// Set limits
+	m_capabilities.m_uniformBufferBindOffsetAlignment = m_devProps.limits.minUniformBufferOffsetAlignment;
+	m_capabilities.m_uniformBufferMaxRange = m_devProps.limits.maxUniformBufferRange;
+	m_capabilities.m_storageBufferBindOffsetAlignment = m_devProps.limits.minStorageBufferOffsetAlignment;
+	m_capabilities.m_storageBufferMaxRange = m_devProps.limits.maxStorageBufferRange;
+	m_capabilities.m_textureBufferBindOffsetAlignment = m_devProps.limits.minTexelBufferOffsetAlignment;
+	m_capabilities.m_textureBufferMaxRange = MAX_U32;
+
 	return Error::NONE;
 }