Panagiotis Christopoulos Charitos 8 лет назад
Родитель
Сommit
b476f587ae

+ 9 - 9
src/anki/gr/Common.h

@@ -200,13 +200,13 @@ public:
 class TextureSubresourceInfo
 {
 public:
-	U32 m_baseMipmap = 0;
+	U32 m_firstMipmap = 0;
 	U32 m_mipmapCount = 1;
 
-	U32 m_baseLayer = 0;
+	U32 m_firstLayer = 0;
 	U32 m_layerCount = 1;
 
-	U8 m_baseFace = 0;
+	U8 m_firstFace = 0;
 	U8 m_faceCount = 1;
 
 	DepthStencilAspectBit m_depthStencilAspect = DepthStencilAspectBit::NONE;
@@ -221,22 +221,22 @@ public:
 	TextureSubresourceInfo(const TextureSubresourceInfo&) = default;
 
 	TextureSubresourceInfo(const TextureSurfaceInfo& surf, DepthStencilAspectBit aspect = DepthStencilAspectBit::NONE)
-		: m_baseMipmap(surf.m_level)
+		: m_firstMipmap(surf.m_level)
 		, m_mipmapCount(1)
-		, m_baseLayer(surf.m_layer)
+		, m_firstLayer(surf.m_layer)
 		, m_layerCount(1)
-		, m_baseFace(surf.m_face)
+		, m_firstFace(surf.m_face)
 		, m_faceCount(1)
 		, m_depthStencilAspect(aspect)
 	{
 	}
 
 	TextureSubresourceInfo(const TextureVolumeInfo& vol, DepthStencilAspectBit aspect = DepthStencilAspectBit::NONE)
-		: m_baseMipmap(vol.m_level)
+		: m_firstMipmap(vol.m_level)
 		, m_mipmapCount(1)
-		, m_baseLayer(0)
+		, m_firstLayer(0)
 		, m_layerCount(1)
-		, m_baseFace(0)
+		, m_firstFace(0)
 		, m_faceCount(1)
 		, m_depthStencilAspect(aspect)
 	{

+ 6 - 6
src/anki/gr/RenderGraph.cpp

@@ -419,9 +419,9 @@ Bool RenderGraph::overlappingTextureSubresource(const TextureSubresourceInfo& su
 #define ANKI_OVERLAPPING(first, count) \
 	((suba.first < subb.first + subb.count) && (subb.first < suba.first + suba.count))
 
-	const Bool overlappingFaces = ANKI_OVERLAPPING(m_baseFace, m_faceCount);
-	const Bool overlappingMips = ANKI_OVERLAPPING(m_baseMipmap, m_mipmapCount);
-	const Bool overlappingLayers = ANKI_OVERLAPPING(m_baseLayer, m_layerCount);
+	const Bool overlappingFaces = ANKI_OVERLAPPING(m_firstFace, m_faceCount);
+	const Bool overlappingMips = ANKI_OVERLAPPING(m_firstMipmap, m_mipmapCount);
+	const Bool overlappingLayers = ANKI_OVERLAPPING(m_firstLayer, m_layerCount);
 #undef ANKI_OVERLAPPING
 
 	return overlappingFaces && overlappingLayers && overlappingMips;
@@ -716,11 +716,11 @@ void RenderGraph::initBatches()
 template<typename TFunc>
 void RenderGraph::iterateSurfsOrVolumes(const TexturePtr& tex, const TextureSubresourceInfo& subresource, TFunc func)
 {
-	for(U mip = subresource.m_baseMipmap; mip < subresource.m_baseMipmap + subresource.m_mipmapCount; ++mip)
+	for(U mip = subresource.m_firstMipmap; mip < subresource.m_firstMipmap + subresource.m_mipmapCount; ++mip)
 	{
-		for(U layer = subresource.m_baseLayer; layer < subresource.m_baseLayer + subresource.m_layerCount; ++layer)
+		for(U layer = subresource.m_firstLayer; layer < subresource.m_firstLayer + subresource.m_layerCount; ++layer)
 		{
-			for(U face = subresource.m_baseFace; face < subresource.m_baseFace + subresource.m_faceCount; ++face)
+			for(U face = subresource.m_firstFace; face < subresource.m_firstFace + subresource.m_faceCount; ++face)
 			{
 				// Compute surf or vol idx
 				const U faceCount = textureTypeIsCube(tex->getTextureType()) ? 6 : 1;

+ 3 - 3
src/anki/gr/RenderGraph.inl.h

@@ -33,9 +33,9 @@ inline void RenderPassDescriptionBase::fixSubresource(RenderPassDependency& dep)
 	const Bool wholeTexture = subresource.m_mipmapCount == MAX_U32;
 	if(wholeTexture)
 	{
-		ANKI_ASSERT(subresource.m_baseFace == 0);
-		ANKI_ASSERT(subresource.m_baseMipmap == 0);
-		ANKI_ASSERT(subresource.m_baseLayer == 0);
+		ANKI_ASSERT(subresource.m_firstFace == 0);
+		ANKI_ASSERT(subresource.m_firstMipmap == 0);
+		ANKI_ASSERT(subresource.m_firstLayer == 0);
 
 		const RenderGraphDescription::RT& rt = m_descr->m_renderTargets[dep.m_texture.m_handle.m_idx];
 		if(rt.m_importedTex)

+ 4 - 4
src/anki/gr/Texture.h

@@ -168,16 +168,16 @@ public:
 
 		// Mips
 		ANKI_TEX_SUBRESOURCE_ASSERT(subresource.m_mipmapCount > 0);
-		ANKI_TEX_SUBRESOURCE_ASSERT(subresource.m_baseMipmap + subresource.m_mipmapCount <= m_mipCount);
+		ANKI_TEX_SUBRESOURCE_ASSERT(subresource.m_firstMipmap + subresource.m_mipmapCount <= m_mipCount);
 
 		// Layers
 		ANKI_TEX_SUBRESOURCE_ASSERT(subresource.m_layerCount > 0);
-		ANKI_TEX_SUBRESOURCE_ASSERT(subresource.m_baseLayer + subresource.m_layerCount <= m_layerCount);
+		ANKI_TEX_SUBRESOURCE_ASSERT(subresource.m_firstLayer + subresource.m_layerCount <= m_layerCount);
 
 		// Faces
 		const U8 faceCount = (cube) ? 6 : 1;
 		ANKI_TEX_SUBRESOURCE_ASSERT(subresource.m_faceCount == 1 || subresource.m_faceCount == 6);
-		ANKI_TEX_SUBRESOURCE_ASSERT(subresource.m_baseFace + subresource.m_faceCount <= faceCount);
+		ANKI_TEX_SUBRESOURCE_ASSERT(subresource.m_firstFace + subresource.m_faceCount <= faceCount);
 
 		// Aspect
 		ANKI_TEX_SUBRESOURCE_ASSERT((m_aspect & subresource.m_depthStencilAspect) == subresource.m_depthStencilAspect);
@@ -199,7 +199,7 @@ public:
 		ANKI_ASSERT(isSubresourceValid(subresource));
 		if(m_texType != TextureType::_3D)
 		{
-			return subresource.m_baseMipmap == 0 && subresource.m_mipmapCount == m_mipCount
+			return subresource.m_firstMipmap == 0 && subresource.m_mipmapCount == m_mipCount
 				&& subresource.m_faceCount == 1 && subresource.m_layerCount == 1
 				&& subresource.m_depthStencilAspect == m_aspect;
 		}

+ 23 - 70
src/anki/gr/TextureView.h

@@ -24,11 +24,11 @@ public:
 		: GrBaseInitInfo(name)
 		, m_texture(tex)
 	{
-		m_baseMipmap = 0;
+		m_firstMipmap = 0;
 		m_mipmapCount = tex->getMipmapCount();
-		m_baseLayer = 0;
+		m_firstLayer = 0;
 		m_layerCount = tex->getLayerCount();
-		m_baseFace = 0;
+		m_firstFace = 0;
 		m_faceCount =
 			(tex->getTextureType() == TextureType::CUBE_ARRAY || tex->getTextureType() == TextureType::CUBE) ? 6 : 1;
 
@@ -51,11 +51,11 @@ public:
 		: GrBaseInitInfo(name)
 		, m_texture(tex)
 	{
-		m_baseMipmap = surf.m_level;
+		m_firstMipmap = surf.m_level;
 		m_mipmapCount = 1;
-		m_baseLayer = surf.m_layer;
+		m_firstLayer = surf.m_layer;
 		m_layerCount = 1;
-		m_baseFace = surf.m_face;
+		m_firstFace = surf.m_face;
 		m_faceCount = 1;
 		m_depthStencilAspect = aspect;
 		ANKI_ASSERT(isValid());
@@ -89,79 +89,30 @@ public:
 		return m_texType;
 	}
 
-	DepthStencilAspectBit getDepthStencilAspect() const
+	const TextureSubresourceInfo& getSubresource() const
 	{
 		ANKI_ASSERT(initialized());
-		return m_aspect;
-	}
-
-	Bool isSingleSurface() const
-	{
-		ANKI_ASSERT(initialized());
-		ANKI_ASSERT(m_texType != TextureType::_3D);
-		return m_mipCount == 1 && m_layerCount == 1 && m_faceCount == 1;
-	}
-
-	Bool isSingleVolume() const
-	{
-		ANKI_ASSERT(initialized());
-		ANKI_ASSERT(m_texType == TextureType::_3D);
-		return m_mipCount == 1;
-	}
-
-	U32 getBaseMipmap() const
-	{
-		ANKI_ASSERT(initialized());
-		return m_baseMip;
-	}
-
-	U32 getMipmapCount() const
-	{
-		ANKI_ASSERT(initialized());
-		return m_mipCount;
-	}
-
-	U32 getBaseLayer() const
-	{
-		ANKI_ASSERT(initialized());
-		return m_baseLayer;
-	}
-
-	U32 getLayerCount() const
-	{
-		ANKI_ASSERT(initialized());
-		return m_layerCount;
-	}
-
-	U32 getBaseFace() const
-	{
-		ANKI_ASSERT(initialized());
-		return m_baseFace;
-	}
-
-	U32 getFaceCount() const
-	{
-		ANKI_ASSERT(initialized());
-		return m_faceCount;
+		return m_subresource;
 	}
 
 protected:
 	TextureType m_texType = TextureType::COUNT;
-	DepthStencilAspectBit m_aspect = DepthStencilAspectBit::NONE;
-
-	U32 m_baseMip = MAX_U32;
-	U32 m_mipCount = MAX_U32;
-
-	U32 m_baseLayer = MAX_U32;
-	U32 m_layerCount = MAX_U32;
-
-	U8 m_baseFace = MAX_U8;
-	U8 m_faceCount = MAX_U8;
+	TextureSubresourceInfo m_subresource;
 
 	/// Construct.
 	TextureView(GrManager* manager)
 		: GrObject(manager, CLASS_TYPE)
 	{
+		m_subresource.m_depthStencilAspect = DepthStencilAspectBit::NONE;
+
+		m_subresource.m_firstMipmap = MAX_U32;
+		m_subresource.m_mipmapCount = MAX_U32;
+
+		m_subresource.m_firstLayer = MAX_U32;
+		m_subresource.m_layerCount = MAX_U32;
+
+		m_subresource.m_firstFace = MAX_U8;
+		m_subresource.m_faceCount = MAX_U8;
 	}
 
 	/// Destroy.
@@ -171,8 +122,10 @@ protected:
 
 	Bool initialized() const
 	{
-		return m_texType != TextureType::COUNT && m_baseMip < MAX_U32 && m_mipCount < MAX_U32 && m_baseLayer < MAX_U32
-			&& m_layerCount < MAX_U32 && m_baseFace < MAX_U8 && m_faceCount < MAX_U8;
+		return m_texType != TextureType::COUNT && m_subresource.m_firstMipmap < MAX_U32
+			&& m_subresource.m_mipmapCount < MAX_U32 && m_subresource.m_firstLayer < MAX_U32
+			&& m_subresource.m_layerCount < MAX_U32 && m_subresource.m_firstFace < MAX_U8
+			&& m_subresource.m_faceCount < MAX_U8;
 	}
 
 private:

+ 1 - 1
src/anki/gr/gl/CommandBuffer.cpp

@@ -753,7 +753,7 @@ void CommandBuffer::bindImage(U32 set, U32 binding, TextureViewPtr img)
 
 			glBindImageTexture(m_unit,
 				view.m_view.m_glName,
-				m_img->getBaseMipmap(),
+				m_img->getSubresource().m_firstMipmap,
 				GL_TRUE,
 				0,
 				GL_READ_WRITE,

+ 26 - 19
src/anki/gr/gl/FramebufferImpl.cpp

@@ -54,13 +54,13 @@ Error FramebufferImpl::init(const FramebufferInitInfo& init)
 
 		if(m_fbSize[0] == 0)
 		{
-			m_fbSize[0] = viewImpl.m_tex->getWidth() >> viewImpl.getBaseMipmap();
-			m_fbSize[1] = viewImpl.m_tex->getHeight() >> viewImpl.getBaseMipmap();
+			m_fbSize[0] = viewImpl.m_tex->getWidth() >> viewImpl.getSubresource().m_firstMipmap;
+			m_fbSize[1] = viewImpl.m_tex->getHeight() >> viewImpl.getSubresource().m_firstMipmap;
 		}
 		else
 		{
-			ANKI_ASSERT(m_fbSize[0] == (viewImpl.m_tex->getWidth() >> viewImpl.getBaseMipmap()));
-			ANKI_ASSERT(m_fbSize[1] == (viewImpl.m_tex->getHeight() >> viewImpl.getBaseMipmap()));
+			ANKI_ASSERT(m_fbSize[0] == (viewImpl.m_tex->getWidth() >> viewImpl.getSubresource().m_firstMipmap));
+			ANKI_ASSERT(m_fbSize[1] == (viewImpl.m_tex->getHeight() >> viewImpl.getSubresource().m_firstMipmap));
 		}
 	}
 
@@ -72,17 +72,17 @@ Error FramebufferImpl::init(const FramebufferInitInfo& init)
 		ANKI_ASSERT(viewImpl.m_tex->isSubresourceGoodForFramebufferAttachment(viewImpl.getSubresource()));
 
 		GLenum binding;
-		if(viewImpl.getDepthStencilAspect() == DepthStencilAspectBit::DEPTH)
+		if(viewImpl.getSubresource().m_depthStencilAspect == DepthStencilAspectBit::DEPTH)
 		{
 			binding = GL_DEPTH_ATTACHMENT;
 		}
-		else if(viewImpl.getDepthStencilAspect() == DepthStencilAspectBit::STENCIL)
+		else if(viewImpl.getSubresource().m_depthStencilAspect == DepthStencilAspectBit::STENCIL)
 		{
 			binding = GL_STENCIL_ATTACHMENT;
 		}
 		else
 		{
-			ANKI_ASSERT(viewImpl.getDepthStencilAspect() == DepthStencilAspectBit::DEPTH_STENCIL);
+			ANKI_ASSERT(viewImpl.getSubresource().m_depthStencilAspect == DepthStencilAspectBit::DEPTH_STENCIL);
 			binding = GL_DEPTH_STENCIL_ATTACHMENT;
 		}
 
@@ -95,20 +95,20 @@ Error FramebufferImpl::init(const FramebufferInitInfo& init)
 
 		if(m_fbSize[0] == 0)
 		{
-			m_fbSize[0] = viewImpl.m_tex->getWidth() >> viewImpl.getBaseMipmap();
-			m_fbSize[1] = viewImpl.m_tex->getHeight() >> viewImpl.getBaseMipmap();
+			m_fbSize[0] = viewImpl.m_tex->getWidth() >> viewImpl.getSubresource().m_firstMipmap;
+			m_fbSize[1] = viewImpl.m_tex->getHeight() >> viewImpl.getSubresource().m_firstMipmap;
 		}
 		else
 		{
-			ANKI_ASSERT(m_fbSize[0] == (viewImpl.m_tex->getWidth() >> viewImpl.getBaseMipmap()));
-			ANKI_ASSERT(m_fbSize[1] == (viewImpl.m_tex->getHeight() >> viewImpl.getBaseMipmap()));
+			ANKI_ASSERT(m_fbSize[0] == (viewImpl.m_tex->getWidth() >> viewImpl.getSubresource().m_firstMipmap));
+			ANKI_ASSERT(m_fbSize[1] == (viewImpl.m_tex->getHeight() >> viewImpl.getSubresource().m_firstMipmap));
 		}
 
 		// Misc
-		m_clearDepth = !!(viewImpl.getDepthStencilAspect() & DepthStencilAspectBit::DEPTH)
+		m_clearDepth = !!(viewImpl.getSubresource().m_depthStencilAspect & DepthStencilAspectBit::DEPTH)
 			&& att.m_loadOperation == AttachmentLoadOperation::CLEAR;
 
-		m_clearStencil = !!(viewImpl.getDepthStencilAspect() & DepthStencilAspectBit::STENCIL)
+		m_clearStencil = !!(viewImpl.getSubresource().m_depthStencilAspect & DepthStencilAspectBit::STENCIL)
 			&& att.m_stencilLoadOperation == AttachmentLoadOperation::CLEAR;
 	}
 
@@ -136,24 +136,31 @@ void FramebufferImpl::attachTextureInternal(
 #if ANKI_GL == ANKI_GL_DESKTOP
 	case GL_TEXTURE_2D_MULTISAMPLE:
 #endif
-		glFramebufferTexture2D(target, attachment, tex.m_target, tex.getGlName(), view.getBaseMipmap());
+		glFramebufferTexture2D(target, attachment, tex.m_target, tex.getGlName(), view.getSubresource().m_firstMipmap);
 		break;
 	case GL_TEXTURE_CUBE_MAP:
 		glFramebufferTexture2D(target,
 			attachment,
-			GL_TEXTURE_CUBE_MAP_POSITIVE_X + view.getBaseFace(),
+			GL_TEXTURE_CUBE_MAP_POSITIVE_X + view.getSubresource().m_firstFace,
 			tex.getGlName(),
-			view.getBaseMipmap());
+			view.getSubresource().m_firstMipmap);
 		break;
 	case GL_TEXTURE_2D_ARRAY:
-		glFramebufferTextureLayer(target, attachment, tex.getGlName(), view.getBaseMipmap(), view.getBaseLayer());
+		glFramebufferTextureLayer(target,
+			attachment,
+			tex.getGlName(),
+			view.getSubresource().m_firstMipmap,
+			view.getSubresource().m_firstLayer);
 		break;
 	case GL_TEXTURE_3D:
 		ANKI_ASSERT(!"TODO");
 		break;
 	case GL_TEXTURE_CUBE_MAP_ARRAY:
-		glFramebufferTextureLayer(
-			target, attachment, tex.getGlName(), view.getBaseMipmap(), view.getBaseLayer() * 6 + view.getBaseFace());
+		glFramebufferTextureLayer(target,
+			attachment,
+			tex.getGlName(),
+			view.getSubresource().m_firstMipmap,
+			view.getSubresource().m_firstLayer * 6 + view.getSubresource().m_firstFace);
 		break;
 	default:
 		ANKI_ASSERT(0);

+ 12 - 11
src/anki/gr/gl/TextureImpl.cpp

@@ -214,7 +214,7 @@ void TextureImpl::copyFromBuffer(
 	ANKI_ASSERT(isSubresourceGoodForCopyFromBuffer(subresource));
 	ANKI_ASSERT(dataSize > 0);
 
-	const U mipmap = subresource.m_baseMipmap;
+	const U mipmap = subresource.m_firstMipmap;
 	const U w = m_width >> mipmap;
 	const U h = m_height >> mipmap;
 	const U d = m_depth >> mipmap;
@@ -239,7 +239,7 @@ void TextureImpl::copyFromBuffer(
 		break;
 	case GL_TEXTURE_CUBE_MAP:
 	{
-		const U surfIdx = computeSurfaceIdx(TextureSurfaceInfo(mipmap, 0, subresource.m_baseFace, 0));
+		const U surfIdx = computeSurfaceIdx(TextureSurfaceInfo(mipmap, 0, subresource.m_firstFace, 0));
 		if(!m_compressed)
 		{
 			glTexSubImage2D(
@@ -254,7 +254,7 @@ void TextureImpl::copyFromBuffer(
 	}
 	case GL_TEXTURE_2D_ARRAY:
 	{
-		const U surfIdx = computeSurfaceIdx(TextureSurfaceInfo(mipmap, 0, 0, subresource.m_baseLayer));
+		const U surfIdx = computeSurfaceIdx(TextureSurfaceInfo(mipmap, 0, 0, subresource.m_firstLayer));
 		if(!m_compressed)
 		{
 			glTexSubImage3D(m_target, mipmap, 0, 0, surfIdx, w, h, 1, m_glFormat, m_glType, ptrOffset);
@@ -329,11 +329,12 @@ void TextureImpl::clear(const TextureSubresourceInfo& subresource, const ClearVa
 		format = m_glFormat;
 	}
 
-	for(U mip = subresource.m_baseMipmap; mip < subresource.m_baseMipmap + subresource.m_mipmapCount; ++mip)
+	for(U mip = subresource.m_firstMipmap; mip < subresource.m_firstMipmap + subresource.m_mipmapCount; ++mip)
 	{
-		for(U face = subresource.m_baseFace; face < subresource.m_baseFace + subresource.m_faceCount; ++face)
+		for(U face = subresource.m_firstFace; face < subresource.m_firstFace + subresource.m_faceCount; ++face)
 		{
-			for(U layer = subresource.m_baseLayer; layer < subresource.m_baseLayer + subresource.m_layerCount; ++layer)
+			for(U layer = subresource.m_firstLayer; layer < subresource.m_firstLayer + subresource.m_layerCount;
+				++layer)
 			{
 				const U surfaceIdx = computeSurfaceIdx(TextureSurfaceInfo(mip, 0, face, layer));
 				const U width = m_width >> mip;
@@ -388,11 +389,11 @@ MicroTextureView TextureImpl::getOrCreateView(const TextureSubresourceInfo& subr
 		}
 
 		const U firstSurf = computeSurfaceIdx(
-			TextureSurfaceInfo(subresource.m_baseMipmap, 0, subresource.m_baseFace, subresource.m_baseLayer));
-		const U lastSurf = computeSurfaceIdx(TextureSurfaceInfo(subresource.m_baseMipmap,
+			TextureSurfaceInfo(subresource.m_firstMipmap, 0, subresource.m_firstFace, subresource.m_firstLayer));
+		const U lastSurf = computeSurfaceIdx(TextureSurfaceInfo(subresource.m_firstMipmap,
 			0,
-			subresource.m_baseFace + subresource.m_faceCount - 1,
-			subresource.m_baseLayer + subresource.m_layerCount - 1));
+			subresource.m_firstFace + subresource.m_faceCount - 1,
+			subresource.m_firstLayer + subresource.m_layerCount - 1));
 		ANKI_ASSERT(firstSurf <= lastSurf);
 
 		MicroTextureView view;
@@ -403,7 +404,7 @@ MicroTextureView TextureImpl::getOrCreateView(const TextureSubresourceInfo& subr
 			glTarget,
 			m_glName,
 			m_internalFormat,
-			subresource.m_baseMipmap,
+			subresource.m_firstMipmap,
 			subresource.m_mipmapCount,
 			firstSurf,
 			lastSurf - firstSurf + 1);

+ 1 - 7
src/anki/gr/gl/TextureViewImpl.cpp

@@ -13,13 +13,7 @@ void TextureViewImpl::preInit(const TextureViewInitInfo& inf)
 	ANKI_ASSERT(inf.isValid());
 
 	// Store some stuff
-	m_aspect = inf.m_depthStencilAspect;
-	m_baseMip = inf.m_baseMipmap;
-	m_mipCount = inf.m_mipmapCount;
-	m_baseLayer = inf.m_baseLayer;
-	m_layerCount = inf.m_layerCount;
-	m_baseFace = inf.m_baseFace;
-	m_faceCount = inf.m_faceCount;
+	m_subresource = inf;
 
 	m_tex = inf.m_texture;
 	const TextureImpl& tex = static_cast<const TextureImpl&>(*m_tex);

+ 0 - 13
src/anki/gr/gl/TextureViewImpl.h

@@ -39,19 +39,6 @@ public:
 		m_view = static_cast<const TextureImpl&>(*m_tex).getOrCreateView(getSubresource());
 		m_glName = m_view.m_glName;
 	}
-
-	TextureSubresourceInfo getSubresource() const
-	{
-		TextureSubresourceInfo out;
-		out.m_baseMipmap = m_baseMip;
-		out.m_mipmapCount = m_mipCount;
-		out.m_baseLayer = m_baseLayer;
-		out.m_layerCount = m_layerCount;
-		out.m_baseFace = m_baseFace;
-		out.m_faceCount = m_faceCount;
-		out.m_depthStencilAspect = m_aspect;
-		return out;
-	}
 };
 /// @}
 

+ 7 - 6
src/anki/gr/vulkan/CommandBufferImpl.cpp

@@ -304,9 +304,9 @@ void CommandBufferImpl::generateMipmaps2d(TextureViewPtr texView)
 	ANKI_ASSERT(tex.getTextureType() != TextureType::_3D && "Not for 3D");
 	ANKI_ASSERT(tex.isSubresourceGoodForMipmapGeneration(view.getSubresource()));
 
-	const DepthStencilAspectBit aspect = view.getDepthStencilAspect();
-	const U face = view.getBaseFace();
-	const U layer = view.getBaseLayer();
+	const DepthStencilAspectBit aspect = view.getSubresource().m_depthStencilAspect;
+	const U face = view.getSubresource().m_firstFace;
+	const U layer = view.getSubresource().m_firstLayer;
 
 	for(U i = 0; i < tex.getMipmapCount() - 1u; ++i)
 	{
@@ -669,10 +669,11 @@ void CommandBufferImpl::copyBufferToTextureViewInternal(
 	ANKI_ASSERT(tex.isSubresourceGoodForCopyFromBuffer(view.getSubresource()));
 	const VkImageLayout layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
 	const Bool is3D = tex.getTextureType() == TextureType::_3D;
-	const VkImageAspectFlags aspect = convertImageAspect(view.getDepthStencilAspect());
+	const VkImageAspectFlags aspect = convertImageAspect(view.getSubresource().m_depthStencilAspect);
 
-	const TextureSurfaceInfo surf(view.getBaseMipmap(), view.getBaseFace(), 0, view.getBaseLayer());
-	const TextureVolumeInfo vol(view.getBaseMipmap());
+	const TextureSurfaceInfo surf(
+		view.getSubresource().m_firstMipmap, view.getSubresource().m_firstFace, 0, view.getSubresource().m_firstLayer);
+	const TextureVolumeInfo vol(view.getSubresource().m_firstMipmap);
 
 	// Compute the sizes of the mip
 	const U width = tex.getWidth() >> surf.m_level;

+ 2 - 2
src/anki/gr/vulkan/CommandBufferImpl.inl.h

@@ -160,7 +160,7 @@ inline void CommandBufferImpl::setTextureBarrier(
 	{
 		ANKI_ASSERT(impl.isSubresourceGoodForMipmapGeneration(subresource));
 
-		subresource.m_baseMipmap = 0;
+		subresource.m_firstMipmap = 0;
 		subresource.m_mipmapCount = 1;
 	}
 
@@ -409,7 +409,7 @@ inline void CommandBufferImpl::clearTextureView(TextureViewPtr texView, const Cl
 	static_assert(sizeof(vclear) == sizeof(clearValue), "See file");
 	memcpy(&vclear, &clearValue, sizeof(clearValue));
 
-	if(!view.getDepthStencilAspect())
+	if(!view.getSubresource().m_depthStencilAspect)
 	{
 		VkImageSubresourceRange vkRange = view.getVkImageSubresourceRange();
 		ANKI_CMD(vkCmdClearColorImage(

+ 7 - 7
src/anki/gr/vulkan/FramebufferImpl.cpp

@@ -49,7 +49,7 @@ Error FramebufferImpl::init(const FramebufferInitInfo& init)
 
 	if(!m_defaultFb && init.m_depthStencilAttachment.m_textureView)
 	{
-		m_aspect = init.m_depthStencilAttachment.m_textureView->getDepthStencilAspect();
+		m_aspect = init.m_depthStencilAttachment.m_textureView->getSubresource().m_depthStencilAspect;
 	}
 
 	initClearValues(init);
@@ -125,15 +125,15 @@ Error FramebufferImpl::initFbs(const FramebufferInitInfo& init)
 	{
 		const FramebufferAttachmentInfo& att = init.m_colorAttachments[i];
 		const TextureViewImpl& view = static_cast<const TextureViewImpl&>(*att.m_textureView);
-		ANKI_ASSERT(view.isSingleSurface());
 		const TextureImpl& tex = static_cast<const TextureImpl&>(*view.m_tex);
+		ANKI_ASSERT(tex.isSubresourceGoodForFramebufferAttachment(view.getSubresource()));
 
 		imgViews[count++] = view.m_handle;
 
 		if(m_noDflt.m_width == 0)
 		{
-			m_noDflt.m_width = tex.getWidth() >> view.getBaseMipmap();
-			m_noDflt.m_height = tex.getHeight() >> view.getBaseMipmap();
+			m_noDflt.m_width = tex.getWidth() >> view.getSubresource().m_firstMipmap;
+			m_noDflt.m_height = tex.getHeight() >> view.getSubresource().m_firstMipmap;
 		}
 
 		m_noDflt.m_refs[i] = att.m_textureView;
@@ -143,15 +143,15 @@ Error FramebufferImpl::initFbs(const FramebufferInitInfo& init)
 	{
 		const FramebufferAttachmentInfo& att = init.m_depthStencilAttachment;
 		const TextureViewImpl& view = static_cast<const TextureViewImpl&>(*att.m_textureView);
-		ANKI_ASSERT(view.isSingleSurface());
 		const TextureImpl& tex = static_cast<const TextureImpl&>(*view.m_tex);
+		ANKI_ASSERT(tex.isSubresourceGoodForFramebufferAttachment(view.getSubresource()));
 
 		imgViews[count++] = view.m_handle;
 
 		if(m_noDflt.m_width == 0)
 		{
-			m_noDflt.m_width = tex.getWidth() >> view.getBaseMipmap();
-			m_noDflt.m_height = tex.getHeight() >> view.getBaseMipmap();
+			m_noDflt.m_width = tex.getWidth() >> view.getSubresource().m_firstMipmap;
+			m_noDflt.m_height = tex.getHeight() >> view.getSubresource().m_firstMipmap;
 		}
 
 		m_noDflt.m_refs[MAX_COLOR_ATTACHMENTS] = att.m_textureView;

+ 2 - 2
src/anki/gr/vulkan/TextureImpl.h

@@ -101,11 +101,11 @@ public:
 		ANKI_ASSERT(isSubresourceValid(in));
 
 		range.aspectMask = convertImageAspect(in.m_depthStencilAspect);
-		range.baseMipLevel = in.m_baseMipmap;
+		range.baseMipLevel = in.m_firstMipmap;
 		range.levelCount = in.m_mipmapCount;
 
 		const U32 faceCount = textureTypeIsCube(m_texType) ? 6 : 1;
-		range.baseArrayLayer = in.m_baseLayer * faceCount + in.m_baseFace;
+		range.baseArrayLayer = in.m_firstLayer * faceCount + in.m_firstFace;
 		range.layerCount = in.m_layerCount * in.m_faceCount;
 	}
 

+ 1 - 7
src/anki/gr/vulkan/TextureViewImpl.cpp

@@ -18,13 +18,7 @@ Error TextureViewImpl::init(const TextureViewInitInfo& inf)
 	ANKI_ASSERT(inf.isValid());
 
 	// Store some stuff
-	m_aspect = inf.m_depthStencilAspect;
-	m_baseMip = inf.m_baseMipmap;
-	m_mipCount = inf.m_mipmapCount;
-	m_baseLayer = inf.m_baseLayer;
-	m_layerCount = inf.m_layerCount;
-	m_baseFace = inf.m_baseFace;
-	m_faceCount = inf.m_faceCount;
+	m_subresource = inf;
 
 	m_tex = inf.m_texture;
 	const TextureImpl& tex = static_cast<const TextureImpl&>(*m_tex);

+ 0 - 13
src/anki/gr/vulkan/TextureViewImpl.h

@@ -35,19 +35,6 @@ public:
 
 	ANKI_USE_RESULT Error init(const TextureViewInitInfo& inf);
 
-	TextureSubresourceInfo getSubresource() const
-	{
-		TextureSubresourceInfo out;
-		out.m_baseMipmap = m_baseMip;
-		out.m_mipmapCount = m_mipCount;
-		out.m_baseLayer = m_baseLayer;
-		out.m_layerCount = m_layerCount;
-		out.m_baseFace = m_baseFace;
-		out.m_faceCount = m_faceCount;
-		out.m_depthStencilAspect = m_aspect;
-		return out;
-	}
-
 	VkImageSubresourceRange getVkImageSubresourceRange() const
 	{
 		VkImageSubresourceRange out;

+ 1 - 1
src/anki/ui/Font.h

@@ -47,7 +47,7 @@ anki_internal:
 		}
 
 		ANKI_ASSERT(0);
-		return *static_cast<const nk_user_font*>(nullptr);
+		return m_fonts[0].m_font->handle;
 	}
 
 private:

+ 1 - 1
tests/gr/Gr.cpp

@@ -1323,7 +1323,7 @@ ANKI_TEST(Gr, ImageLoadStore)
 	TexturePtr tex = gr->newTexture(init);
 
 	TextureViewInitInfo viewInit(tex);
-	viewInit.m_baseMipmap = 1;
+	viewInit.m_firstMipmap = 1;
 	viewInit.m_mipmapCount = 1;
 	TextureViewPtr view = gr->newTextureView(viewInit);