2
0
Эх сурвалжийг харах

GR: Some refactoring and bug fixes

Panagiotis Christopoulos Charitos 9 жил өмнө
parent
commit
2262f9b896
41 өөрчлөгдсөн 324 нэмэгдсэн , 335 устгасан
  1. 19 19
      src/anki/gr/CommandBuffer.h
  2. 6 6
      src/anki/gr/Enums.h
  3. 1 3
      src/anki/gr/Framebuffer.h
  4. 20 20
      src/anki/gr/gl/CommandBuffer.cpp
  5. 43 20
      src/anki/gr/gl/CommandBufferImpl.cpp
  6. 20 20
      src/anki/gr/gl/Common.cpp
  7. 10 10
      src/anki/gr/gl/Common.h
  8. 7 7
      src/anki/gr/gl/FramebufferImpl.cpp
  9. 3 3
      src/anki/gr/gl/FramebufferImpl.h
  10. 51 57
      src/anki/gr/gl/StateTracker.h
  11. 8 8
      src/anki/gr/gl/TextureImpl.cpp
  12. 2 2
      src/anki/gr/gl/TextureImpl.h
  13. 5 5
      src/anki/gr/vulkan/CommandBuffer.cpp
  14. 5 5
      src/anki/gr/vulkan/CommandBufferImpl.h
  15. 11 11
      src/anki/gr/vulkan/CommandBufferImpl.inl.h
  16. 30 30
      src/anki/gr/vulkan/Common.cpp
  17. 3 3
      src/anki/gr/vulkan/Common.h
  18. 4 4
      src/anki/gr/vulkan/FramebufferImpl.cpp
  19. 3 3
      src/anki/gr/vulkan/PipelineImpl.cpp
  20. 7 7
      src/anki/gr/vulkan/TextureImpl.cpp
  21. 7 7
      src/anki/gr/vulkan/TextureImpl.h
  22. 5 5
      src/anki/gr/vulkan/TextureImpl.inl.h
  23. 0 2
      src/anki/renderer/Bloom.cpp
  24. 1 1
      src/anki/renderer/Dbg.cpp
  25. 2 2
      src/anki/renderer/DebugDrawer.cpp
  26. 6 8
      src/anki/renderer/DepthDownscale.cpp
  27. 0 1
      src/anki/renderer/DownscaleBlur.cpp
  28. 6 9
      src/anki/renderer/Fs.cpp
  29. 2 3
      src/anki/renderer/FsUpscale.cpp
  30. 8 14
      src/anki/renderer/Ir.cpp
  31. 1 2
      src/anki/renderer/Is.cpp
  32. 4 2
      src/anki/renderer/Lf.cpp
  33. 1 5
      src/anki/renderer/Ms.cpp
  34. 0 1
      src/anki/renderer/Pps.cpp
  35. 0 1
      src/anki/renderer/Sm.cpp
  36. 10 14
      src/anki/renderer/Smaa.cpp
  37. 0 1
      src/anki/renderer/Ssao.cpp
  38. 2 2
      src/anki/renderer/Sslf.cpp
  39. 2 3
      src/anki/renderer/Volumetric.cpp
  40. 2 2
      src/anki/ui/UiInterfaceImpl.cpp
  41. 7 7
      tests/gr/Gr.cpp

+ 19 - 19
src/anki/gr/CommandBuffer.h

@@ -172,34 +172,35 @@ public:
 	void setFillMode(FillMode mode);
 
 	/// Set cull mode.
-	void setCullMode(FaceSelectionMask mode);
+	void setCullMode(FaceSelectionBit mode);
 
 	/// Set depth offset and units. Set zeros to both to disable it.
 	void setPolygonOffset(F32 factor, F32 units);
 
 	/// Set stencil operations. To disable stencil test put StencilOperation::KEEP to all operations.
-	void setStencilOperations(FaceSelectionMask face,
+	void setStencilOperations(FaceSelectionBit face,
 		StencilOperation stencilFail,
 		StencilOperation stencilPassDepthFail,
 		StencilOperation stencilPassDepthPass);
 
-	/// Set stencil compare function.
-	void setStencilCompareFunction(FaceSelectionMask face, CompareOperation comp);
+	/// Set stencil compare operation.
+	void setStencilCompareOperation(FaceSelectionBit face, CompareOperation comp);
 
 	/// Set the stencil compare mask.
-	void setStencilCompareMask(FaceSelectionMask face, U32 mask);
+	void setStencilCompareMask(FaceSelectionBit face, U32 mask);
 
 	/// Set the stencil write mask.
-	void setStencilWriteMask(FaceSelectionMask face, U32 mask);
+	void setStencilWriteMask(FaceSelectionBit face, U32 mask);
 
 	/// Set the stencil reference.
-	void setStencilReference(FaceSelectionMask face, U32 ref);
+	void setStencilReference(FaceSelectionBit face, U32 ref);
 
-	/// Enable/disable depth write.
+	/// Enable/disable depth write. To disable depth testing set depth write to false and depth compare operation to
+	/// always.
 	void setDepthWrite(Bool enable);
 
-	/// Set depth compare function.
-	void setDepthCompareFunction(CompareOperation op);
+	/// Set depth compare operation.
+	void setDepthCompareOperation(CompareOperation op);
 
 	/// Enable/disable alpha to coverage.
 	void setAlphaToCoverage(Bool enable);
@@ -207,22 +208,21 @@ public:
 	/// Set color channel write mask.
 	void setColorChannelWriteMask(U32 attachment, ColorBit mask);
 
-	/// Set blend methods. To disable blending set src to BlendMethod::ONE and dst BlendMethod::ZERO.
-	void setBlendMethods(U32 attachment, BlendMethod src, BlendMethod dst);
+	/// Set blend factors.
+	void setBlendFactors(U32 attachment, BlendFactor src, BlendFactor dst);
 
-	/// Set the blend function.
-	void setBlendFunction(U32 attachment, BlendFunction func);
+	/// Set the blend operation.
+	void setBlendOperation(U32 attachment, BlendOperation func);
 
 	/// Bind texture.
-	void bindTexture(
-		U32 set, U32 binding, TexturePtr tex, DepthStencilAspectMask aspect = DepthStencilAspectMask::DEPTH);
+	void bindTexture(U32 set, U32 binding, TexturePtr tex, DepthStencilAspectBit aspect = DepthStencilAspectBit::DEPTH);
 
 	/// Bind texture and sample.
 	void bindTextureAndSampler(U32 set,
 		U32 binding,
 		TexturePtr tex,
 		SamplerPtr sampler,
-		DepthStencilAspectMask aspect = DepthStencilAspectMask::DEPTH);
+		DepthStencilAspectBit aspect = DepthStencilAspectBit::DEPTH);
 
 	/// Bind uniform buffer.
 	void bindUniformBuffer(U32 set, U32 binding, BufferPtr buff, PtrSize offset);
@@ -291,7 +291,7 @@ public:
 	void clearTextureSurface(TexturePtr tex,
 		const TextureSurfaceInfo& surf,
 		const ClearValue& clearValue,
-		DepthStencilAspectMask aspect = DepthStencilAspectMask::NONE);
+		DepthStencilAspectBit aspect = DepthStencilAspectBit::NONE);
 
 	/// Clear a volume out of a 3D texture.
 	/// @param tex The texture to clear.
@@ -301,7 +301,7 @@ public:
 	void clearTextureVolume(TexturePtr tex,
 		const TextureVolumeInfo& vol,
 		const ClearValue& clearValue,
-		DepthStencilAspectMask aspect = DepthStencilAspectMask::NONE);
+		DepthStencilAspectBit aspect = DepthStencilAspectBit::NONE);
 
 	/// Fill a buffer with some value.
 	/// @param[in,out] buff The buffer to fill.

+ 6 - 6
src/anki/gr/Enums.h

@@ -43,13 +43,13 @@ enum class FillMode : U8
 	COUNT
 };
 
-enum class FaceSelectionMask : U8
+enum class FaceSelectionBit : U8
 {
 	FRONT = 1 << 0,
 	BACK = 1 << 1,
 	FRONT_AND_BACK = FRONT | BACK
 };
-ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(FaceSelectionMask, inline)
+ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(FaceSelectionBit, inline)
 
 enum class CompareOperation : U8
 {
@@ -77,7 +77,7 @@ enum class StencilOperation : U8
 	COUNT
 };
 
-enum class BlendMethod : U8
+enum class BlendFactor : U8
 {
 	ZERO,
 	ONE,
@@ -101,7 +101,7 @@ enum class BlendMethod : U8
 	COUNT
 };
 
-enum class BlendFunction : U8
+enum class BlendOperation : U8
 {
 	ADD,
 	SUBTRACT,
@@ -407,14 +407,14 @@ enum class BufferMapAccessBit : U8
 ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(BufferMapAccessBit, inline)
 
 /// A way to distinguish the aspect of a depth stencil texture.
-enum class DepthStencilAspectMask : U8
+enum class DepthStencilAspectBit : U8
 {
 	NONE = 0,
 	DEPTH = 1 << 0,
 	STENCIL = 1 << 1,
 	DEPTH_STENCIL = DEPTH | STENCIL
 };
-ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(DepthStencilAspectMask, inline)
+ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(DepthStencilAspectBit, inline)
 
 /// Index buffer's index type.
 enum class IndexType : U8

+ 1 - 3
src/anki/gr/Framebuffer.h

@@ -28,9 +28,7 @@ public:
 	AttachmentLoadOperation m_stencilLoadOperation = AttachmentLoadOperation::CLEAR;
 	AttachmentStoreOperation m_stencilStoreOperation = AttachmentStoreOperation::STORE;
 
-	TextureUsageBit m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
-
-	DepthStencilAspectMask m_aspect = DepthStencilAspectMask::NONE; ///< Relevant only for depth stencil textures.
+	DepthStencilAspectBit m_aspect = DepthStencilAspectBit::NONE; ///< Relevant only for depth stencil textures.
 };
 
 /// Framebuffer initializer. If you require the default framebuffer then set m_colorAttachmentCount to 1 and don't set a

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

@@ -312,7 +312,7 @@ void CommandBuffer::setFillMode(FillMode mode)
 	}
 }
 
-void CommandBuffer::setCullMode(FaceSelectionMask mode)
+void CommandBuffer::setCullMode(FaceSelectionBit mode)
 {
 	class Cmd final : public GlCommand
 	{
@@ -373,7 +373,7 @@ void CommandBuffer::setPolygonOffset(F32 factor, F32 units)
 	}
 }
 
-void CommandBuffer::setStencilOperations(FaceSelectionMask face,
+void CommandBuffer::setStencilOperations(FaceSelectionBit face,
 	StencilOperation stencilFail,
 	StencilOperation stencilPassDepthFail,
 	StencilOperation stencilPassDepthPass)
@@ -410,17 +410,17 @@ void CommandBuffer::setStencilOperations(FaceSelectionMask face,
 	}
 }
 
-void CommandBuffer::setStencilCompareFunction(FaceSelectionMask face, CompareOperation comp)
+void CommandBuffer::setStencilCompareOperation(FaceSelectionBit face, CompareOperation comp)
 {
-	m_impl->m_state.setStencilCompareFunction(face, comp);
+	m_impl->m_state.setStencilCompareOperation(face, comp);
 }
 
-void CommandBuffer::setStencilCompareMask(FaceSelectionMask face, U32 mask)
+void CommandBuffer::setStencilCompareMask(FaceSelectionBit face, U32 mask)
 {
 	m_impl->m_state.setStencilCompareMask(face, mask);
 }
 
-void CommandBuffer::setStencilWriteMask(FaceSelectionMask face, U32 mask)
+void CommandBuffer::setStencilWriteMask(FaceSelectionBit face, U32 mask)
 {
 	class Cmd final : public GlCommand
 	{
@@ -462,7 +462,7 @@ void CommandBuffer::setStencilWriteMask(FaceSelectionMask face, U32 mask)
 	}
 }
 
-void CommandBuffer::setStencilReference(FaceSelectionMask face, U32 ref)
+void CommandBuffer::setStencilReference(FaceSelectionBit face, U32 ref)
 {
 	m_impl->m_state.setStencilReference(face, ref);
 }
@@ -493,7 +493,7 @@ void CommandBuffer::setDepthWrite(Bool enable)
 	}
 }
 
-void CommandBuffer::setDepthCompareFunction(CompareOperation op)
+void CommandBuffer::setDepthCompareOperation(CompareOperation op)
 {
 	class Cmd final : public GlCommand
 	{
@@ -512,7 +512,7 @@ void CommandBuffer::setDepthCompareFunction(CompareOperation op)
 		}
 	};
 
-	if(m_impl->m_state.setDepthCompareFunction(op))
+	if(m_impl->m_state.setDepthCompareOperation(op))
 	{
 		m_impl->pushBackNewCommand<Cmd>(convertCompareOperation(op));
 	}
@@ -558,7 +558,7 @@ void CommandBuffer::setColorChannelWriteMask(U32 attachment, ColorBit mask)
 	}
 }
 
-void CommandBuffer::setBlendMethods(U32 attachment, BlendMethod src, BlendMethod dst)
+void CommandBuffer::setBlendFactors(U32 attachment, BlendFactor src, BlendFactor dst)
 {
 	class Cmd final : public GlCommand
 	{
@@ -581,13 +581,13 @@ void CommandBuffer::setBlendMethods(U32 attachment, BlendMethod src, BlendMethod
 		}
 	};
 
-	if(m_impl->m_state.setBlendMethods(attachment, src, dst))
+	if(m_impl->m_state.setBlendFactors(attachment, src, dst))
 	{
-		m_impl->pushBackNewCommand<Cmd>(attachment, convertBlendMethod(src), convertBlendMethod(dst));
+		m_impl->pushBackNewCommand<Cmd>(attachment, convertBlendFactor(src), convertBlendFactor(dst));
 	}
 }
 
-void CommandBuffer::setBlendFunction(U32 attachment, BlendFunction func)
+void CommandBuffer::setBlendOperation(U32 attachment, BlendOperation func)
 {
 	class Cmd final : public GlCommand
 	{
@@ -608,13 +608,13 @@ void CommandBuffer::setBlendFunction(U32 attachment, BlendFunction func)
 		}
 	};
 
-	if(m_impl->m_state.setBlendFunction(attachment, func))
+	if(m_impl->m_state.setBlendOperation(attachment, func))
 	{
-		m_impl->pushBackNewCommand<Cmd>(attachment, convertBlendFunction(func));
+		m_impl->pushBackNewCommand<Cmd>(attachment, convertBlendOperation(func));
 	}
 }
 
-void CommandBuffer::bindTexture(U32 set, U32 binding, TexturePtr tex, DepthStencilAspectMask aspect)
+void CommandBuffer::bindTexture(U32 set, U32 binding, TexturePtr tex, DepthStencilAspectBit aspect)
 {
 	class Cmd final : public GlCommand
 	{
@@ -654,7 +654,7 @@ void CommandBuffer::bindTexture(U32 set, U32 binding, TexturePtr tex, DepthStenc
 }
 
 void CommandBuffer::bindTextureAndSampler(
-	U32 set, U32 binding, TexturePtr tex, SamplerPtr sampler, DepthStencilAspectMask aspect)
+	U32 set, U32 binding, TexturePtr tex, SamplerPtr sampler, DepthStencilAspectBit aspect)
 {
 	class Cmd final : public GlCommand
 	{
@@ -1456,7 +1456,7 @@ void CommandBuffer::setTextureVolumeBarrier(
 }
 
 void CommandBuffer::clearTextureSurface(
-	TexturePtr tex, const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectMask aspect)
+	TexturePtr tex, const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectBit aspect)
 {
 	class ClearTextCommand final : public GlCommand
 	{
@@ -1464,10 +1464,10 @@ void CommandBuffer::clearTextureSurface(
 		TexturePtr m_tex;
 		ClearValue m_val;
 		TextureSurfaceInfo m_surf;
-		DepthStencilAspectMask m_aspect;
+		DepthStencilAspectBit m_aspect;
 
 		ClearTextCommand(
-			TexturePtr tex, const TextureSurfaceInfo& surf, const ClearValue& val, DepthStencilAspectMask aspect)
+			TexturePtr tex, const TextureSurfaceInfo& surf, const ClearValue& val, DepthStencilAspectBit aspect)
 			: m_tex(tex)
 			, m_val(val)
 			, m_surf(surf)

+ 43 - 20
src/anki/gr/gl/CommandBufferImpl.cpp

@@ -117,9 +117,9 @@ void CommandBufferImpl::flushDrawcall(CommandBuffer& cmdb)
 			cmdb.setFillMode(FillMode::SOLID);
 		}
 
-		if(m_state.m_cullMode == static_cast<FaceSelectionMask>(0))
+		if(m_state.m_cullMode == static_cast<FaceSelectionBit>(0))
 		{
-			cmdb.setCullMode(FaceSelectionMask::BACK);
+			cmdb.setCullMode(FaceSelectionBit::BACK);
 		}
 
 		if(m_state.m_polyOffsetFactor == -1.0)
@@ -129,7 +129,7 @@ void CommandBufferImpl::flushDrawcall(CommandBuffer& cmdb)
 
 		for(U i = 0; i < 2; ++i)
 		{
-			FaceSelectionMask face = (i == 0) ? FaceSelectionMask::FRONT : FaceSelectionMask::BACK;
+			FaceSelectionBit face = (i == 0) ? FaceSelectionBit::FRONT : FaceSelectionBit::BACK;
 
 			if(m_state.m_stencilFail[i] == StencilOperation::COUNT)
 			{
@@ -138,7 +138,7 @@ void CommandBufferImpl::flushDrawcall(CommandBuffer& cmdb)
 
 			if(m_state.m_stencilCompare[i] == CompareOperation::COUNT)
 			{
-				cmdb.setStencilCompareFunction(face, CompareOperation::ALWAYS);
+				cmdb.setStencilCompareOperation(face, CompareOperation::ALWAYS);
 			}
 
 			if(m_state.m_stencilCompareMask[i] == StateTracker::DUMMY_STENCIL_MASK)
@@ -164,24 +164,25 @@ void CommandBufferImpl::flushDrawcall(CommandBuffer& cmdb)
 
 		if(m_state.m_depthOp == CompareOperation::COUNT)
 		{
-			cmdb.setDepthCompareFunction(CompareOperation::LESS);
+			cmdb.setDepthCompareOperation(CompareOperation::LESS);
 		}
 
 		for(U i = 0; i < MAX_COLOR_ATTACHMENTS; ++i)
 		{
-			if(m_state.m_colorWriteMasks[i] == StateTracker::INVALID_COLOR_MASK)
+			const auto& att = m_state.m_colorAtt[i];
+			if(att.m_writeMask == StateTracker::INVALID_COLOR_MASK)
 			{
 				cmdb.setColorChannelWriteMask(i, ColorBit::ALL);
 			}
 
-			if(m_state.m_blendSrcMethod[i] == BlendMethod::COUNT)
+			if(att.m_blendSrcFactor == BlendFactor::COUNT)
 			{
-				cmdb.setBlendMethods(i, BlendMethod::ONE, BlendMethod::ZERO);
+				cmdb.setBlendFactors(i, BlendFactor::ONE, BlendFactor::ZERO);
 			}
 
-			if(m_state.m_blendFuncs[i] == BlendFunction::COUNT)
+			if(att.m_blendOp == BlendOperation::COUNT)
 			{
-				cmdb.setBlendFunction(i, BlendFunction::ADD);
+				cmdb.setBlendOperation(i, BlendOperation::ADD);
 			}
 		}
 	}
@@ -286,30 +287,52 @@ void CommandBufferImpl::flushDrawcall(CommandBuffer& cmdb)
 	class BlendCmd final : public GlCommand
 	{
 	public:
-		Bool8 m_enable;
+		U8 m_enableMask;
+		U8 m_disableMask;
 
-		BlendCmd(Bool enable)
-			: m_enable(enable)
+		BlendCmd(U8 enableMask, U8 disableMask)
+			: m_enableMask(enableMask)
+			, m_disableMask(disableMask)
 		{
 		}
 
 		Error operator()(GlState&)
 		{
-			if(m_enable)
+			for(U i = 0; i < MAX_COLOR_ATTACHMENTS; ++i)
+			{
+				if(m_enableMask & (1 << i))
+				{
+					glEnablei(GL_BLEND, i);
+				}
+				else if(m_disableMask & (1 << i))
+				{
+					glDisablei(GL_BLEND, i);
+				}
+			}
+			return ErrorCode::NONE;
+		}
+	};
+
+	U8 blendEnableMask = 0;
+	U8 blendDisableMask = 0;
+	for(U i = 0; i < MAX_COLOR_ATTACHMENTS; ++i)
+	{
+		if(m_state.maybeEnableBlend(i))
+		{
+			if(m_state.m_colorAtt[i].m_enableBlend)
 			{
-				glEnable(GL_BLEND);
+				blendEnableMask = 1 << i;
 			}
 			else
 			{
-				glDisable(GL_BLEND);
+				blendDisableMask = 1 << i;
 			}
-			return ErrorCode::NONE;
 		}
-	};
+	}
 
-	if(m_state.maybeEnableBlend())
+	if(blendEnableMask || blendDisableMask)
 	{
-		pushBackNewCommand<BlendCmd>(m_state.m_enableBlend);
+		pushBackNewCommand<BlendCmd>(blendEnableMask, blendDisableMask);
 	}
 }
 

+ 20 - 20
src/anki/gr/gl/Common.cpp

@@ -188,67 +188,67 @@ void convertVertexFormat(const PixelFormat& fmt, U& compCount, GLenum& type, Boo
 	}
 }
 
-GLenum convertBlendMethod(BlendMethod in)
+GLenum convertBlendFactor(BlendFactor in)
 {
 	GLenum out;
 
 	switch(in)
 	{
-	case BlendMethod::ZERO:
+	case BlendFactor::ZERO:
 		out = GL_ZERO;
 		break;
-	case BlendMethod::ONE:
+	case BlendFactor::ONE:
 		out = GL_ONE;
 		break;
-	case BlendMethod::SRC_COLOR:
+	case BlendFactor::SRC_COLOR:
 		out = GL_SRC_COLOR;
 		break;
-	case BlendMethod::ONE_MINUS_SRC_COLOR:
+	case BlendFactor::ONE_MINUS_SRC_COLOR:
 		out = GL_ONE_MINUS_SRC_COLOR;
 		break;
-	case BlendMethod::DST_COLOR:
+	case BlendFactor::DST_COLOR:
 		out = GL_DST_COLOR;
 		break;
-	case BlendMethod::ONE_MINUS_DST_COLOR:
+	case BlendFactor::ONE_MINUS_DST_COLOR:
 		out = GL_ONE_MINUS_DST_COLOR;
 		break;
-	case BlendMethod::SRC_ALPHA:
+	case BlendFactor::SRC_ALPHA:
 		out = GL_SRC_ALPHA;
 		break;
-	case BlendMethod::ONE_MINUS_SRC_ALPHA:
+	case BlendFactor::ONE_MINUS_SRC_ALPHA:
 		out = GL_ONE_MINUS_SRC_ALPHA;
 		break;
-	case BlendMethod::DST_ALPHA:
+	case BlendFactor::DST_ALPHA:
 		out = GL_DST_ALPHA;
 		break;
-	case BlendMethod::ONE_MINUS_DST_ALPHA:
+	case BlendFactor::ONE_MINUS_DST_ALPHA:
 		out = GL_ONE_MINUS_DST_ALPHA;
 		break;
-	case BlendMethod::CONSTANT_COLOR:
+	case BlendFactor::CONSTANT_COLOR:
 		out = GL_CONSTANT_COLOR;
 		break;
-	case BlendMethod::ONE_MINUS_CONSTANT_COLOR:
+	case BlendFactor::ONE_MINUS_CONSTANT_COLOR:
 		out = GL_ONE_MINUS_CONSTANT_COLOR;
 		break;
-	case BlendMethod::CONSTANT_ALPHA:
+	case BlendFactor::CONSTANT_ALPHA:
 		out = GL_CONSTANT_ALPHA;
 		break;
-	case BlendMethod::ONE_MINUS_CONSTANT_ALPHA:
+	case BlendFactor::ONE_MINUS_CONSTANT_ALPHA:
 		out = GL_ONE_MINUS_CONSTANT_ALPHA;
 		break;
-	case BlendMethod::SRC_ALPHA_SATURATE:
+	case BlendFactor::SRC_ALPHA_SATURATE:
 		out = GL_SRC_ALPHA_SATURATE;
 		break;
-	case BlendMethod::SRC1_COLOR:
+	case BlendFactor::SRC1_COLOR:
 		out = GL_SRC1_COLOR;
 		break;
-	case BlendMethod::ONE_MINUS_SRC1_COLOR:
+	case BlendFactor::ONE_MINUS_SRC1_COLOR:
 		out = GL_ONE_MINUS_SRC1_COLOR;
 		break;
-	case BlendMethod::SRC1_ALPHA:
+	case BlendFactor::SRC1_ALPHA:
 		out = GL_SRC1_ALPHA;
 		break;
-	case BlendMethod::ONE_MINUS_SRC1_ALPHA:
+	case BlendFactor::ONE_MINUS_SRC1_ALPHA:
 		out = GL_ONE_MINUS_SRC1_ALPHA;
 		break;
 	default:

+ 10 - 10
src/anki/gr/gl/Common.h

@@ -40,13 +40,13 @@ GLenum convertCompareOperation(CompareOperation in);
 
 GLenum convertStencilOperation(StencilOperation in);
 
-inline GLenum convertFaceMode(FaceSelectionMask in)
+inline GLenum convertFaceMode(FaceSelectionBit in)
 {
-	if(in == FaceSelectionMask::FRONT)
+	if(in == FaceSelectionBit::FRONT)
 	{
 		return GL_FRONT;
 	}
-	else if(in == FaceSelectionMask::BACK)
+	else if(in == FaceSelectionBit::BACK)
 	{
 		return GL_BACK;
 	}
@@ -101,27 +101,27 @@ inline GLenum convertFillMode(FillMode mode)
 	return out;
 }
 
-GLenum convertBlendMethod(BlendMethod in);
+GLenum convertBlendFactor(BlendFactor in);
 
-inline GLenum convertBlendFunction(BlendFunction ak)
+inline GLenum convertBlendOperation(BlendOperation ak)
 {
 	GLenum out;
 
 	switch(ak)
 	{
-	case BlendFunction::ADD:
+	case BlendOperation::ADD:
 		out = GL_FUNC_ADD;
 		break;
-	case BlendFunction::SUBTRACT:
+	case BlendOperation::SUBTRACT:
 		out = GL_FUNC_SUBTRACT;
 		break;
-	case BlendFunction::REVERSE_SUBTRACT:
+	case BlendOperation::REVERSE_SUBTRACT:
 		out = GL_FUNC_REVERSE_SUBTRACT;
 		break;
-	case BlendFunction::MIN:
+	case BlendOperation::MIN:
 		out = GL_MIN;
 		break;
-	case BlendFunction::MAX:
+	case BlendOperation::MAX:
 		out = GL_MAX;
 		break;
 	default:

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

@@ -57,19 +57,19 @@ Error FramebufferImpl::init(const FramebufferInitInfo& init)
 		ANKI_ASSERT((tex.m_dsAspect & att.m_aspect) == att.m_aspect);
 
 		GLenum binding;
-		if(att.m_aspect == DepthStencilAspectMask::DEPTH)
+		if(att.m_aspect == DepthStencilAspectBit::DEPTH)
 		{
 			ANKI_ASSERT(tex.m_format == GL_DEPTH_COMPONENT || tex.m_format == GL_DEPTH_STENCIL);
 			binding = GL_DEPTH_ATTACHMENT;
 			m_dsAspect = att.m_aspect;
 		}
-		else if(att.m_aspect == DepthStencilAspectMask::STENCIL)
+		else if(att.m_aspect == DepthStencilAspectBit::STENCIL)
 		{
 			ANKI_ASSERT(tex.m_format == GL_STENCIL_INDEX || tex.m_format == GL_DEPTH_STENCIL);
 			binding = GL_STENCIL_ATTACHMENT;
 			m_dsAspect = att.m_aspect;
 		}
-		else if(att.m_aspect == DepthStencilAspectMask::DEPTH_STENCIL)
+		else if(att.m_aspect == DepthStencilAspectBit::DEPTH_STENCIL)
 		{
 			ANKI_ASSERT(tex.m_format == GL_DEPTH_STENCIL);
 			binding = GL_DEPTH_STENCIL_ATTACHMENT;
@@ -78,12 +78,12 @@ Error FramebufferImpl::init(const FramebufferInitInfo& init)
 		else if(tex.m_format == GL_DEPTH_COMPONENT)
 		{
 			binding = GL_DEPTH_ATTACHMENT;
-			m_dsAspect = DepthStencilAspectMask::DEPTH;
+			m_dsAspect = DepthStencilAspectBit::DEPTH;
 		}
 		else if(tex.m_format == GL_STENCIL_INDEX)
 		{
 			binding = GL_STENCIL_ATTACHMENT;
-			m_dsAspect = DepthStencilAspectMask::STENCIL;
+			m_dsAspect = DepthStencilAspectBit::STENCIL;
 		}
 		else
 		{
@@ -219,7 +219,7 @@ void FramebufferImpl::bind(const GlState& state)
 		}
 
 		// Clear depth
-		if(!!(m_dsAspect & DepthStencilAspectMask::DEPTH) && m_in.m_depthStencilAttachment.m_texture.isCreated()
+		if(!!(m_dsAspect & DepthStencilAspectBit::DEPTH) && m_in.m_depthStencilAttachment.m_texture.isCreated()
 			&& m_in.m_depthStencilAttachment.m_loadOperation == AttachmentLoadOperation::CLEAR)
 		{
 			// Enable write mask in case a pipeline changed it (else no clear will happen) and then restore state
@@ -237,7 +237,7 @@ void FramebufferImpl::bind(const GlState& state)
 		}
 
 		// Clear stencil
-		if(!!(m_dsAspect & DepthStencilAspectMask::STENCIL) && m_in.m_depthStencilAttachment.m_texture.isCreated()
+		if(!!(m_dsAspect & DepthStencilAspectBit::STENCIL) && m_in.m_depthStencilAttachment.m_texture.isCreated()
 			&& m_in.m_depthStencilAttachment.m_stencilLoadOperation == AttachmentLoadOperation::CLEAR)
 		{
 			// Enable write mask in case a pipeline changed it (else no clear will happen) and then restore state

+ 3 - 3
src/anki/gr/gl/FramebufferImpl.h

@@ -43,13 +43,13 @@ public:
 	Bool hasDepthBuffer() const
 	{
 		return m_in.m_depthStencilAttachment.m_texture.isCreated()
-			&& !!(m_in.m_depthStencilAttachment.m_aspect & DepthStencilAspectMask::DEPTH);
+			&& !!(m_in.m_depthStencilAttachment.m_aspect & DepthStencilAspectBit::DEPTH);
 	}
 
 	Bool hasStencilBuffer() const
 	{
 		return m_in.m_depthStencilAttachment.m_texture.isCreated()
-			&& !!(m_in.m_depthStencilAttachment.m_aspect & DepthStencilAspectMask::STENCIL);
+			&& !!(m_in.m_depthStencilAttachment.m_aspect & DepthStencilAspectBit::STENCIL);
 	}
 
 private:
@@ -59,7 +59,7 @@ private:
 	Array<GLenum, MAX_COLOR_ATTACHMENTS + 1> m_invalidateBuffers;
 	U8 m_invalidateBuffersCount = 0;
 	Bool8 m_bindDefault = false;
-	DepthStencilAspectMask m_dsAspect = DepthStencilAspectMask::NONE;
+	DepthStencilAspectBit m_dsAspect = DepthStencilAspectBit::NONE;
 
 	/// Attach a texture
 	static void attachTextureInternal(GLenum attachment, const TextureImpl& tex, const FramebufferAttachmentInfo& info);

+ 51 - 57
src/anki/gr/gl/StateTracker.h

@@ -152,9 +152,9 @@ public:
 		return false;
 	}
 
-	FaceSelectionMask m_cullMode = static_cast<FaceSelectionMask>(0);
+	FaceSelectionBit m_cullMode = static_cast<FaceSelectionBit>(0);
 
-	Bool setCullMode(FaceSelectionMask mode)
+	Bool setCullMode(FaceSelectionBit mode)
 	{
 		if(m_cullMode != mode)
 		{
@@ -203,13 +203,13 @@ public:
 	Array<StencilOperation, 2> m_stencilPassDepthFail = {{StencilOperation::COUNT, StencilOperation::COUNT}};
 	Array<StencilOperation, 2> m_stencilPassDepthPass = {{StencilOperation::COUNT, StencilOperation::COUNT}};
 
-	Bool setStencilOperations(FaceSelectionMask face,
+	Bool setStencilOperations(FaceSelectionBit face,
 		StencilOperation stencilFail,
 		StencilOperation stencilPassDepthFail,
 		StencilOperation stencilPassDepthPass)
 	{
 		Bool changed = false;
-		if(!!(face & FaceSelectionMask::FRONT)
+		if(!!(face & FaceSelectionBit::FRONT)
 			&& (m_stencilFail[0] != stencilFail || m_stencilPassDepthFail[0] != stencilPassDepthFail
 				   || m_stencilPassDepthPass[0] != stencilPassDepthPass))
 		{
@@ -219,7 +219,7 @@ public:
 			changed = true;
 		}
 
-		if(!!(face & FaceSelectionMask::BACK)
+		if(!!(face & FaceSelectionBit::BACK)
 			&& (m_stencilFail[1] != stencilFail || m_stencilPassDepthFail[1] != stencilPassDepthFail
 				   || m_stencilPassDepthPass[1] != stencilPassDepthPass))
 		{
@@ -235,15 +235,15 @@ public:
 	Array<Bool8, 2> m_glStencilFuncSeparateDirty = {{false, false}};
 	Array<CompareOperation, 2> m_stencilCompare = {{CompareOperation::COUNT, CompareOperation::COUNT}};
 
-	void setStencilCompareFunction(FaceSelectionMask face, CompareOperation comp)
+	void setStencilCompareOperation(FaceSelectionBit face, CompareOperation comp)
 	{
-		if(!!(face & FaceSelectionMask::FRONT) && m_stencilCompare[0] != comp)
+		if(!!(face & FaceSelectionBit::FRONT) && m_stencilCompare[0] != comp)
 		{
 			m_stencilCompare[0] = comp;
 			m_glStencilFuncSeparateDirty[0] = true;
 		}
 
-		if(!!(face & FaceSelectionMask::BACK) && m_stencilCompare[1] != comp)
+		if(!!(face & FaceSelectionBit::BACK) && m_stencilCompare[1] != comp)
 		{
 			m_stencilCompare[1] = comp;
 			m_glStencilFuncSeparateDirty[1] = true;
@@ -254,17 +254,17 @@ public:
 
 	Array<U32, 2> m_stencilCompareMask = {{DUMMY_STENCIL_MASK, DUMMY_STENCIL_MASK}};
 
-	void setStencilCompareMask(FaceSelectionMask face, U32 mask)
+	void setStencilCompareMask(FaceSelectionBit face, U32 mask)
 	{
 		ANKI_ASSERT(mask != DUMMY_STENCIL_MASK && "Oops");
 
-		if(!!(face & FaceSelectionMask::FRONT) && m_stencilCompareMask[0] != mask)
+		if(!!(face & FaceSelectionBit::FRONT) && m_stencilCompareMask[0] != mask)
 		{
 			m_stencilCompareMask[0] = mask;
 			m_glStencilFuncSeparateDirty[0] = true;
 		}
 
-		if(!!(face & FaceSelectionMask::BACK) && m_stencilCompareMask[1] != mask)
+		if(!!(face & FaceSelectionBit::BACK) && m_stencilCompareMask[1] != mask)
 		{
 			m_stencilCompareMask[1] = mask;
 			m_glStencilFuncSeparateDirty[1] = true;
@@ -273,18 +273,18 @@ public:
 
 	Array<U32, 2> m_stencilWriteMask = {{DUMMY_STENCIL_MASK, DUMMY_STENCIL_MASK}};
 
-	Bool setStencilWriteMask(FaceSelectionMask face, U32 mask)
+	Bool setStencilWriteMask(FaceSelectionBit face, U32 mask)
 	{
 		ANKI_ASSERT(mask != DUMMY_STENCIL_MASK && "Oops");
 
 		Bool changed = false;
-		if(!!(face & FaceSelectionMask::FRONT) && m_stencilWriteMask[0] != mask)
+		if(!!(face & FaceSelectionBit::FRONT) && m_stencilWriteMask[0] != mask)
 		{
 			m_stencilWriteMask[0] = mask;
 			changed = true;
 		}
 
-		if(!!(face & FaceSelectionMask::BACK) && m_stencilWriteMask[1] != mask)
+		if(!!(face & FaceSelectionBit::BACK) && m_stencilWriteMask[1] != mask)
 		{
 			m_stencilWriteMask[1] = mask;
 			changed = true;
@@ -295,17 +295,17 @@ public:
 
 	Array<U32, 2> m_stencilRef = {{DUMMY_STENCIL_MASK, DUMMY_STENCIL_MASK}};
 
-	void setStencilReference(FaceSelectionMask face, U32 mask)
+	void setStencilReference(FaceSelectionBit face, U32 mask)
 	{
 		ANKI_ASSERT(mask != DUMMY_STENCIL_MASK && "Oops");
 
-		if(!!(face & FaceSelectionMask::FRONT) && m_stencilRef[0] != mask)
+		if(!!(face & FaceSelectionBit::FRONT) && m_stencilRef[0] != mask)
 		{
 			m_stencilRef[0] = mask;
 			m_glStencilFuncSeparateDirty[0] = true;
 		}
 
-		if(!!(face & FaceSelectionMask::BACK) && m_stencilRef[1] != mask)
+		if(!!(face & FaceSelectionBit::BACK) && m_stencilRef[1] != mask)
 		{
 			m_stencilRef[1] = mask;
 			m_glStencilFuncSeparateDirty[1] = true;
@@ -342,7 +342,7 @@ public:
 
 	CompareOperation m_depthOp = CompareOperation::COUNT;
 
-	Bool setDepthCompareFunction(CompareOperation op)
+	Bool setDepthCompareOperation(CompareOperation op)
 	{
 		if(op != m_depthOp)
 		{
@@ -356,69 +356,63 @@ public:
 	/// @name color
 	/// @{
 	static const ColorBit INVALID_COLOR_MASK = static_cast<ColorBit>(MAX_U8);
-	Array<ColorBit, MAX_COLOR_ATTACHMENTS> m_colorWriteMasks = {
-		{INVALID_COLOR_MASK, INVALID_COLOR_MASK, INVALID_COLOR_MASK, INVALID_COLOR_MASK}};
+
+	class ColorAttachment
+	{
+	public:
+		ColorBit m_writeMask = INVALID_COLOR_MASK;
+		Bool8 m_enableBlend = 2;
+		BlendFactor m_blendSrcFactor = BlendFactor::COUNT;
+		BlendFactor m_blendDstFactor = BlendFactor::COUNT;
+		BlendOperation m_blendOp = BlendOperation::COUNT;
+	};
+
+	Array<ColorAttachment, MAX_COLOR_ATTACHMENTS> m_colorAtt;
 
 	Bool setColorChannelWriteMask(U32 attachment, ColorBit mask)
 	{
-		if(m_colorWriteMasks[attachment] != mask)
+		if(m_colorAtt[attachment].m_writeMask != mask)
 		{
-			m_colorWriteMasks[attachment] = mask;
+			m_colorAtt[attachment].m_writeMask = mask;
 			return true;
 		}
 		return false;
 	}
 
-	Bool8 m_enableBlend = 2;
-
-	Bool maybeEnableBlend()
+	Bool maybeEnableBlend(U attidx)
 	{
-		Bool enable = false;
+		auto& att = m_colorAtt[attidx];
 
-		for(U i = 0; i < m_fb->getColorBufferCount(); ++i)
-		{
-			if(!!(m_colorWriteMasks[i]) && (m_enableBlendMask & (1 << i)))
-			{
-				enable = true;
-			}
-		}
+		Bool wantBlend = !(att.m_blendSrcFactor == BlendFactor::ONE && att.m_blendDstFactor == BlendFactor::ZERO)
+			&& (att.m_blendOp == BlendOperation::ADD || att.m_blendOp == BlendOperation::SUBTRACT);
 
-		if(enable != m_enableBlend)
+		if(wantBlend != att.m_enableBlend)
 		{
-			m_enableBlend = enable;
+			att.m_enableBlend = wantBlend;
 			return true;
 		}
 		return false;
 	}
 
-	Array<BlendMethod, MAX_COLOR_ATTACHMENTS> m_blendSrcMethod = {
-		{BlendMethod::COUNT, BlendMethod::COUNT, BlendMethod::COUNT, BlendMethod::COUNT}};
-	Array<BlendMethod, MAX_COLOR_ATTACHMENTS> m_blendDstMethod = {
-		{BlendMethod::COUNT, BlendMethod::COUNT, BlendMethod::COUNT, BlendMethod::COUNT}};
-
-	U8 m_enableBlendMask = 0; ///< Per attachment
-
-	Bool setBlendMethods(U32 attachment, BlendMethod src, BlendMethod dst)
+	Bool setBlendFactors(U32 attachment, BlendFactor src, BlendFactor dst)
 	{
-		if(m_blendSrcMethod[attachment] != src || m_blendDstMethod[attachment] != dst)
+		auto& att = m_colorAtt[attachment];
+		if(att.m_blendSrcFactor != src || att.m_blendDstFactor != dst)
 		{
-			m_blendSrcMethod[attachment] = src;
-			m_blendDstMethod[attachment] = dst;
-			Bool wantBlend = !(src == BlendMethod::ONE && dst == BlendMethod::ZERO);
-			m_enableBlendMask |= (wantBlend) ? (1 << attachment) : 0;
+			att.m_blendSrcFactor = src;
+			att.m_blendDstFactor = dst;
 			return true;
 		}
 		return false;
 	}
 
-	Array<BlendFunction, MAX_COLOR_ATTACHMENTS> m_blendFuncs = {
-		{BlendFunction::COUNT, BlendFunction::COUNT, BlendFunction::COUNT, BlendFunction::COUNT}};
-
-	Bool setBlendFunction(U32 attachment, BlendFunction func)
+	Bool setBlendOperation(U32 attachment, BlendOperation func)
 	{
-		if(m_blendFuncs[attachment] != func)
+		auto& att = m_colorAtt[attachment];
+
+		if(att.m_blendOp != func)
 		{
-			m_blendFuncs[attachment] = func;
+			att.m_blendOp = func;
 			return true;
 		}
 		return false;
@@ -432,13 +426,13 @@ public:
 	public:
 		TextureImpl* m_tex = nullptr;
 		SamplerImpl* m_sampler = reinterpret_cast<SamplerImpl*>(0x1);
-		DepthStencilAspectMask m_aspect;
+		DepthStencilAspectBit m_aspect;
 	};
 
 	Array2d<TextureBinding, MAX_BOUND_RESOURCE_GROUPS, MAX_TEXTURE_BINDINGS> m_textures;
 
 	Bool bindTexture(
-		U32 set, U32 binding, TexturePtr tex, DepthStencilAspectMask aspect, Bool& texChanged, Bool& samplerChanged)
+		U32 set, U32 binding, TexturePtr tex, DepthStencilAspectBit aspect, Bool& texChanged, Bool& samplerChanged)
 	{
 		TextureBinding& b = m_textures[set][binding];
 		TextureImpl* texi = tex->m_impl.get();
@@ -462,7 +456,7 @@ public:
 		return samplerChanged || texChanged;
 	}
 
-	Bool bindTextureAndSampler(U32 set, U32 binding, TexturePtr tex, SamplerPtr sampler, DepthStencilAspectMask aspect)
+	Bool bindTextureAndSampler(U32 set, U32 binding, TexturePtr tex, SamplerPtr sampler, DepthStencilAspectBit aspect)
 	{
 		TextureBinding& b = m_textures[set][binding];
 		b.m_tex = tex->m_impl.get();

+ 8 - 8
src/anki/gr/gl/TextureImpl.cpp

@@ -49,7 +49,7 @@ static void convertTextureInformation(const PixelFormat& pf,
 	GLenum& format,
 	GLenum& internalFormat,
 	GLenum& type,
-	DepthStencilAspectMask& dsAspect)
+	DepthStencilAspectBit& dsAspect)
 {
 	compressed =
 		pf.m_components >= ComponentFormat::FIRST_COMPRESSED && pf.m_components <= ComponentFormat::LAST_COMPRESSED;
@@ -239,19 +239,19 @@ static void convertTextureInformation(const PixelFormat& pf,
 		format = GL_DEPTH_STENCIL;
 		internalFormat = GL_DEPTH24_STENCIL8;
 		type = GL_UNSIGNED_INT;
-		dsAspect = DepthStencilAspectMask::DEPTH_STENCIL;
+		dsAspect = DepthStencilAspectBit::DEPTH_STENCIL;
 		break;
 	case ComponentFormat::D16:
 		format = GL_DEPTH_COMPONENT;
 		internalFormat = GL_DEPTH_COMPONENT16;
 		type = GL_UNSIGNED_SHORT;
-		dsAspect = DepthStencilAspectMask::DEPTH;
+		dsAspect = DepthStencilAspectBit::DEPTH;
 		break;
 	case ComponentFormat::S8:
 		format = GL_STENCIL_INDEX;
 		internalFormat = GL_STENCIL_INDEX8;
 		type = GL_BYTE;
-		dsAspect = DepthStencilAspectMask::STENCIL;
+		dsAspect = DepthStencilAspectBit::STENCIL;
 		break;
 	default:
 		ANKI_ASSERT(0);
@@ -629,7 +629,7 @@ void TextureImpl::copy(const TextureImpl& src,
 		1);
 }
 
-void TextureImpl::clear(const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectMask aspect)
+void TextureImpl::clear(const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectBit aspect)
 {
 	ANKI_ASSERT(isCreated());
 	ANKI_ASSERT(surf.m_level < m_mipsCount);
@@ -637,17 +637,17 @@ void TextureImpl::clear(const TextureSurfaceInfo& surf, const ClearValue& clearV
 
 	// Find the aspect to clear
 	GLenum format;
-	if(aspect == DepthStencilAspectMask::DEPTH)
+	if(aspect == DepthStencilAspectBit::DEPTH)
 	{
 		ANKI_ASSERT(m_format == GL_DEPTH_COMPONENT || m_format == GL_DEPTH_STENCIL);
 		format = GL_DEPTH_COMPONENT;
 	}
-	else if(aspect == DepthStencilAspectMask::STENCIL)
+	else if(aspect == DepthStencilAspectBit::STENCIL)
 	{
 		ANKI_ASSERT(m_format == GL_STENCIL_INDEX || m_format == GL_DEPTH_STENCIL);
 		format = GL_STENCIL_INDEX;
 	}
-	else if(aspect == DepthStencilAspectMask::DEPTH_STENCIL)
+	else if(aspect == DepthStencilAspectBit::DEPTH_STENCIL)
 	{
 		ANKI_ASSERT(m_format == GL_DEPTH_STENCIL);
 		format = GL_DEPTH_STENCIL;

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

@@ -34,7 +34,7 @@ public:
 	Bool8 m_compressed = false;
 	PixelFormat m_pformat;
 	DynamicArray<GLuint> m_texViews; ///< Temp views for gen mips.
-	DepthStencilAspectMask m_dsAspect = DepthStencilAspectMask::NONE;
+	DepthStencilAspectBit m_dsAspect = DepthStencilAspectBit::NONE;
 
 	TextureImpl(GrManager* manager)
 		: GlObject(manager)
@@ -77,7 +77,7 @@ public:
 
 	void bind();
 
-	void clear(const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectMask aspect);
+	void clear(const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectBit aspect);
 
 	U computeSurfaceIdx(const TextureSurfaceInfo& surf) const;
 };

+ 5 - 5
src/anki/gr/vulkan/CommandBuffer.cpp

@@ -137,13 +137,13 @@ void CommandBuffer::copyTextureVolumeToTextureVolume(
 }
 
 void CommandBuffer::clearTextureSurface(
-	TexturePtr tex, const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectMask aspect)
+	TexturePtr tex, const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectBit aspect)
 {
 	m_impl->clearTextureSurface(tex, surf, clearValue, aspect);
 }
 
 void CommandBuffer::clearTextureVolume(
-	TexturePtr tex, const TextureVolumeInfo& vol, const ClearValue& clearValue, DepthStencilAspectMask aspect)
+	TexturePtr tex, const TextureVolumeInfo& vol, const ClearValue& clearValue, DepthStencilAspectBit aspect)
 {
 	m_impl->clearTextureVolume(tex, vol, clearValue, aspect);
 }
@@ -217,17 +217,17 @@ void CommandBuffer::writeOcclusionQueryResultToBuffer(OcclusionQueryPtr query, P
 	m_impl->writeOcclusionQueryResultToBuffer(query, offset, buff);
 }
 
-void CommandBuffer::setStencilCompareMask(FaceSelectionMask face, U32 mask)
+void CommandBuffer::setStencilCompareMask(FaceSelectionBit face, U32 mask)
 {
 	m_impl->setStencilCompareMask(face, mask);
 }
 
-void CommandBuffer::setStencilWriteMask(FaceSelectionMask face, U32 mask)
+void CommandBuffer::setStencilWriteMask(FaceSelectionBit face, U32 mask)
 {
 	m_impl->setStencilWriteMask(face, mask);
 }
 
-void CommandBuffer::setStencilReference(FaceSelectionMask face, U32 ref)
+void CommandBuffer::setStencilReference(FaceSelectionBit face, U32 ref)
 {
 	m_impl->setStencilReference(face, ref);
 }

+ 5 - 5
src/anki/gr/vulkan/CommandBufferImpl.h

@@ -66,11 +66,11 @@ public:
 
 	void setPolygonOffset(F32 factor, F32 units);
 
-	void setStencilCompareMask(FaceSelectionMask face, U32 mask);
+	void setStencilCompareMask(FaceSelectionBit face, U32 mask);
 
-	void setStencilWriteMask(FaceSelectionMask face, U32 mask);
+	void setStencilWriteMask(FaceSelectionBit face, U32 mask);
 
-	void setStencilReference(FaceSelectionMask face, U32 ref);
+	void setStencilReference(FaceSelectionBit face, U32 ref);
 
 	void bindPipeline(PipelinePtr ppline);
 
@@ -103,10 +103,10 @@ public:
 	void generateMipmaps2d(TexturePtr tex, U face, U layer);
 
 	void clearTextureSurface(
-		TexturePtr tex, const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectMask aspect);
+		TexturePtr tex, const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectBit aspect);
 
 	void clearTextureVolume(
-		TexturePtr tex, const TextureVolumeInfo& volume, const ClearValue& clearValue, DepthStencilAspectMask aspect);
+		TexturePtr tex, const TextureVolumeInfo& volume, const ClearValue& clearValue, DepthStencilAspectBit aspect);
 
 	void uploadBuffer(BufferPtr buff, PtrSize offset, const TransientMemoryToken& token);
 

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

@@ -68,19 +68,19 @@ inline void CommandBufferImpl::setPolygonOffset(F32 factor, F32 units)
 	}
 }
 
-inline void CommandBufferImpl::setStencilCompareMask(FaceSelectionMask face, U32 mask)
+inline void CommandBufferImpl::setStencilCompareMask(FaceSelectionBit face, U32 mask)
 {
 	commandCommon();
 
 	VkStencilFaceFlags flags = 0;
 
-	if(!!(face & FaceSelectionMask::FRONT) && m_stencilCompareMasks[0] != mask)
+	if(!!(face & FaceSelectionBit::FRONT) && m_stencilCompareMasks[0] != mask)
 	{
 		m_stencilCompareMasks[0] = mask;
 		flags = VK_STENCIL_FACE_FRONT_BIT;
 	}
 
-	if(!!(face & FaceSelectionMask::BACK) && m_stencilCompareMasks[1] != mask)
+	if(!!(face & FaceSelectionBit::BACK) && m_stencilCompareMasks[1] != mask)
 	{
 		m_stencilCompareMasks[1] = mask;
 		flags |= VK_STENCIL_FACE_BACK_BIT;
@@ -92,19 +92,19 @@ inline void CommandBufferImpl::setStencilCompareMask(FaceSelectionMask face, U32
 	}
 }
 
-inline void CommandBufferImpl::setStencilWriteMask(FaceSelectionMask face, U32 mask)
+inline void CommandBufferImpl::setStencilWriteMask(FaceSelectionBit face, U32 mask)
 {
 	commandCommon();
 
 	VkStencilFaceFlags flags = 0;
 
-	if(!!(face & FaceSelectionMask::FRONT) && m_stencilWriteMasks[0] != mask)
+	if(!!(face & FaceSelectionBit::FRONT) && m_stencilWriteMasks[0] != mask)
 	{
 		m_stencilWriteMasks[0] = mask;
 		flags = VK_STENCIL_FACE_FRONT_BIT;
 	}
 
-	if(!!(face & FaceSelectionMask::BACK) && m_stencilWriteMasks[1] != mask)
+	if(!!(face & FaceSelectionBit::BACK) && m_stencilWriteMasks[1] != mask)
 	{
 		m_stencilWriteMasks[1] = mask;
 		flags |= VK_STENCIL_FACE_BACK_BIT;
@@ -116,19 +116,19 @@ inline void CommandBufferImpl::setStencilWriteMask(FaceSelectionMask face, U32 m
 	}
 }
 
-inline void CommandBufferImpl::setStencilReference(FaceSelectionMask face, U32 ref)
+inline void CommandBufferImpl::setStencilReference(FaceSelectionBit face, U32 ref)
 {
 	commandCommon();
 
 	VkStencilFaceFlags flags = 0;
 
-	if(!!(face & FaceSelectionMask::FRONT) && m_stencilReferenceMasks[0] != ref)
+	if(!!(face & FaceSelectionBit::FRONT) && m_stencilReferenceMasks[0] != ref)
 	{
 		m_stencilReferenceMasks[0] = ref;
 		flags = VK_STENCIL_FACE_FRONT_BIT;
 	}
 
-	if(!!(face & FaceSelectionMask::BACK) && m_stencilReferenceMasks[1] != ref)
+	if(!!(face & FaceSelectionBit::BACK) && m_stencilReferenceMasks[1] != ref)
 	{
 		m_stencilWriteMasks[1] = ref;
 		flags |= VK_STENCIL_FACE_BACK_BIT;
@@ -427,7 +427,7 @@ inline void CommandBufferImpl::clearTextureInternal(
 }
 
 inline void CommandBufferImpl::clearTextureSurface(
-	TexturePtr tex, const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectMask aspect)
+	TexturePtr tex, const TextureSurfaceInfo& surf, const ClearValue& clearValue, DepthStencilAspectBit aspect)
 {
 	const TextureImpl& impl = *tex->m_impl;
 	ANKI_ASSERT(impl.m_type != TextureType::_3D && "Not for 3D");
@@ -438,7 +438,7 @@ inline void CommandBufferImpl::clearTextureSurface(
 }
 
 inline void CommandBufferImpl::clearTextureVolume(
-	TexturePtr tex, const TextureVolumeInfo& vol, const ClearValue& clearValue, DepthStencilAspectMask aspect)
+	TexturePtr tex, const TextureVolumeInfo& vol, const ClearValue& clearValue, DepthStencilAspectBit aspect)
 {
 	const TextureImpl& impl = *tex->m_impl;
 	ANKI_ASSERT(impl.m_type == TextureType::_3D && "Only for 3D");

+ 30 - 30
src/anki/gr/vulkan/Common.cpp

@@ -346,18 +346,18 @@ VkPolygonMode convertFillMode(FillMode ak)
 	return out;
 }
 
-VkCullModeFlags convertCullMode(FaceSelectionMask ak)
+VkCullModeFlags convertCullMode(FaceSelectionBit ak)
 {
 	VkCullModeFlags out = 0;
 	switch(ak)
 	{
-	case FaceSelectionMask::FRONT:
+	case FaceSelectionBit::FRONT:
 		out = VK_CULL_MODE_FRONT_BIT;
 		break;
-	case FaceSelectionMask::BACK:
+	case FaceSelectionBit::BACK:
 		out = VK_CULL_MODE_BACK_BIT;
 		break;
-	case FaceSelectionMask::FRONT_AND_BACK:
+	case FaceSelectionBit::FRONT_AND_BACK:
 		out = VK_CULL_MODE_FRONT_BIT | VK_CULL_MODE_BACK_BIT;
 		break;
 	default:
@@ -367,66 +367,66 @@ VkCullModeFlags convertCullMode(FaceSelectionMask ak)
 	return out;
 }
 
-VkBlendFactor convertBlendMethod(BlendMethod ak)
+VkBlendFactor convertBlendFactor(BlendFactor ak)
 {
 	VkBlendFactor out = VK_BLEND_FACTOR_MAX_ENUM;
 	switch(ak)
 	{
-	case BlendMethod::ZERO:
+	case BlendFactor::ZERO:
 		out = VK_BLEND_FACTOR_ZERO;
 		break;
-	case BlendMethod::ONE:
+	case BlendFactor::ONE:
 		out = VK_BLEND_FACTOR_ONE;
 		break;
-	case BlendMethod::SRC_COLOR:
+	case BlendFactor::SRC_COLOR:
 		out = VK_BLEND_FACTOR_SRC_COLOR;
 		break;
-	case BlendMethod::ONE_MINUS_SRC_COLOR:
+	case BlendFactor::ONE_MINUS_SRC_COLOR:
 		out = VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR;
 		break;
-	case BlendMethod::DST_COLOR:
+	case BlendFactor::DST_COLOR:
 		out = VK_BLEND_FACTOR_DST_COLOR;
 		break;
-	case BlendMethod::ONE_MINUS_DST_COLOR:
+	case BlendFactor::ONE_MINUS_DST_COLOR:
 		out = VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR;
 		break;
-	case BlendMethod::SRC_ALPHA:
+	case BlendFactor::SRC_ALPHA:
 		out = VK_BLEND_FACTOR_SRC_ALPHA;
 		break;
-	case BlendMethod::ONE_MINUS_SRC_ALPHA:
+	case BlendFactor::ONE_MINUS_SRC_ALPHA:
 		out = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
 		break;
-	case BlendMethod::DST_ALPHA:
+	case BlendFactor::DST_ALPHA:
 		out = VK_BLEND_FACTOR_DST_ALPHA;
 		break;
-	case BlendMethod::ONE_MINUS_DST_ALPHA:
+	case BlendFactor::ONE_MINUS_DST_ALPHA:
 		out = VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA;
 		break;
-	case BlendMethod::CONSTANT_COLOR:
+	case BlendFactor::CONSTANT_COLOR:
 		out = VK_BLEND_FACTOR_CONSTANT_COLOR;
 		break;
-	case BlendMethod::ONE_MINUS_CONSTANT_COLOR:
+	case BlendFactor::ONE_MINUS_CONSTANT_COLOR:
 		out = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR;
 		break;
-	case BlendMethod::CONSTANT_ALPHA:
+	case BlendFactor::CONSTANT_ALPHA:
 		out = VK_BLEND_FACTOR_CONSTANT_ALPHA;
 		break;
-	case BlendMethod::ONE_MINUS_CONSTANT_ALPHA:
+	case BlendFactor::ONE_MINUS_CONSTANT_ALPHA:
 		out = VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA;
 		break;
-	case BlendMethod::SRC_ALPHA_SATURATE:
+	case BlendFactor::SRC_ALPHA_SATURATE:
 		out = VK_BLEND_FACTOR_SRC_ALPHA_SATURATE;
 		break;
-	case BlendMethod::SRC1_COLOR:
+	case BlendFactor::SRC1_COLOR:
 		out = VK_BLEND_FACTOR_SRC1_COLOR;
 		break;
-	case BlendMethod::ONE_MINUS_SRC1_COLOR:
+	case BlendFactor::ONE_MINUS_SRC1_COLOR:
 		out = VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR;
 		break;
-	case BlendMethod::SRC1_ALPHA:
+	case BlendFactor::SRC1_ALPHA:
 		out = VK_BLEND_FACTOR_SRC1_ALPHA;
 		break;
-	case BlendMethod::ONE_MINUS_SRC1_ALPHA:
+	case BlendFactor::ONE_MINUS_SRC1_ALPHA:
 		out = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA;
 		break;
 	default:
@@ -436,25 +436,25 @@ VkBlendFactor convertBlendMethod(BlendMethod ak)
 	return out;
 }
 
-VkBlendOp convertBlendFunc(BlendFunction ak)
+VkBlendOp convertBlendFunc(BlendOperation ak)
 {
 	VkBlendOp out = VK_BLEND_OP_MAX_ENUM;
 
 	switch(ak)
 	{
-	case BlendFunction::ADD:
+	case BlendOperation::ADD:
 		out = VK_BLEND_OP_ADD;
 		break;
-	case BlendFunction::SUBTRACT:
+	case BlendOperation::SUBTRACT:
 		out = VK_BLEND_OP_SUBTRACT;
 		break;
-	case BlendFunction::REVERSE_SUBTRACT:
+	case BlendOperation::REVERSE_SUBTRACT:
 		out = VK_BLEND_OP_REVERSE_SUBTRACT;
 		break;
-	case BlendFunction::MIN:
+	case BlendOperation::MIN:
 		out = VK_BLEND_OP_MIN;
 		break;
-	case BlendFunction::MAX:
+	case BlendOperation::MAX:
 		out = VK_BLEND_OP_MAX;
 		break;
 	default:

+ 3 - 3
src/anki/gr/vulkan/Common.h

@@ -77,13 +77,13 @@ ANKI_USE_RESULT VkPrimitiveTopology convertTopology(PrimitiveTopology ak);
 ANKI_USE_RESULT VkPolygonMode convertFillMode(FillMode ak);
 
 /// Convert cull mode.
-ANKI_USE_RESULT VkCullModeFlags convertCullMode(FaceSelectionMask ak);
+ANKI_USE_RESULT VkCullModeFlags convertCullMode(FaceSelectionBit ak);
 
 /// Convert blend method.
-ANKI_USE_RESULT VkBlendFactor convertBlendMethod(BlendMethod ak);
+ANKI_USE_RESULT VkBlendFactor convertBlendFactor(BlendFactor ak);
 
 /// Convert blend function.
-ANKI_USE_RESULT VkBlendOp convertBlendFunc(BlendFunction ak);
+ANKI_USE_RESULT VkBlendOp convertBlendFunc(BlendOperation ak);
 
 /// Convert color write mask.
 inline ANKI_USE_RESULT VkColorComponentFlags convertColorWriteMask(ColorBit ak)

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

@@ -87,10 +87,10 @@ Bool FramebufferImpl::initInfoValid(const FramebufferInitInfo& inf)
 	if(inf.m_depthStencilAttachment.m_texture)
 	{
 		const TextureImpl& impl = *inf.m_depthStencilAttachment.m_texture->m_impl;
-		if(impl.m_akAspect == DepthStencilAspectMask::DEPTH_STENCIL
+		if(impl.m_akAspect == DepthStencilAspectBit::DEPTH_STENCIL
 			&& !(impl.m_workarounds & TextureImplWorkaround::S8_TO_D24S8))
 		{
-			if(inf.m_depthStencilAttachment.m_aspect == DepthStencilAspectMask::NONE)
+			if(inf.m_depthStencilAttachment.m_aspect == DepthStencilAspectBit::NONE)
 			{
 				return false;
 			}
@@ -232,10 +232,10 @@ Error FramebufferImpl::initFramebuffer(const FramebufferInitInfo& init)
 			const FramebufferAttachmentInfo& att = init.m_depthStencilAttachment;
 			TextureImpl& tex = *att.m_texture->m_impl;
 
-			DepthStencilAspectMask aspect;
+			DepthStencilAspectBit aspect;
 			if(!!(tex.m_workarounds & TextureImplWorkaround::S8_TO_D24S8))
 			{
-				aspect = DepthStencilAspectMask::STENCIL;
+				aspect = DepthStencilAspectBit::STENCIL;
 			}
 			else
 			{

+ 3 - 3
src/anki/gr/vulkan/PipelineImpl.cpp

@@ -268,9 +268,9 @@ VkPipelineColorBlendStateCreateInfo* PipelineImpl::initColorState(
 		VkPipelineColorBlendAttachmentState& out = const_cast<VkPipelineColorBlendAttachmentState&>(ci.pAttachments[i]);
 		const ColorAttachmentStateInfo& in = c.m_attachments[i];
 
-		out.blendEnable = !(in.m_srcBlendMethod == BlendMethod::ONE && in.m_dstBlendMethod == BlendMethod::ZERO);
-		out.srcColorBlendFactor = convertBlendMethod(in.m_srcBlendMethod);
-		out.dstColorBlendFactor = convertBlendMethod(in.m_dstBlendMethod);
+		out.blendEnable = !(in.m_srcBlendFactor == BlendFactor::ONE && in.m_dstBlendFactor == BlendFactor::ZERO);
+		out.srcColorBlendFactor = convertBlendFactor(in.m_srcBlendFactor);
+		out.dstColorBlendFactor = convertBlendFactor(in.m_dstBlendFactor);
 		out.colorBlendOp = convertBlendFunc(in.m_blendFunction);
 		out.srcAlphaBlendFactor = out.srcColorBlendFactor;
 		out.dstAlphaBlendFactor = out.dstColorBlendFactor;

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

@@ -140,11 +140,11 @@ Error TextureImpl::init(const TextureInitInfo& init_, Texture* tex)
 
 	if(m_aspect & VK_IMAGE_ASPECT_DEPTH_BIT)
 	{
-		m_akAspect |= DepthStencilAspectMask::DEPTH;
+		m_akAspect |= DepthStencilAspectBit::DEPTH;
 	}
 	if(m_aspect & VK_IMAGE_ASPECT_STENCIL_BIT)
 	{
-		m_akAspect |= DepthStencilAspectMask::STENCIL;
+		m_akAspect |= DepthStencilAspectBit::STENCIL;
 	}
 
 	ANKI_CHECK(initImage(init));
@@ -226,7 +226,7 @@ Error TextureImpl::initImage(const TextureInitInfo& init_)
 			m_vkFormat = convertFormat(m_format);
 			m_workarounds = TextureImplWorkaround::S8_TO_D24S8;
 			m_aspect = VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
-			m_akAspect = DepthStencilAspectMask::DEPTH | DepthStencilAspectMask::STENCIL;
+			m_akAspect = DepthStencilAspectBit::DEPTH | DepthStencilAspectBit::STENCIL;
 		}
 		else if(init.m_format.m_components == ComponentFormat::D24S8)
 		{
@@ -237,7 +237,7 @@ Error TextureImpl::initImage(const TextureInitInfo& init_)
 			m_vkFormat = convertFormat(m_format);
 			m_workarounds = TextureImplWorkaround::D24S8_TO_D32S8;
 			m_aspect = VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
-			m_akAspect = DepthStencilAspectMask::DEPTH | DepthStencilAspectMask::STENCIL;
+			m_akAspect = DepthStencilAspectBit::DEPTH | DepthStencilAspectBit::STENCIL;
 		}
 		else
 		{
@@ -612,7 +612,7 @@ VkImageLayout TextureImpl::computeLayout(TextureUsageBit usage, U level) const
 	return out;
 }
 
-VkImageView TextureImpl::getOrCreateSingleSurfaceView(const TextureSurfaceInfo& surf, DepthStencilAspectMask aspect)
+VkImageView TextureImpl::getOrCreateSingleSurfaceView(const TextureSurfaceInfo& surf, DepthStencilAspectBit aspect)
 {
 	checkSurface(surf);
 
@@ -623,7 +623,7 @@ VkImageView TextureImpl::getOrCreateSingleSurfaceView(const TextureSurfaceInfo&
 	return getOrCreateView(ci);
 }
 
-VkImageView TextureImpl::getOrCreateSingleLevelView(U level, DepthStencilAspectMask aspect)
+VkImageView TextureImpl::getOrCreateSingleLevelView(U level, DepthStencilAspectBit aspect)
 {
 	ANKI_ASSERT(level < m_mipCount);
 
@@ -635,7 +635,7 @@ VkImageView TextureImpl::getOrCreateSingleLevelView(U level, DepthStencilAspectM
 	return getOrCreateView(ci);
 }
 
-VkImageView TextureImpl::getOrCreateResourceGroupView(DepthStencilAspectMask aspect)
+VkImageView TextureImpl::getOrCreateResourceGroupView(DepthStencilAspectBit aspect)
 {
 	VkImageViewCreateInfo ci = m_viewCreateInfoTemplate;
 	ci.subresourceRange.aspectMask = convertAspect(aspect);

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

@@ -43,7 +43,7 @@ public:
 	U8 m_mipCount = 0;
 	U32 m_layerCount = 0;
 	VkImageAspectFlags m_aspect = 0;
-	DepthStencilAspectMask m_akAspect = DepthStencilAspectMask::NONE;
+	DepthStencilAspectBit m_akAspect = DepthStencilAspectBit::NONE;
 	TextureUsageBit m_usage = TextureUsageBit::NONE;
 	PixelFormat m_format;
 	VkFormat m_vkFormat = VK_FORMAT_UNDEFINED;
@@ -69,10 +69,10 @@ public:
 	}
 
 	void computeSubResourceRange(
-		const TextureSurfaceInfo& surf, DepthStencilAspectMask aspect, VkImageSubresourceRange& range) const;
+		const TextureSurfaceInfo& surf, DepthStencilAspectBit aspect, VkImageSubresourceRange& range) const;
 
 	void computeSubResourceRange(
-		const TextureVolumeInfo& vol, DepthStencilAspectMask aspect, VkImageSubresourceRange& range) const;
+		const TextureVolumeInfo& vol, DepthStencilAspectBit aspect, VkImageSubresourceRange& range) const;
 
 	/// Compute the layer as defined by Vulkan.
 	U computeVkArrayLayer(const TextureSurfaceInfo& surf) const;
@@ -87,12 +87,12 @@ public:
 		return (usage & m_usage) == usage;
 	}
 
-	VkImageView getOrCreateSingleSurfaceView(const TextureSurfaceInfo& surf, DepthStencilAspectMask aspect);
+	VkImageView getOrCreateSingleSurfaceView(const TextureSurfaceInfo& surf, DepthStencilAspectBit aspect);
 
-	VkImageView getOrCreateSingleLevelView(U level, DepthStencilAspectMask aspect);
+	VkImageView getOrCreateSingleLevelView(U level, DepthStencilAspectBit aspect);
 
 	/// That view will be used in descriptor sets.
-	VkImageView getOrCreateResourceGroupView(DepthStencilAspectMask aspect);
+	VkImageView getOrCreateResourceGroupView(DepthStencilAspectBit aspect);
 
 	/// By knowing the previous and new texture usage calculate the relavant info for a ppline barrier.
 	void computeBarrierInfo(TextureUsageBit before,
@@ -106,7 +106,7 @@ public:
 	/// Predict the image layout.
 	VkImageLayout computeLayout(TextureUsageBit usage, U level) const;
 
-	VkImageAspectFlags convertAspect(DepthStencilAspectMask ak) const;
+	VkImageAspectFlags convertAspect(DepthStencilAspectBit ak) const;
 
 private:
 	class ViewHasher

+ 5 - 5
src/anki/gr/vulkan/TextureImpl.inl.h

@@ -8,13 +8,13 @@
 namespace anki
 {
 
-inline VkImageAspectFlags TextureImpl::convertAspect(DepthStencilAspectMask ak) const
+inline VkImageAspectFlags TextureImpl::convertAspect(DepthStencilAspectBit ak) const
 {
 	VkImageAspectFlags out = 0;
 	if(m_aspect == (VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_DEPTH_BIT))
 	{
-		out = !!(ak & DepthStencilAspectMask::DEPTH) ? VK_IMAGE_ASPECT_DEPTH_BIT : 0;
-		out |= !!(ak & DepthStencilAspectMask::STENCIL) ? VK_IMAGE_ASPECT_STENCIL_BIT : 0;
+		out = !!(ak & DepthStencilAspectBit::DEPTH) ? VK_IMAGE_ASPECT_DEPTH_BIT : 0;
+		out |= !!(ak & DepthStencilAspectBit::STENCIL) ? VK_IMAGE_ASPECT_STENCIL_BIT : 0;
 	}
 	else
 	{
@@ -27,7 +27,7 @@ inline VkImageAspectFlags TextureImpl::convertAspect(DepthStencilAspectMask ak)
 }
 
 inline void TextureImpl::computeSubResourceRange(
-	const TextureSurfaceInfo& surf, DepthStencilAspectMask aspect, VkImageSubresourceRange& range) const
+	const TextureSurfaceInfo& surf, DepthStencilAspectBit aspect, VkImageSubresourceRange& range) const
 {
 	checkSurface(surf);
 	range.aspectMask = convertAspect(aspect);
@@ -58,7 +58,7 @@ inline void TextureImpl::computeSubResourceRange(
 }
 
 inline void TextureImpl::computeSubResourceRange(
-	const TextureVolumeInfo& vol, DepthStencilAspectMask aspect, VkImageSubresourceRange& range) const
+	const TextureVolumeInfo& vol, DepthStencilAspectBit aspect, VkImageSubresourceRange& range) const
 {
 	checkVolume(vol);
 	range.aspectMask = convertAspect(aspect);

+ 0 - 2
src/anki/renderer/Bloom.cpp

@@ -41,7 +41,6 @@ Error BloomExposure::init(const ConfigSet& config)
 	fbInit.m_colorAttachmentCount = 1;
 	fbInit.m_colorAttachments[0].m_texture = m_rt;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	m_fb = gr.newInstance<Framebuffer>(fbInit);
 
 	// init shaders
@@ -120,7 +119,6 @@ Error BloomUpscale::init(const ConfigSet& config)
 	fbInit.m_colorAttachmentCount = 1;
 	fbInit.m_colorAttachments[0].m_texture = m_rt;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
 	m_fb = gr.newInstance<Framebuffer>(fbInit);
 
 	// init shaders

+ 1 - 1
src/anki/renderer/Dbg.cpp

@@ -61,7 +61,7 @@ Error Dbg::lazyInit()
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::CLEAR;
 	fbInit.m_depthStencilAttachment.m_texture = m_r->getMs().m_depthRt;
 	fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::LOAD;
-	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectMask::DEPTH;
+	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
 
 	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 

+ 2 - 2
src/anki/renderer/DebugDrawer.cpp

@@ -76,7 +76,7 @@ void DebugDrawer::finishFrame()
 	flush();
 
 	// Restore state
-	m_cmdb->setDepthCompareFunction(CompareOperation::ALWAYS);
+	m_cmdb->setDepthCompareOperation(CompareOperation::ALWAYS);
 
 	m_cmdb = CommandBufferPtr(); // Release command buffer
 }
@@ -138,7 +138,7 @@ void DebugDrawer::flush()
 			ANKI_ASSERT((m_crntDrawVertCount % 3) == 0);
 		}
 
-		m_cmdb->setDepthCompareFunction((m_depthTestEnabled) ? CompareOperation::LESS : CompareOperation::ALWAYS);
+		m_cmdb->setDepthCompareOperation((m_depthTestEnabled) ? CompareOperation::LESS : CompareOperation::ALWAYS);
 
 		U firstVert = m_frameVertCount - m_crntDrawVertCount;
 		m_cmdb->drawArrays(m_primitive, m_crntDrawVertCount, 1, firstVert);

+ 6 - 8
src/anki/renderer/DepthDownscale.cpp

@@ -33,8 +33,7 @@ Error HalfDepth::init(const ConfigSet&)
 	FramebufferInitInfo fbInit;
 	fbInit.m_depthStencilAttachment.m_texture = m_depthRt;
 	fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::DONT_CARE;
-	fbInit.m_depthStencilAttachment.m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
-	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectMask::DEPTH;
+	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
 
 	m_fb = gr.newInstance<Framebuffer>(fbInit);
 
@@ -66,14 +65,14 @@ void HalfDepth::run(RenderingContext& ctx)
 	cmdb->bindTexture(0, 0, m_r->getMs().m_depthRt);
 
 	cmdb->setViewport(0, 0, m_r->getWidth() / 2, m_r->getHeight() / 2);
-	cmdb->setDepthCompareFunction(CompareOperation::ALWAYS);
+	cmdb->setDepthCompareOperation(CompareOperation::ALWAYS);
 
 	m_r->drawQuad(cmdb);
 
 	cmdb->endRenderPass();
 
 	// Restore state
-	cmdb->setDepthCompareFunction(CompareOperation::LESS);
+	cmdb->setDepthCompareOperation(CompareOperation::LESS);
 }
 
 QuarterDepth::~QuarterDepth()
@@ -99,8 +98,7 @@ Error QuarterDepth::init(const ConfigSet&)
 	FramebufferInitInfo fbInit;
 	fbInit.m_depthStencilAttachment.m_texture = m_depthRt;
 	fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::DONT_CARE;
-	fbInit.m_depthStencilAttachment.m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
-	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectMask::DEPTH;
+	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
 
 	m_fb = gr.newInstance<Framebuffer>(fbInit);
 
@@ -132,14 +130,14 @@ void QuarterDepth::run(RenderingContext& ctx)
 	cmdb->bindTexture(0, 0, m_parent->m_hd.m_depthRt);
 
 	cmdb->setViewport(0, 0, m_r->getWidth() / 4, m_r->getHeight() / 4);
-	cmdb->setDepthCompareFunction(CompareOperation::ALWAYS);
+	cmdb->setDepthCompareOperation(CompareOperation::ALWAYS);
 
 	m_r->drawQuad(cmdb);
 
 	cmdb->endRenderPass();
 
 	// Restore state
-	cmdb->setDepthCompareFunction(CompareOperation::LESS);
+	cmdb->setDepthCompareOperation(CompareOperation::LESS);
 }
 
 DepthDownscale::~DepthDownscale()

+ 0 - 1
src/anki/renderer/DownscaleBlur.cpp

@@ -37,7 +37,6 @@ Error DownscaleBlur::initSubpass(U idx, const UVec2& inputTexSize)
 	fbInit.m_colorAttachments[0].m_texture = m_r->getIs().getRt();
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
 	fbInit.m_colorAttachments[0].m_surface.m_level = idx + 1;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	pass.m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 
 	return ErrorCode::NONE;

+ 6 - 9
src/anki/renderer/Fs.cpp

@@ -51,12 +51,9 @@ Error Fs::initInternal(const ConfigSet&)
 	fbInit.m_colorAttachmentCount = 1;
 	fbInit.m_colorAttachments[0].m_texture = m_rt;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::CLEAR;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
 	fbInit.m_depthStencilAttachment.m_texture = m_r->getDepthDownscale().m_hd.m_depthRt;
 	fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::LOAD;
-	fbInit.m_depthStencilAttachment.m_usageInsideRenderPass =
-		TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ;
-	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectMask::DEPTH;
+	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
 	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 
 	ANKI_CHECK(initVol());
@@ -87,9 +84,9 @@ void Fs::drawVolumetric(RenderingContext& ctx, CommandBufferPtr cmdb)
 	const Frustum& fr = ctx.m_frustumComponent->getFrustum();
 
 	cmdb->bindShaderProgram(m_vol.m_prog);
-	cmdb->setBlendMethods(0, BlendMethod::ONE, BlendMethod::ONE);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ONE);
 	cmdb->setDepthWrite(false);
-	cmdb->setDepthCompareFunction(CompareOperation::ALWAYS);
+	cmdb->setDepthCompareOperation(CompareOperation::ALWAYS);
 
 	TransientMemoryToken token;
 	Vec4* unis = static_cast<Vec4*>(
@@ -105,9 +102,9 @@ void Fs::drawVolumetric(RenderingContext& ctx, CommandBufferPtr cmdb)
 	m_r->drawQuad(cmdb);
 
 	// Restore state
-	cmdb->setBlendMethods(0, BlendMethod::ONE, BlendMethod::ZERO);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
 	cmdb->setDepthWrite(true);
-	cmdb->setDepthCompareFunction(CompareOperation::LESS);
+	cmdb->setDepthCompareOperation(CompareOperation::LESS);
 }
 
 Error Fs::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount) const
@@ -142,7 +139,7 @@ Error Fs::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount)
 	cmdb->bindStorageBuffer(1, 1, ctx.m_is.m_lightIndicesToken);
 
 	cmdb->setViewport(0, 0, m_width, m_height);
-	cmdb->setBlendMethods(0, BlendMethod::SRC_ALPHA, BlendMethod::ONE_MINUS_SRC_ALPHA);
+	cmdb->setBlendFactors(0, BlendFactor::SRC_ALPHA, BlendFactor::ONE_MINUS_SRC_ALPHA);
 	cmdb->setDepthWrite(false);
 
 	// Start drawing

+ 2 - 3
src/anki/renderer/FsUpscale.cpp

@@ -58,7 +58,6 @@ Error FsUpscale::initInternal(const ConfigSet& config)
 	fbInit.m_colorAttachmentCount = 1;
 	fbInit.m_colorAttachments[0].m_texture = m_r->getIs().getRt();
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::LOAD;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
 	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 
 	return ErrorCode::NONE;
@@ -81,7 +80,7 @@ void FsUpscale::run(RenderingContext& ctx)
 	cmdb->bindTexture(0, 2, m_r->getFs().getRt());
 	cmdb->bindTexture(0, 3, m_r->getSsao().getRt());
 
-	cmdb->setBlendMethods(0, BlendMethod::ONE, BlendMethod::SRC_ALPHA);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::SRC_ALPHA);
 
 	cmdb->beginRenderPass(m_fb);
 	cmdb->bindShaderProgram(m_prog);
@@ -91,7 +90,7 @@ void FsUpscale::run(RenderingContext& ctx)
 	cmdb->endRenderPass();
 
 	// Restore state
-	cmdb->setBlendMethods(0, BlendMethod::ONE, BlendMethod::ZERO);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
 }
 
 } // end namespace anki

+ 8 - 14
src/anki/renderer/Ir.cpp

@@ -189,14 +189,12 @@ void Ir::initFaceInfo(U cacheEntryIdx, U faceIdx)
 	{
 		fbInit.m_colorAttachments[j].m_texture = face.m_gbufferColorRts[j];
 		fbInit.m_colorAttachments[j].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
-		fbInit.m_colorAttachments[j].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	}
 
 	fbInit.m_depthStencilAttachment.m_texture = face.m_gbufferDepthRt;
-	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectMask::DEPTH;
+	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
 	fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::CLEAR;
 	fbInit.m_depthStencilAttachment.m_clearValue.m_depthStencil.m_depth = 1.0;
-	fbInit.m_depthStencilAttachment.m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
 
 	face.m_msFb = getGrManager().newInstance<Framebuffer>(fbInit);
 
@@ -208,12 +206,9 @@ void Ir::initFaceInfo(U cacheEntryIdx, U faceIdx)
 	fbInit.m_colorAttachments[0].m_surface.m_layer = cacheEntryIdx;
 	fbInit.m_colorAttachments[0].m_surface.m_face = faceIdx;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::CLEAR;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
 	fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::LOAD;
 	fbInit.m_depthStencilAttachment.m_texture = face.m_gbufferDepthRt;
-	fbInit.m_depthStencilAttachment.m_usageInsideRenderPass =
-		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ | TextureUsageBit::SAMPLED_FRAGMENT;
-	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectMask::DEPTH;
+	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
 
 	face.m_isFb = getGrManager().newInstance<Framebuffer>(fbInit);
 
@@ -224,7 +219,6 @@ void Ir::initFaceInfo(U cacheEntryIdx, U faceIdx)
 	fbInit.m_colorAttachments[0].m_surface.m_layer = cacheEntryIdx;
 	fbInit.m_colorAttachments[0].m_surface.m_face = faceIdx;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 
 	face.m_irradianceFb = getGrManager().newInstance<Framebuffer>(fbInit);
 }
@@ -442,10 +436,10 @@ void Ir::runIs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceIdx
 
 	cmdb->setVertexAttribute(0, 0, PixelFormat(ComponentFormat::R32G32B32, TransformFormat::FLOAT), 0);
 
-	cmdb->setBlendMethods(0, BlendMethod::ONE, BlendMethod::ONE);
-	cmdb->setDepthCompareFunction(CompareOperation::GREATER);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ONE);
+	cmdb->setDepthCompareOperation(CompareOperation::GREATER);
 	cmdb->setDepthWrite(false);
-	cmdb->setCullMode(FaceSelectionMask::FRONT);
+	cmdb->setCullMode(FaceSelectionBit::FRONT);
 
 	// Process all lights
 	const Mat4& vpMat = frc.getViewProjectionMatrix();
@@ -570,10 +564,10 @@ void Ir::runIs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceIdx
 		TextureSurfaceInfo(0, 0, faceIdx, layer));
 
 	// Restore state
-	cmdb->setBlendMethods(0, BlendMethod::ONE, BlendMethod::ZERO);
-	cmdb->setDepthCompareFunction(CompareOperation::LESS);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
+	cmdb->setDepthCompareOperation(CompareOperation::LESS);
 	cmdb->setDepthWrite(true);
-	cmdb->setCullMode(FaceSelectionMask::BACK);
+	cmdb->setCullMode(FaceSelectionBit::BACK);
 }
 
 void Ir::computeIrradiance(RenderingContext& rctx, U layer, U faceIdx)

+ 1 - 2
src/anki/renderer/Is.cpp

@@ -133,7 +133,6 @@ Error Is::initInternal(const ConfigSet& config)
 	fbInit.m_colorAttachmentCount = 1;
 	fbInit.m_colorAttachments[0].m_texture = m_rt;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 
 	TextureInitInfo texinit;
@@ -176,7 +175,7 @@ void Is::run(RenderingContext& ctx)
 	cmdb->bindTexture(0, 0, m_r->getMs().m_rt0);
 	cmdb->bindTexture(0, 1, m_r->getMs().m_rt1);
 	cmdb->bindTexture(0, 2, m_r->getMs().m_rt2);
-	cmdb->bindTexture(0, 3, m_r->getMs().m_depthRt, DepthStencilAspectMask::DEPTH);
+	cmdb->bindTexture(0, 3, m_r->getMs().m_depthRt, DepthStencilAspectBit::DEPTH);
 	cmdb->bindTexture(0, 4, m_r->getSm().m_spotTexArray);
 	cmdb->bindTexture(0, 5, m_r->getSm().m_omniTexArray);
 	cmdb->bindTexture(0, 6, m_r->getIr().getReflectionTexture());

+ 4 - 2
src/anki/renderer/Lf.cpp

@@ -241,7 +241,8 @@ void Lf::run(RenderingContext& ctx, CommandBufferPtr cmdb)
 
 	cmdb->bindShaderProgram(m_realProg);
 	cmdb->setDepthWrite(false);
-	cmdb->setDepthCompareFunction(CompareOperation::ALWAYS);
+	cmdb->setDepthCompareOperation(CompareOperation::ALWAYS);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ONE);
 
 	for(U i = 0; i < count; ++i)
 	{
@@ -290,7 +291,8 @@ void Lf::run(RenderingContext& ctx, CommandBufferPtr cmdb)
 
 	// Restore state
 	cmdb->setDepthWrite(true);
-	cmdb->setDepthCompareFunction(CompareOperation::LESS);
+	cmdb->setDepthCompareOperation(CompareOperation::LESS);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
 }
 
 } // end namespace anki

+ 1 - 5
src/anki/renderer/Ms.cpp

@@ -65,20 +65,16 @@ Error Ms::createRt(U32 samples)
 	fbInit.m_colorAttachments[0].m_texture = m_rt0;
 	fbInit.m_colorAttachments[0].m_loadOperation = loadop;
 	fbInit.m_colorAttachments[0].m_clearValue.m_colorf = {{1.0, 0.0, 0.0, 0.0}};
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	fbInit.m_colorAttachments[1].m_texture = m_rt1;
 	fbInit.m_colorAttachments[1].m_loadOperation = loadop;
 	fbInit.m_colorAttachments[1].m_clearValue.m_colorf = {{0.0, 1.0, 0.0, 0.0}};
-	fbInit.m_colorAttachments[1].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	fbInit.m_colorAttachments[2].m_texture = m_rt2;
 	fbInit.m_colorAttachments[2].m_loadOperation = loadop;
 	fbInit.m_colorAttachments[2].m_clearValue.m_colorf = {{0.0, 0.0, 1.0, 0.0}};
-	fbInit.m_colorAttachments[2].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	fbInit.m_depthStencilAttachment.m_texture = m_depthRt;
 	fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::CLEAR;
 	fbInit.m_depthStencilAttachment.m_clearValue.m_depthStencil.m_depth = 1.0;
-	fbInit.m_depthStencilAttachment.m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
-	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectMask::DEPTH;
+	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
 
 	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 

+ 0 - 1
src/anki/renderer/Pps.cpp

@@ -52,7 +52,6 @@ Error Pps::initInternal(const ConfigSet& config)
 		fbInit.m_colorAttachmentCount = 1;
 		fbInit.m_colorAttachments[0].m_texture = m_rt;
 		fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
-		fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 		m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 	}
 

+ 0 - 1
src/anki/renderer/Sm.cpp

@@ -72,7 +72,6 @@ Error Sm::initInternal(const ConfigSet& config)
 	FramebufferInitInfo fbInit;
 	fbInit.m_depthStencilAttachment.m_texture = m_spotTexArray;
 	fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::CLEAR;
-	fbInit.m_depthStencilAttachment.m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
 	fbInit.m_depthStencilAttachment.m_clearValue.m_depthStencil.m_depth = 1.0;
 
 	U layer = 0;

+ 10 - 14
src/anki/renderer/Smaa.cpp

@@ -54,10 +54,8 @@ Error SmaaEdge::init(const ConfigSet& initializer)
 	fbInit.m_colorAttachmentCount = 1;
 	fbInit.m_colorAttachments[0].m_texture = m_rt;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::CLEAR;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	fbInit.m_depthStencilAttachment.m_texture = m_r->getSmaa().m_stencilTex;
 	fbInit.m_depthStencilAttachment.m_stencilLoadOperation = AttachmentLoadOperation::CLEAR;
-	fbInit.m_depthStencilAttachment.m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	m_fb = gr.newInstance<Framebuffer>(fbInit);
 
 	return ErrorCode::NONE;
@@ -96,10 +94,10 @@ void SmaaEdge::run(RenderingContext& ctx)
 	cmdb->bindTexture(0, 0, m_r->getIs().getRt());
 
 	cmdb->setStencilOperations(
-		FaceSelectionMask::FRONT, StencilOperation::KEEP, StencilOperation::KEEP, StencilOperation::REPLACE);
-	cmdb->setStencilCompareMask(FaceSelectionMask::FRONT, 0xF);
-	cmdb->setStencilWriteMask(FaceSelectionMask::FRONT, 0xF);
-	cmdb->setStencilReference(FaceSelectionMask::FRONT, 0xF);
+		FaceSelectionBit::FRONT, StencilOperation::KEEP, StencilOperation::KEEP, StencilOperation::REPLACE);
+	cmdb->setStencilCompareMask(FaceSelectionBit::FRONT, 0xF);
+	cmdb->setStencilWriteMask(FaceSelectionBit::FRONT, 0xF);
+	cmdb->setStencilReference(FaceSelectionBit::FRONT, 0xF);
 
 	cmdb->beginRenderPass(m_fb);
 	m_r->drawQuad(cmdb);
@@ -107,7 +105,7 @@ void SmaaEdge::run(RenderingContext& ctx)
 
 	// Restore state
 	cmdb->setStencilOperations(
-		FaceSelectionMask::FRONT, StencilOperation::KEEP, StencilOperation::KEEP, StencilOperation::KEEP);
+		FaceSelectionBit::FRONT, StencilOperation::KEEP, StencilOperation::KEEP, StencilOperation::KEEP);
 }
 
 SmaaWeights::~SmaaWeights()
@@ -148,11 +146,9 @@ Error SmaaWeights::init(const ConfigSet& initializer)
 	fbInit.m_colorAttachmentCount = 1;
 	fbInit.m_colorAttachments[0].m_texture = m_rt;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::CLEAR;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	fbInit.m_depthStencilAttachment.m_texture = m_r->getSmaa().m_stencilTex;
 	fbInit.m_depthStencilAttachment.m_stencilLoadOperation = AttachmentLoadOperation::LOAD;
 	fbInit.m_depthStencilAttachment.m_stencilStoreOperation = AttachmentStoreOperation::DONT_CARE;
-	fbInit.m_depthStencilAttachment.m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ;
 	m_fb = gr.newInstance<Framebuffer>(fbInit);
 
 	// Create Area texture
@@ -221,17 +217,17 @@ void SmaaWeights::run(RenderingContext& ctx)
 	cmdb->bindTexture(0, 2, m_searchTex);
 	cmdb->bindShaderProgram(m_prog);
 
-	cmdb->setStencilCompareFunction(FaceSelectionMask::FRONT, CompareOperation::EQUAL);
-	cmdb->setStencilCompareMask(FaceSelectionMask::FRONT, 0xF);
-	cmdb->setStencilWriteMask(FaceSelectionMask::FRONT, 0x0);
-	cmdb->setStencilReference(FaceSelectionMask::FRONT, 0xF);
+	cmdb->setStencilCompareOperation(FaceSelectionBit::FRONT, CompareOperation::EQUAL);
+	cmdb->setStencilCompareMask(FaceSelectionBit::FRONT, 0xF);
+	cmdb->setStencilWriteMask(FaceSelectionBit::FRONT, 0x0);
+	cmdb->setStencilReference(FaceSelectionBit::FRONT, 0xF);
 
 	cmdb->beginRenderPass(m_fb);
 	m_r->drawQuad(cmdb);
 	cmdb->endRenderPass();
 
 	// Restore state
-	cmdb->setStencilCompareFunction(FaceSelectionMask::FRONT, CompareOperation::ALWAYS);
+	cmdb->setStencilCompareOperation(FaceSelectionBit::FRONT, CompareOperation::ALWAYS);
 }
 
 Error Smaa::init(const ConfigSet& cfg)

+ 0 - 1
src/anki/renderer/Ssao.cpp

@@ -72,7 +72,6 @@ Error Ssao::createFb(FramebufferPtr& fb, TexturePtr& rt)
 	fbInit.m_colorAttachmentCount = 1;
 	fbInit.m_colorAttachments[0].m_texture = rt;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 	fb = getGrManager().newInstance<Framebuffer>(fbInit);
 
 	return ErrorCode::NONE;

+ 2 - 2
src/anki/renderer/Sslf.cpp

@@ -45,14 +45,14 @@ void Sslf::run(RenderingContext& ctx)
 
 	// Draw to the SSLF FB
 	cmdb->bindShaderProgram(m_prog);
-	cmdb->setBlendMethods(0, BlendMethod::ONE, BlendMethod::ONE);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ONE);
 	cmdb->bindTexture(0, 0, m_r->getBloom().m_extractExposure.m_rt);
 	cmdb->bindTexture(0, 1, m_lensDirtTex->getGrTexture());
 
 	m_r->drawQuad(cmdb);
 
 	// Retore state
-	cmdb->setBlendMethods(0, BlendMethod::ONE, BlendMethod::ZERO);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
 }
 
 } // end namespace anki

+ 2 - 3
src/anki/renderer/Volumetric.cpp

@@ -66,7 +66,6 @@ Error Volumetric::initInternal(const ConfigSet& config)
 	fbInit.m_colorAttachmentCount = 1;
 	fbInit.m_colorAttachments[0].m_texture = m_rt;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::LOAD;
-	fbInit.m_colorAttachments[0].m_usageInsideRenderPass = TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE;
 	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
 
 	return ErrorCode::NONE;
@@ -103,7 +102,7 @@ void Volumetric::run(RenderingContext& ctx)
 
 	// pass
 	cmdb->setViewport(0, 0, m_r->getWidth() / VOLUMETRIC_FRACTION, m_r->getHeight() / VOLUMETRIC_FRACTION);
-	cmdb->setBlendMethods(0, BlendMethod::SRC_ALPHA, BlendMethod::ONE_MINUS_SRC_ALPHA);
+	cmdb->setBlendFactors(0, BlendFactor::SRC_ALPHA, BlendFactor::ONE_MINUS_SRC_ALPHA);
 
 	cmdb->bindTexture(0, 0, m_r->getDepthDownscale().m_qd.m_depthRt);
 	cmdb->bindTexture(0, 1, m_r->getSm().m_spotTexArray);
@@ -124,7 +123,7 @@ void Volumetric::run(RenderingContext& ctx)
 	cmdb->endRenderPass();
 
 	// Restore state
-	cmdb->setBlendMethods(0, BlendMethod::ONE, BlendMethod::ZERO);
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
 }
 
 } // end namespace anki

+ 2 - 2
src/anki/ui/UiInterfaceImpl.cpp

@@ -53,8 +53,8 @@ Error UiInterfaceImpl::init(GrManager* gr, ResourceManager* rc)
 
 	ppinit.m_color.m_attachmentCount = 1;
 	ppinit.m_color.m_attachments[0].m_format = PixelFormat(ComponentFormat::R8G8B8, TransformFormat::UNORM);
-	ppinit.m_color.m_attachments[0].m_srcBlendMethod = BlendMethod::SRC_ALPHA;
-	ppinit.m_color.m_attachments[0].m_dstBlendMethod = BlendMethod::ONE_MINUS_SRC_ALPHA;
+	ppinit.m_color.m_attachments[0].m_srcBlendFactor = BlendFactor::SRC_ALPHA;
+	ppinit.m_color.m_attachments[0].m_dstBlendFactor = BlendFactor::ONE_MINUS_SRC_ALPHA;
 
 	ppinit.m_shaders[U(ShaderType::VERTEX)] = m_stages[StageId::LINES].m_vShader->getGrShader();
 	ppinit.m_shaders[U(ShaderType::FRAGMENT)] = m_stages[StageId::LINES].m_fShader->getGrShader();

+ 7 - 7
tests/gr/Gr.cpp

@@ -309,7 +309,7 @@ static FramebufferPtr createDefaultFb(GrManager& gr)
 {
 	FramebufferInitInfo fbinit;
 	fbinit.m_colorAttachmentCount = 1;
-	fbinit.m_colorAttachments[0].m_clearValue.m_colorf = {1.0, 0.0, 1.0, 1.0};
+	fbinit.m_colorAttachments[0].m_clearValue.m_colorf = {{1.0, 0.0, 1.0, 1.0}};
 
 	return gr.newInstance<Framebuffer>(fbinit);
 }
@@ -507,9 +507,9 @@ ANKI_TEST(Gr, DrawWithVertex)
 	ptr[1].m_pos = Vec3(0.0, -1.0, 0.0);
 	ptr[2].m_pos = Vec3(1.0, 1.0, 0.0);
 
-	ptr[0].m_color = {255, 0, 0};
-	ptr[1].m_color = {0, 255, 0};
-	ptr[2].m_color = {0, 0, 255};
+	ptr[0].m_color = {{255, 0, 0}};
+	ptr[1].m_color = {{0, 255, 0}};
+	ptr[2].m_color = {{0, 0, 255}};
 	b->unmap();
 
 	BufferPtr c = gr->newInstance<Buffer>(sizeof(Vec3) * 3, BufferUsageBit::VERTEX, BufferMapAccessBit::WRITE);
@@ -866,11 +866,11 @@ static void drawOffscreen(GrManager& gr, Bool useSecondLevel)
 	FramebufferInitInfo fbinit;
 	fbinit.m_colorAttachmentCount = 2;
 	fbinit.m_colorAttachments[0].m_texture = col0;
-	fbinit.m_colorAttachments[0].m_clearValue.m_colorf = {0.1, 0.0, 0.0, 0.0};
+	fbinit.m_colorAttachments[0].m_clearValue.m_colorf = {{0.1, 0.0, 0.0, 0.0}};
 	fbinit.m_colorAttachments[1].m_texture = col1;
-	fbinit.m_colorAttachments[1].m_clearValue.m_colorf = {0.0, 0.1, 0.0, 0.0};
+	fbinit.m_colorAttachments[1].m_clearValue.m_colorf = {{0.0, 0.1, 0.0, 0.0}};
 	fbinit.m_depthStencilAttachment.m_texture = dp;
-	fbinit.m_depthStencilAttachment.m_aspect = DepthStencilAspectMask::DEPTH;
+	fbinit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
 	fbinit.m_depthStencilAttachment.m_clearValue.m_depthStencil.m_depth = 1.0;
 
 	FramebufferPtr fb = gr.newInstance<Framebuffer>(fbinit);