瀏覽代碼

Fixing vulkan bugs

Panagiotis Christopoulos Charitos 9 年之前
父節點
當前提交
fe942a1b44

+ 1 - 1
include/anki/gr/CommandBuffer.h

@@ -75,7 +75,7 @@ class CommandBufferInitHints
 	friend class CommandBufferImpl;
 	friend class CommandBufferImpl;
 
 
 private:
 private:
-	PtrSize m_chunkSize = 1024 * 64;
+	PtrSize m_chunkSize = 1024 * 1024;
 };
 };
 
 
 /// Command buffer initialization flags.
 /// Command buffer initialization flags.

+ 0 - 4
include/anki/renderer/Ms.h

@@ -18,10 +18,6 @@ namespace anki
 class Ms : public RenderingPass
 class Ms : public RenderingPass
 {
 {
 anki_internal:
 anki_internal:
-	static const U ATTACHMENT_COUNT = 3;
-	static const Array<PixelFormat, ATTACHMENT_COUNT> RT_PIXEL_FORMATS;
-	static const PixelFormat DEPTH_RT_PIXEL_FORMAT;
-
 	Ms(Renderer* r)
 	Ms(Renderer* r)
 		: RenderingPass(r)
 		: RenderingPass(r)
 	{
 	{

+ 12 - 5
src/gr/vulkan/GrManager.cpp

@@ -92,18 +92,25 @@ void GrManager::getTextureUploadInfo(TexturePtr tex,
 	U width = impl.m_width >> surf.m_level;
 	U width = impl.m_width >> surf.m_level;
 	U height = impl.m_height >> surf.m_level;
 	U height = impl.m_height >> surf.m_level;
 
 
-	allocationSize = computeSurfaceSize(width,
-		height,
-		PixelFormat(ComponentFormat::R8G8B8, TransformFormat::UNORM));
-
-	if(!!(impl.m_workarounds & TextureImplWorkaround::R8G8B8_TO_R8G8B8A8))
+	if(!impl.m_workarounds)
+	{
+		allocationSize = computeSurfaceSize(width, height, impl.m_format);
+	}
+	else if(!!(impl.m_workarounds & TextureImplWorkaround::R8G8B8_TO_R8G8B8A8))
 	{
 	{
 		// Extra size for staging buffer
 		// Extra size for staging buffer
+		allocationSize = computeSurfaceSize(width,
+			height,
+			PixelFormat(ComponentFormat::R8G8B8, TransformFormat::UNORM));
 		alignRoundUp(16, allocationSize);
 		alignRoundUp(16, allocationSize);
 		allocationSize += computeSurfaceSize(width,
 		allocationSize += computeSurfaceSize(width,
 			height,
 			height,
 			PixelFormat(ComponentFormat::R8G8B8A8, TransformFormat::UNORM));
 			PixelFormat(ComponentFormat::R8G8B8A8, TransformFormat::UNORM));
 	}
 	}
+	else
+	{
+		ANKI_ASSERT(0);
+	}
 
 
 	usage = BufferUsageBit::TRANSFER_SOURCE;
 	usage = BufferUsageBit::TRANSFER_SOURCE;
 }
 }

+ 1 - 0
src/gr/vulkan/ShaderImpl.cpp

@@ -153,6 +153,7 @@ static const char* SHADER_HEADER = R"(#version 450 core
 #define ANKI_VK 1
 #define ANKI_VK 1
 #define %s
 #define %s
 #define gl_VertexID gl_VertexIndex
 #define gl_VertexID gl_VertexIndex
+#define gl_InstanceID gl_InstanceIndex
 #define ANKI_TEX_BINDING(set_, binding_) set = set_, binding = %u + binding_
 #define ANKI_TEX_BINDING(set_, binding_) set = set_, binding = %u + binding_
 #define ANKI_UBO_BINDING(set_, binding_) set = set_, binding = %u + binding_
 #define ANKI_UBO_BINDING(set_, binding_) set = set_, binding = %u + binding_
 #define ANKI_SS_BINDING(set_, binding_) set = set_, binding = %u + binding_
 #define ANKI_SS_BINDING(set_, binding_) set = set_, binding = %u + binding_

+ 1 - 1
src/renderer/DebugDrawer.cpp

@@ -58,7 +58,7 @@ Error DebugDrawer::init(Renderer* r)
 	init.m_vertex.m_attributes[1].m_binding = 0;
 	init.m_vertex.m_attributes[1].m_binding = 0;
 	init.m_inputAssembler.m_topology = PrimitiveTopology::LINES;
 	init.m_inputAssembler.m_topology = PrimitiveTopology::LINES;
 	init.m_depthStencil.m_depthWriteEnabled = false;
 	init.m_depthStencil.m_depthWriteEnabled = false;
-	init.m_depthStencil.m_format = Ms::DEPTH_RT_PIXEL_FORMAT;
+	init.m_depthStencil.m_format = MS_DEPTH_ATTACHMENT_PIXEL_FORMAT;
 	init.m_color.m_attachmentCount = 1;
 	init.m_color.m_attachmentCount = 1;
 	init.m_color.m_attachments[0].m_format = Pps::RT_PIXEL_FORMAT;
 	init.m_color.m_attachments[0].m_format = Pps::RT_PIXEL_FORMAT;
 	init.m_shaders[U(ShaderType::VERTEX)] = m_vert->getGrShader();
 	init.m_shaders[U(ShaderType::VERTEX)] = m_vert->getGrShader();

+ 2 - 2
src/renderer/Fs.cpp

@@ -72,10 +72,10 @@ Error Fs::init(const ConfigSet&)
 
 
 		init.m_storageBuffers[0].m_uploadedMemory = true;
 		init.m_storageBuffers[0].m_uploadedMemory = true;
 		init.m_storageBuffers[0].m_usage =
 		init.m_storageBuffers[0].m_usage =
-			BufferUsageBit::UNIFORM_FRAGMENT | BufferUsageBit::UNIFORM_VERTEX;
+			BufferUsageBit::STORAGE_FRAGMENT | BufferUsageBit::STORAGE_VERTEX;
 		init.m_storageBuffers[1].m_uploadedMemory = true;
 		init.m_storageBuffers[1].m_uploadedMemory = true;
 		init.m_storageBuffers[1].m_usage =
 		init.m_storageBuffers[1].m_usage =
-			BufferUsageBit::UNIFORM_FRAGMENT | BufferUsageBit::UNIFORM_VERTEX;
+			BufferUsageBit::STORAGE_FRAGMENT | BufferUsageBit::STORAGE_VERTEX;
 
 
 		m_globalResources = getGrManager().newInstance<ResourceGroup>(init);
 		m_globalResources = getGrManager().newInstance<ResourceGroup>(init);
 	}
 	}

+ 9 - 6
src/renderer/Lf.cpp

@@ -118,14 +118,17 @@ Error Lf::initOcclusion(const ConfigSet& config)
 		PixelFormat(ComponentFormat::R32G32B32, TransformFormat::FLOAT);
 		PixelFormat(ComponentFormat::R32G32B32, TransformFormat::FLOAT);
 	init.m_inputAssembler.m_topology = PrimitiveTopology::POINTS;
 	init.m_inputAssembler.m_topology = PrimitiveTopology::POINTS;
 	init.m_depthStencil.m_depthWriteEnabled = false;
 	init.m_depthStencil.m_depthWriteEnabled = false;
-	init.m_depthStencil.m_format = Ms::DEPTH_RT_PIXEL_FORMAT;
-	ANKI_ASSERT(Ms::ATTACHMENT_COUNT == 3);
-	init.m_color.m_attachmentCount = Ms::ATTACHMENT_COUNT;
-	init.m_color.m_attachments[0].m_format = Ms::RT_PIXEL_FORMATS[0];
+	init.m_depthStencil.m_format = MS_DEPTH_ATTACHMENT_PIXEL_FORMAT;
+	ANKI_ASSERT(MS_COLOR_ATTACHMENT_COUNT == 3);
+	init.m_color.m_attachmentCount = MS_COLOR_ATTACHMENT_COUNT;
+	init.m_color.m_attachments[0].m_format =
+		MS_COLOR_ATTACHMENT_PIXEL_FORMATS[0];
 	init.m_color.m_attachments[0].m_channelWriteMask = ColorBit::NONE;
 	init.m_color.m_attachments[0].m_channelWriteMask = ColorBit::NONE;
-	init.m_color.m_attachments[1].m_format = Ms::RT_PIXEL_FORMATS[1];
+	init.m_color.m_attachments[1].m_format =
+		MS_COLOR_ATTACHMENT_PIXEL_FORMATS[1];
 	init.m_color.m_attachments[1].m_channelWriteMask = ColorBit::NONE;
 	init.m_color.m_attachments[1].m_channelWriteMask = ColorBit::NONE;
-	init.m_color.m_attachments[2].m_format = Ms::RT_PIXEL_FORMATS[2];
+	init.m_color.m_attachments[2].m_format =
+		MS_COLOR_ATTACHMENT_PIXEL_FORMATS[2];
 	init.m_color.m_attachments[2].m_channelWriteMask = ColorBit::NONE;
 	init.m_color.m_attachments[2].m_channelWriteMask = ColorBit::NONE;
 	init.m_shaders[U(ShaderType::VERTEX)] = m_occlusionVert->getGrShader();
 	init.m_shaders[U(ShaderType::VERTEX)] = m_occlusionVert->getGrShader();
 	init.m_shaders[U(ShaderType::FRAGMENT)] = m_occlusionFrag->getGrShader();
 	init.m_shaders[U(ShaderType::FRAGMENT)] = m_occlusionFrag->getGrShader();

+ 5 - 14
src/renderer/Ms.cpp

@@ -15,15 +15,6 @@
 namespace anki
 namespace anki
 {
 {
 
 
-//==============================================================================
-const Array<PixelFormat, Ms::ATTACHMENT_COUNT> Ms::RT_PIXEL_FORMATS = {
-	{PixelFormat(ComponentFormat::R8G8B8A8, TransformFormat::UNORM),
-		PixelFormat(ComponentFormat::R8G8B8A8, TransformFormat::UNORM),
-		PixelFormat(ComponentFormat::R8G8B8A8, TransformFormat::UNORM)}};
-
-const PixelFormat Ms::DEPTH_RT_PIXEL_FORMAT(
-	ComponentFormat::D24, TransformFormat::FLOAT);
-
 //==============================================================================
 //==============================================================================
 Ms::~Ms()
 Ms::~Ms()
 {
 {
@@ -35,7 +26,7 @@ Error Ms::createRt(U32 samples)
 {
 {
 	m_r->createRenderTarget(m_r->getWidth(),
 	m_r->createRenderTarget(m_r->getWidth(),
 		m_r->getHeight(),
 		m_r->getHeight(),
-		DEPTH_RT_PIXEL_FORMAT,
+		MS_DEPTH_ATTACHMENT_PIXEL_FORMAT,
 		TextureUsageBit::SAMPLED_FRAGMENT
 		TextureUsageBit::SAMPLED_FRAGMENT
 			| TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE
 			| TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE
 			| TextureUsageBit::GENERATE_MIPMAPS,
 			| TextureUsageBit::GENERATE_MIPMAPS,
@@ -45,7 +36,7 @@ Error Ms::createRt(U32 samples)
 
 
 	m_r->createRenderTarget(m_r->getWidth(),
 	m_r->createRenderTarget(m_r->getWidth(),
 		m_r->getHeight(),
 		m_r->getHeight(),
-		RT_PIXEL_FORMATS[0],
+		MS_COLOR_ATTACHMENT_PIXEL_FORMATS[0],
 		TextureUsageBit::SAMPLED_FRAGMENT
 		TextureUsageBit::SAMPLED_FRAGMENT
 			| TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 			| TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 		SamplingFilter::NEAREST,
 		SamplingFilter::NEAREST,
@@ -54,7 +45,7 @@ Error Ms::createRt(U32 samples)
 
 
 	m_r->createRenderTarget(m_r->getWidth(),
 	m_r->createRenderTarget(m_r->getWidth(),
 		m_r->getHeight(),
 		m_r->getHeight(),
-		RT_PIXEL_FORMATS[1],
+		MS_COLOR_ATTACHMENT_PIXEL_FORMATS[1],
 		TextureUsageBit::SAMPLED_FRAGMENT
 		TextureUsageBit::SAMPLED_FRAGMENT
 			| TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 			| TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 		SamplingFilter::NEAREST,
 		SamplingFilter::NEAREST,
@@ -63,7 +54,7 @@ Error Ms::createRt(U32 samples)
 
 
 	m_r->createRenderTarget(m_r->getWidth(),
 	m_r->createRenderTarget(m_r->getWidth(),
 		m_r->getHeight(),
 		m_r->getHeight(),
-		RT_PIXEL_FORMATS[2],
+		MS_COLOR_ATTACHMENT_PIXEL_FORMATS[2],
 		TextureUsageBit::SAMPLED_FRAGMENT
 		TextureUsageBit::SAMPLED_FRAGMENT
 			| TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE
 			| TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE
 			| TextureUsageBit::GENERATE_MIPMAPS,
 			| TextureUsageBit::GENERATE_MIPMAPS,
@@ -77,7 +68,7 @@ Error Ms::createRt(U32 samples)
 #endif
 #endif
 
 
 	FramebufferInitInfo fbInit;
 	FramebufferInitInfo fbInit;
-	fbInit.m_colorAttachmentCount = ATTACHMENT_COUNT;
+	fbInit.m_colorAttachmentCount = MS_COLOR_ATTACHMENT_COUNT;
 	fbInit.m_colorAttachments[0].m_texture = m_rt0;
 	fbInit.m_colorAttachments[0].m_texture = m_rt0;
 	fbInit.m_colorAttachments[0].m_loadOperation = loadop;
 	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_clearValue.m_colorf = {{1.0, 0.0, 0.0, 0.0}};

+ 1 - 1
src/renderer/Sm.cpp

@@ -19,7 +19,7 @@ namespace anki
 
 
 //==============================================================================
 //==============================================================================
 const PixelFormat Sm::DEPTH_RT_PIXEL_FORMAT(
 const PixelFormat Sm::DEPTH_RT_PIXEL_FORMAT(
-	ComponentFormat::D16, TransformFormat::FLOAT);
+	ComponentFormat::D16, TransformFormat::UNORM);
 
 
 //==============================================================================
 //==============================================================================
 Error Sm::init(const ConfigSet& config)
 Error Sm::init(const ConfigSet& config)

+ 7 - 7
src/resource/Model.cpp

@@ -223,12 +223,12 @@ void ModelPatch::computePipelineInitInfo(
 	}
 	}
 	else if(m_mtl->getForwardShading())
 	else if(m_mtl->getForwardShading())
 	{
 	{
-		ds.m_format = Ms::DEPTH_RT_PIXEL_FORMAT;
+		ds.m_format = MS_DEPTH_ATTACHMENT_PIXEL_FORMAT;
 		ds.m_depthWriteEnabled = false;
 		ds.m_depthWriteEnabled = false;
 	}
 	}
 	else
 	else
 	{
 	{
-		ds.m_format = Ms::DEPTH_RT_PIXEL_FORMAT;
+		ds.m_format = MS_DEPTH_ATTACHMENT_PIXEL_FORMAT;
 	}
 	}
 
 
 	//
 	//
@@ -249,11 +249,11 @@ void ModelPatch::computePipelineInitInfo(
 	}
 	}
 	else
 	else
 	{
 	{
-		color.m_attachmentCount = Ms::ATTACHMENT_COUNT;
-		ANKI_ASSERT(Ms::ATTACHMENT_COUNT == 3);
-		color.m_attachments[0].m_format = Ms::RT_PIXEL_FORMATS[0];
-		color.m_attachments[1].m_format = Ms::RT_PIXEL_FORMATS[1];
-		color.m_attachments[2].m_format = Ms::RT_PIXEL_FORMATS[2];
+		color.m_attachmentCount = MS_COLOR_ATTACHMENT_COUNT;
+		ANKI_ASSERT(MS_COLOR_ATTACHMENT_COUNT == 3);
+		color.m_attachments[0].m_format = MS_COLOR_ATTACHMENT_PIXEL_FORMATS[0];
+		color.m_attachments[1].m_format = MS_COLOR_ATTACHMENT_PIXEL_FORMATS[1];
+		color.m_attachments[2].m_format = MS_COLOR_ATTACHMENT_PIXEL_FORMATS[2];
 	}
 	}
 }
 }
 
 

+ 1 - 1
src/resource/ParticleEmitterResource.cpp

@@ -245,7 +245,7 @@ Error ParticleEmitterResource::load(const ResourceFilename& filename)
 	pinit.m_vertex.m_attributes[2].m_binding = 0;
 	pinit.m_vertex.m_attributes[2].m_binding = 0;
 
 
 	pinit.m_depthStencil.m_depthWriteEnabled = false;
 	pinit.m_depthStencil.m_depthWriteEnabled = false;
-	pinit.m_depthStencil.m_format = Ms::DEPTH_RT_PIXEL_FORMAT;
+	pinit.m_depthStencil.m_format = MS_DEPTH_ATTACHMENT_PIXEL_FORMAT;
 
 
 	pinit.m_color.m_attachmentCount = 1;
 	pinit.m_color.m_attachmentCount = 1;
 	pinit.m_color.m_attachments[0].m_format = IS_COLOR_ATTACHMENT_PIXEL_FORMAT;
 	pinit.m_color.m_attachments[0].m_format = IS_COLOR_ATTACHMENT_PIXEL_FORMAT;

+ 1 - 1
thirdparty

@@ -1 +1 @@
-Subproject commit 01e338565b1b2740911d8fb832e42c550f5a9437
+Subproject commit 6e44be6e6d42abc25b5ee7c7f53e7a6adedc271f