Browse Source

Make it compile

Panagiotis Christopoulos Charitos 3 years ago
parent
commit
85703a5e5c

+ 1 - 1
AnKi/Gr/Vulkan/Common.cpp

@@ -403,7 +403,7 @@ VkImageUsageFlags convertTextureUsage(const TextureUsageBit ak, const Format for
 
 	if(!!(ak & (TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE)))
 	{
-		if(formatIsDepthStencil(format))
+		if(getFormatInfo(format).isDepthStencil())
 		{
 			out |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
 		}

+ 2 - 2
AnKi/Gr/Vulkan/Common.h

@@ -163,12 +163,12 @@ ANKI_USE_RESULT inline VkFormat convertFormat(const Format ak)
 ANKI_USE_RESULT inline DepthStencilAspectBit getImageAspectFromFormat(const Format ak)
 {
 	DepthStencilAspectBit out = DepthStencilAspectBit::NONE;
-	if(formatIsStencil(ak))
+	if(getFormatInfo(ak).isStencil())
 	{
 		out = DepthStencilAspectBit::STENCIL;
 	}
 
-	if(formatIsDepth(ak))
+	if(getFormatInfo(ak).isDepth())
 	{
 		out |= DepthStencilAspectBit::DEPTH;
 	}

+ 3 - 3
AnKi/Importer/GltfImporter.cpp

@@ -686,7 +686,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 				Array<const cgltf_material*, 128> m_materials;
 				U32 m_materialCount = 0;
 				const cgltf_skin* m_skin;
-				RayTypeBit m_rayTypes;
+				Bool m_rayTracing;
 			};
 			Ctx* ctx = m_alloc.newInstance<Ctx>();
 			ctx->m_importer = this;
@@ -696,7 +696,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 				ctx->m_materials[ctx->m_materialCount++] = node.mesh->primitives[i].material;
 			}
 			ctx->m_skin = node.skin;
-			ctx->m_rayTypes = (skipRt) ? RayTypeBit::NONE : RayTypeBit::ALL;
+			ctx->m_rayTracing = !skipRt;
 
 			HashMapAuto<CString, StringAuto>::Iterator it2;
 			const Bool selfCollision = (it2 = extras.find("collision_mesh")) != extras.getEnd() && *it2 == "self";
@@ -732,7 +732,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
 
 				for(U32 i = 0; i < self.m_materialCount && !err; ++i)
 				{
-					err = self.m_importer->writeMaterial(*self.m_materials[i], self.m_rayTypes);
+					err = self.m_importer->writeMaterial(*self.m_materials[i], self.m_rayTracing);
 				}
 
 				if(!err)

+ 1 - 1
AnKi/Importer/GltfImporter.h

@@ -137,7 +137,7 @@ private:
 
 	// Resources
 	ANKI_USE_RESULT Error writeMesh(const cgltf_mesh& mesh, U32 lod, F32 decimateFactor);
-	ANKI_USE_RESULT Error writeMaterial(const cgltf_material& mtl, RayTypeBit usedRayTypes);
+	ANKI_USE_RESULT Error writeMaterial(const cgltf_material& mtl, Bool writeRayTracing);
 	ANKI_USE_RESULT Error writeModel(const cgltf_mesh& mesh);
 	ANKI_USE_RESULT Error writeAnimation(const cgltf_animation& anim);
 	ANKI_USE_RESULT Error writeSkeleton(const cgltf_skin& skin);

+ 50 - 19
AnKi/Importer/GltfImporterMaterial.cpp

@@ -10,21 +10,53 @@
 namespace anki {
 
 const char* MATERIAL_TEMPLATE = R"(<!-- This file is auto generated by ImporterMaterial.cpp -->
-<material shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
-	<mutation>
-		<mutator name="DIFFUSE_TEX" value="%diffTexMutator%"/>
-		<mutator name="SPECULAR_TEX" value="%specTexMutator%"/>
-		<mutator name="ROUGHNESS_TEX" value="%roughnessTexMutator%"/>
-		<mutator name="METAL_TEX" value="%metalTexMutator%"/>
-		<mutator name="NORMAL_TEX" value="%normalTexMutator%"/>
-		<mutator name="PARALLAX" value="%parallaxMutator%"/>
-		<mutator name="EMISSIVE_TEX" value="%emissiveTexMutator%"/>
-		<mutator name="ALPHA_TEST" value="%alphaTestMutator%"/>
-	</mutation>
+<material>
+	<technique name="GBuffer" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+		<mutation>
+			<mutator name="TECHNIQUE" value="0"/>
+			<mutator name="DIFFUSE_TEX" value="%diffTexMutator%"/>
+			<mutator name="SPECULAR_TEX" value="%specTexMutator%"/>
+			<mutator name="ROUGHNESS_TEX" value="%roughnessTexMutator%"/>
+			<mutator name="METAL_TEX" value="%metalTexMutator%"/>
+			<mutator name="NORMAL_TEX" value="%normalTexMutator%"/>
+			<mutator name="PARALLAX" value="%parallaxMutator%"/>
+			<mutator name="EMISSIVE_TEX" value="%emissiveTexMutator%"/>
+			<mutator name="ALPHA_TEST" value="%alphaTestMutator%"/>
+		</mutation>
+	</technique>
+
+	<technique name="GBufferEz" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+		<mutation>
+			<mutator name="TECHNIQUE" value="1"/>
+			<mutator name="DIFFUSE_TEX" value="%diffTexMutator%"/>
+			<mutator name="SPECULAR_TEX" value="%specTexMutator%"/>
+			<mutator name="ROUGHNESS_TEX" value="%roughnessTexMutator%"/>
+			<mutator name="METAL_TEX" value="%metalTexMutator%"/>
+			<mutator name="NORMAL_TEX" value="%normalTexMutator%"/>
+			<mutator name="PARALLAX" value="%parallaxMutator%"/>
+			<mutator name="EMISSIVE_TEX" value="%emissiveTexMutator%"/>
+			<mutator name="ALPHA_TEST" value="%alphaTestMutator%"/>
+		</mutation>
+	</technique>
+
+	<technique name="Shadow" shaderProgram="AnKi/Shaders/GBufferGeneric.ankiprog">
+		<mutation>
+			<mutator name="TECHNIQUE" value="2"/>
+			<mutator name="DIFFUSE_TEX" value="%diffTexMutator%"/>
+			<mutator name="SPECULAR_TEX" value="%specTexMutator%"/>
+			<mutator name="ROUGHNESS_TEX" value="%roughnessTexMutator%"/>
+			<mutator name="METAL_TEX" value="%metalTexMutator%"/>
+			<mutator name="NORMAL_TEX" value="%normalTexMutator%"/>
+			<mutator name="PARALLAX" value="%parallaxMutator%"/>
+			<mutator name="EMISSIVE_TEX" value="%emissiveTexMutator%"/>
+			<mutator name="ALPHA_TEST" value="%alphaTestMutator%"/>
+		</mutation>
+	</technique>
+
+	%rayTracing%
 
 	<inputs>
 		%parallaxInput%
-
 		%diff%
 		%spec%
 		%roughness%
@@ -38,13 +70,12 @@ const char* MATERIAL_TEMPLATE = R"(<!-- This file is auto generated by ImporterM
 )";
 
 const char* RT_MATERIAL_TEMPLATE = R"(
-<rtMaterial>
-	<rayType type="shadows" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
+	<technique name="RtShadow" shaderProgram="AnKi/Shaders/RtShadowsHit.ankiprog">
 		<mutation>
 			<mutator name="ALPHA_TEXTURE" value="0"/>
 		</mutation>
-	</rayType>
-</rtMaterial>)";
+	</technique>
+)";
 
 static CString getTextureUri(const cgltf_texture_view& view)
 {
@@ -94,7 +125,7 @@ static Error findConstantColorsInImage(CString fname, Vec4& constantColor, Gener
 	return Error::NONE;
 }
 
-Error GltfImporter::writeMaterial(const cgltf_material& mtl, RayTypeBit usedRayTypes)
+Error GltfImporter::writeMaterial(const cgltf_material& mtl, Bool writeRayTracing)
 {
 	StringAuto fname(m_alloc);
 	fname.sprintf("%s%s", m_outDir.cstr(), computeMaterialResourceFilename(mtl).cstr());
@@ -114,9 +145,9 @@ Error GltfImporter::writeMaterial(const cgltf_material& mtl, RayTypeBit usedRayT
 	xml.append("\n");
 	xml.append(MATERIAL_TEMPLATE);
 
-	if(!!(usedRayTypes & RayTypeBit::SHADOWS))
+	if(writeRayTracing)
 	{
-		xml.append(RT_MATERIAL_TEMPLATE);
+		xml.replaceAll("%rayTracing%", RT_MATERIAL_TEMPLATE);
 	}
 
 	// Diffuse

+ 1 - 1
AnKi/Renderer/AccelerationStructureBuilder.cpp

@@ -35,7 +35,7 @@ void AccelerationStructureBuilder::populateRenderGraph(RenderingContext& ctx)
 		AccelerationStructureInstance& out = instances[instanceIdx];
 		::new(&out) AccelerationStructureInstance();
 		out.m_bottomLevel.reset(element.m_bottomLevelAccelerationStructure);
-		memcpy(&out.m_transform, &element.m_modelDescriptor.m_worldTransform[0], sizeof(out.m_transform));
+		memcpy(&out.m_transform, &element.m_transform, sizeof(out.m_transform));
 		out.m_hitgroupSbtRecordIndex = instanceIdx;
 		out.m_mask = 0xFF;
 	}

+ 1 - 1
AnKi/Renderer/Dbg.cpp

@@ -72,7 +72,7 @@ void Dbg::run(RenderPassWorkContext& rgraphCtx, const RenderingContext& ctx)
 	dctx.m_frameAllocator = ctx.m_tempAllocator;
 	dctx.m_commandBuffer = cmdb;
 	dctx.m_sampler = m_r->getSamplers().m_trilinearRepeatAniso;
-	dctx.m_key = RenderingKey(Pass::FS, 0, 1, false, false);
+	dctx.m_key = RenderingKey(RenderingTechnique::FORWARD, 0, 1, false, false);
 	dctx.m_debugDraw = true;
 	dctx.m_debugDrawFlags = m_debugDrawFlags;
 

+ 5 - 4
AnKi/Renderer/Drawer.cpp

@@ -39,9 +39,10 @@ RenderableDrawer::~RenderableDrawer()
 {
 }
 
-void RenderableDrawer::drawRange(Pass pass, const Mat4& viewMat, const Mat4& viewProjMat, const Mat4& prevViewProjMat,
-								 CommandBufferPtr cmdb, SamplerPtr sampler, const RenderableQueueElement* begin,
-								 const RenderableQueueElement* end, U32 minLod, U32 maxLod)
+void RenderableDrawer::drawRange(RenderingTechnique technique, const Mat4& viewMat, const Mat4& viewProjMat,
+								 const Mat4& prevViewProjMat, CommandBufferPtr cmdb, SamplerPtr sampler,
+								 const RenderableQueueElement* begin, const RenderableQueueElement* end, U32 minLod,
+								 U32 maxLod)
 {
 	ANKI_ASSERT(begin && end && begin < end);
 
@@ -67,7 +68,7 @@ void RenderableDrawer::drawRange(Pass pass, const Mat4& viewMat, const Mat4& vie
 	ctx.m_queueCtx.m_stagingGpuAllocator = &m_r->getStagingGpuMemory();
 	ctx.m_queueCtx.m_commandBuffer = cmdb;
 	ctx.m_queueCtx.m_sampler = sampler;
-	ctx.m_queueCtx.m_key = RenderingKey(pass, 0, 1, false, false);
+	ctx.m_queueCtx.m_key = RenderingKey(technique, 0, 1, false, false);
 	ctx.m_queueCtx.m_debugDraw = false;
 	ctx.m_queueCtx.m_globalUniforms.m_buffer = globalUniformsToken.m_buffer;
 	ctx.m_queueCtx.m_globalUniforms.m_offset = globalUniformsToken.m_offset;

+ 4 - 3
AnKi/Renderer/Drawer.h

@@ -31,9 +31,10 @@ public:
 
 	~RenderableDrawer();
 
-	void drawRange(Pass pass, const Mat4& viewMat, const Mat4& viewProjMat, const Mat4& prevViewProjMat,
-				   CommandBufferPtr cmdb, SamplerPtr sampler, const RenderableQueueElement* begin,
-				   const RenderableQueueElement* end, U32 minLod = 0, U32 maxLod = MAX_LOD_COUNT - 1);
+	void drawRange(RenderingTechnique technique, const Mat4& viewMat, const Mat4& viewProjMat,
+				   const Mat4& prevViewProjMat, CommandBufferPtr cmdb, SamplerPtr sampler,
+				   const RenderableQueueElement* begin, const RenderableQueueElement* end, U32 minLod = 0,
+				   U32 maxLod = MAX_LOD_COUNT - 1);
 
 private:
 	Renderer* m_r;

+ 2 - 1
AnKi/Renderer/ForwardShading.cpp

@@ -46,7 +46,8 @@ void ForwardShading::run(const RenderingContext& ctx, RenderPassWorkContext& rgr
 		bindStorage(cmdb, 0, 7, rsrc.m_clustersToken);
 
 		// Start drawing
-		m_r->getSceneDrawer().drawRange(Pass::FS, ctx.m_matrices.m_view, ctx.m_matrices.m_viewProjectionJitter,
+		m_r->getSceneDrawer().drawRange(RenderingTechnique::FORWARD, ctx.m_matrices.m_view,
+										ctx.m_matrices.m_viewProjectionJitter,
 										ctx.m_prevMatrices.m_viewProjectionJitter, cmdb,
 										m_r->getSamplers().m_trilinearRepeatAnisoResolutionScalingBias,
 										ctx.m_renderQueue->m_forwardShadingRenderables.getBegin() + start,

+ 4 - 2
AnKi/Renderer/GBuffer.cpp

@@ -128,7 +128,8 @@ void GBuffer::runInThread(const RenderingContext& ctx, RenderPassWorkContext& rg
 		}
 
 		ANKI_ASSERT(earlyZStart < earlyZEnd && earlyZEnd <= I32(earlyZCount));
-		m_r->getSceneDrawer().drawRange(Pass::EZ, ctx.m_matrices.m_view, ctx.m_matrices.m_viewProjectionJitter,
+		m_r->getSceneDrawer().drawRange(RenderingTechnique::GBUFFER_EARLY_Z, ctx.m_matrices.m_view,
+										ctx.m_matrices.m_viewProjectionJitter,
 										ctx.m_matrices.m_jitter * ctx.m_prevMatrices.m_viewProjection, cmdb,
 										m_r->getSamplers().m_trilinearRepeatAnisoResolutionScalingBias,
 										ctx.m_renderQueue->m_earlyZRenderables.getBegin() + earlyZStart,
@@ -150,7 +151,8 @@ void GBuffer::runInThread(const RenderingContext& ctx, RenderPassWorkContext& rg
 		cmdb->setDepthCompareOperation(CompareOperation::LESS_EQUAL);
 
 		ANKI_ASSERT(colorStart < colorEnd && colorEnd <= I32(ctx.m_renderQueue->m_renderables.getSize()));
-		m_r->getSceneDrawer().drawRange(Pass::GB, ctx.m_matrices.m_view, ctx.m_matrices.m_viewProjectionJitter,
+		m_r->getSceneDrawer().drawRange(RenderingTechnique::GBUFFER, ctx.m_matrices.m_view,
+										ctx.m_matrices.m_viewProjectionJitter,
 										ctx.m_matrices.m_jitter * ctx.m_prevMatrices.m_viewProjection, cmdb,
 										m_r->getSamplers().m_trilinearRepeatAnisoResolutionScalingBias,
 										ctx.m_renderQueue->m_renderables.getBegin() + colorStart,

+ 2 - 2
AnKi/Renderer/IndirectDiffuseProbes.cpp

@@ -570,7 +570,7 @@ void IndirectDiffuseProbes::runGBufferInThread(RenderPassWorkContext& rgraphCtx,
 
 			ANKI_ASSERT(localStart >= 0 && localEnd <= faceDrawcallCount);
 			m_r->getSceneDrawer().drawRange(
-				Pass::GB, rqueue.m_viewMatrix, rqueue.m_viewProjectionMatrix,
+				RenderingTechnique::GBUFFER, rqueue.m_viewMatrix, rqueue.m_viewProjectionMatrix,
 				Mat4::getIdentity(), // Don't care about prev mats since we don't care about velocity
 				cmdb, m_r->getSamplers().m_trilinearRepeat, rqueue.m_renderables.getBegin() + localStart,
 				rqueue.m_renderables.getBegin() + localEnd, MAX_LOD_COUNT - 1, MAX_LOD_COUNT - 1);
@@ -621,7 +621,7 @@ void IndirectDiffuseProbes::runShadowmappingInThread(RenderPassWorkContext& rgra
 
 			ANKI_ASSERT(localStart >= 0 && localEnd <= faceDrawcallCount);
 			m_r->getSceneDrawer().drawRange(
-				Pass::SM, cascadeRenderQueue.m_viewMatrix, cascadeRenderQueue.m_viewProjectionMatrix,
+				RenderingTechnique::SHADOW, cascadeRenderQueue.m_viewMatrix, cascadeRenderQueue.m_viewProjectionMatrix,
 				Mat4::getIdentity(), // Don't care about prev matrices here
 				cmdb, m_r->getSamplers().m_trilinearRepeatAniso,
 				cascadeRenderQueue.m_renderables.getBegin() + localStart,

+ 2 - 2
AnKi/Renderer/ProbeReflections.cpp

@@ -351,7 +351,7 @@ void ProbeReflections::runGBuffer(RenderPassWorkContext& rgraphCtx)
 			const RenderQueue& rqueue = *probe.m_renderQueues[faceIdx];
 			ANKI_ASSERT(localStart >= 0 && localEnd <= faceDrawcallCount);
 			m_r->getSceneDrawer().drawRange(
-				Pass::GB, rqueue.m_viewMatrix, rqueue.m_viewProjectionMatrix,
+				RenderingTechnique::GBUFFER, rqueue.m_viewMatrix, rqueue.m_viewProjectionMatrix,
 				Mat4::getIdentity(), // Don't care about prev mats
 				cmdb, m_r->getSamplers().m_trilinearRepeat, rqueue.m_renderables.getBegin() + localStart,
 				rqueue.m_renderables.getBegin() + localEnd, MAX_LOD_COUNT - 1, MAX_LOD_COUNT - 1);
@@ -724,7 +724,7 @@ void ProbeReflections::runShadowMapping(RenderPassWorkContext& rgraphCtx)
 
 			ANKI_ASSERT(localStart >= 0 && localEnd <= faceDrawcallCount);
 			m_r->getSceneDrawer().drawRange(
-				Pass::SM, cascadeRenderQueue.m_viewMatrix, cascadeRenderQueue.m_viewProjectionMatrix,
+				RenderingTechnique::SHADOW, cascadeRenderQueue.m_viewMatrix, cascadeRenderQueue.m_viewProjectionMatrix,
 				Mat4::getIdentity(), // Don't care about prev matrices here
 				cmdb, m_r->getSamplers().m_trilinearRepeatAniso,
 				cascadeRenderQueue.m_renderables.getBegin() + localStart,

+ 4 - 4
AnKi/Renderer/RenderQueue.h

@@ -367,11 +367,11 @@ class RayTracingInstanceQueueElement final
 {
 public:
 	AccelerationStructure* m_bottomLevelAccelerationStructure;
-	ModelGpuDescriptor m_modelDescriptor;
-	Array<U32, U(RayType::COUNT)> m_shaderGroupHandleIndices;
+	U32 m_shaderGroupHandleIndex;
 
-	/// This points to the GR objects that are m_modelDescriptor is referencing. Use this to add a refcount to avoid
-	/// accidential deletions.
+	Mat3x4 m_transform; // TODO rm when you'll add the RenderableGpuView
+
+	/// This points to the GR objects used by this element. Use this to add a refcount to avoid accidential deletions.
 	Array<GrObject*, 8> m_grObjects;
 	U32 m_grObjectCount;
 };

+ 3 - 3
AnKi/Renderer/Renderer.cpp

@@ -480,15 +480,15 @@ TexturePtr Renderer::createAndClearRenderTarget(const TextureInitInfo& inf, cons
 					Array<TextureUsageBit, MAX_COLOR_ATTACHMENTS> colUsage = {};
 					TextureUsageBit dsUsage = TextureUsageBit::NONE;
 
-					if(formatIsDepthStencil(inf.m_format))
+					if(getFormatInfo(inf.m_format).isDepthStencil())
 					{
 						DepthStencilAspectBit aspect = DepthStencilAspectBit::NONE;
-						if(formatIsDepth(inf.m_format))
+						if(getFormatInfo(inf.m_format).isDepth())
 						{
 							aspect |= DepthStencilAspectBit::DEPTH;
 						}
 
-						if(formatIsStencil(inf.m_format))
+						if(getFormatInfo(inf.m_format).isStencil())
 						{
 							aspect |= DepthStencilAspectBit::STENCIL;
 						}

+ 2 - 3
AnKi/Renderer/RtShadows.cpp

@@ -640,9 +640,8 @@ void RtShadows::buildSbt(RenderingContext& ctx)
 		const RayTracingInstanceQueueElement& element = instanceElements[instanceIdx];
 
 		// Init SBT record
-		memcpy(sbt, &shaderGroupHandles[element.m_shaderGroupHandleIndices[RayType::SHADOWS] * shaderHandleSize],
-			   shaderHandleSize);
-		memcpy(sbt + shaderHandleSize, &element.m_modelDescriptor, sizeof(element.m_modelDescriptor));
+		memcpy(sbt, &shaderGroupHandles[element.m_shaderGroupHandleIndex * shaderHandleSize], shaderHandleSize);
+		// TODO add some reference to the RenderableGpuView
 		sbt += m_sbtRecordSize;
 	}
 

+ 1 - 1
AnKi/Renderer/ShadowMapping.cpp

@@ -222,7 +222,7 @@ void ShadowMapping::runShadowMapping(RenderPassWorkContext& rgraphCtx)
 		cmdb->setViewport(work.m_viewport[0], work.m_viewport[1], work.m_viewport[2], work.m_viewport[3]);
 		cmdb->setScissor(work.m_viewport[0], work.m_viewport[1], work.m_viewport[2], work.m_viewport[3]);
 
-		m_r->getSceneDrawer().drawRange(Pass::SM, work.m_renderQueue->m_viewMatrix,
+		m_r->getSceneDrawer().drawRange(RenderingTechnique::SHADOW, work.m_renderQueue->m_viewMatrix,
 										work.m_renderQueue->m_viewProjectionMatrix,
 										Mat4::getIdentity(), // Don't care about prev matrices here
 										cmdb, m_r->getSamplers().m_trilinearRepeatAniso,

+ 0 - 28
AnKi/Resource/Common.h

@@ -30,34 +30,6 @@ class TransferGpuAllocatorHandle;
 #define ANKI_RESOURCE_LOGW(...) ANKI_LOG("RSRC", WARNING, __VA_ARGS__)
 #define ANKI_RESOURCE_LOGF(...) ANKI_LOG("RSRC", FATAL, __VA_ARGS__)
 
-/// @name Constants
-/// @{
-
-enum class RayType : U8
-{
-	SHADOWS,
-	GI,
-	REFLECTIONS,
-	PATH_TRACING,
-
-	COUNT,
-	FIRST = 0
-};
-ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(RayType)
-
-enum class RayTypeBit : U8
-{
-	NONE,
-	SHADOWS = 1 << 0,
-	GI = 1 << 1,
-	REFLECTIONS = 1 << 2,
-	PATH_TRACING = 1 << 3,
-
-	ALL = SHADOWS | GI | REFLECTIONS | PATH_TRACING
-};
-ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(RayTypeBit)
-/// @}
-
 /// Deleter for ResourcePtr.
 template<typename T>
 class ResourcePtrDeleter

+ 17 - 32
AnKi/Scene/ModelNode.cpp

@@ -176,7 +176,8 @@ void ModelNode::initRenderComponents()
 
 		rc.setFlagsFromMaterial(model->getModelPatches()[patchIdx].getMaterial());
 
-		if(model->getModelPatches()[patchIdx].getSupportedRayTracingTypes() != RayTypeBit::NONE)
+		if(!!(model->getModelPatches()[patchIdx].getMaterial()->getRenderingTechniques()
+			  & RenderingTechniqueBit::ANY_RT))
 		{
 			rc.initRayTracing(
 				[](U32 lod, const void* userData, RayTracingInstanceQueueElement& el) {
@@ -228,7 +229,7 @@ void ModelNode::draw(RenderQueueDrawContext& ctx, ConstWeakArray<void*> userData
 			moved = moved || (trfs[i] != prevTrfs[i]);
 		}
 
-		ctx.m_key.setVelocity(moved && ctx.m_key.getPass() == Pass::GB);
+		ctx.m_key.setVelocity(moved && ctx.m_key.getRenderingTechnique() == RenderingTechnique::GBUFFER);
 		ctx.m_key.setSkinned(skinc.isEnabled());
 		ModelRenderingInfo modelInf;
 		patch.getRenderingInfo(ctx.m_key, modelInf);
@@ -246,14 +247,11 @@ void ModelNode::draw(RenderQueueDrawContext& ctx, ConstWeakArray<void*> userData
 															tokenPrev);
 			memcpy(trfs, &skinc.getPreviousFrameBoneTransforms()[0], boneCount * sizeof(Mat4));
 
-			ANKI_ASSERT(modelInf.m_boneTransformsBinding < MAX_U32);
-			cmdb->bindStorageBuffer(patch.getMaterial()->getDescriptorSetIndex(), modelInf.m_boneTransformsBinding,
-									token.m_buffer, token.m_offset, token.m_range);
+			cmdb->bindStorageBuffer(MATERIAL_SET_EXTERNAL, MATERIAL_BINDING_BONE_TRANSFORMS, token.m_buffer,
+									token.m_offset, token.m_range);
 
-			ANKI_ASSERT(modelInf.m_prevFrameBoneTransformsBinding < MAX_U32);
-			cmdb->bindStorageBuffer(patch.getMaterial()->getDescriptorSetIndex(),
-									modelInf.m_prevFrameBoneTransformsBinding, tokenPrev.m_buffer, tokenPrev.m_offset,
-									tokenPrev.m_range);
+			cmdb->bindStorageBuffer(MATERIAL_SET_EXTERNAL, MATERIAL_BINDING_PREVIOUS_BONE_TRANSFORMS,
+									tokenPrev.m_buffer, tokenPrev.m_offset, tokenPrev.m_range);
 		}
 
 		// Program
@@ -392,40 +390,27 @@ void ModelNode::setupRayTracingInstanceQueueElement(U32 lod, U32 modelPatchIdx,
 	const ModelComponent& modelc = getFirstComponentOfType<ModelComponent>();
 	const ModelPatch& patch = modelc.getModelResource()->getModelPatches()[modelPatchIdx];
 
+	RenderingKey key(RenderingTechnique::RT_SHADOW, lod, 1, false, false);
+
 	ModelRayTracingInfo info;
-	patch.getRayTracingInfo(lod, info);
+	patch.getRayTracingInfo(key, info);
 
 	memset(&el, 0, sizeof(el));
 
-	// AS
 	el.m_bottomLevelAccelerationStructure = info.m_bottomLevelAccelerationStructure.get();
 
-	// Set the descriptor
-	el.m_modelDescriptor = info.m_descriptor;
 	const MoveComponent& movec = getFirstComponentOfType<MoveComponent>();
-	const Mat3x4 worldTrf(movec.getWorldTransform());
-	memcpy(&el.m_modelDescriptor.m_worldTransform, &worldTrf, sizeof(worldTrf));
-	el.m_modelDescriptor.m_worldRotation = movec.getWorldTransform().getRotation().getRotationPart();
+	el.m_transform = Mat3x4(movec.getWorldTransform());
 
-	// Handles
-	for(RayType type : EnumIterable<RayType>())
-	{
-		if(!!(patch.getMaterial()->getSupportedRayTracingTypes() & RayTypeBit(1 << type)))
-		{
-			el.m_shaderGroupHandleIndices[type] = info.m_shaderGroupHandleIndices[type];
-		}
-		else
-		{
-			el.m_shaderGroupHandleIndices[type] = MAX_U32;
-		}
-	}
+	el.m_shaderGroupHandleIndex = info.m_shaderGroupHandleIndex;
 
 	// References
-	ANKI_ASSERT(info.m_grObjectReferenceCount <= el.m_grObjects.getSize());
-	el.m_grObjectCount = info.m_grObjectReferenceCount;
-	for(U32 i = 0; i < info.m_grObjectReferenceCount; ++i)
+	el.m_grObjectCount = info.m_grObjectReferences.getSize();
+	for(U32 i = 0; i < el.m_grObjectCount; ++i)
 	{
-		el.m_grObjects[i] = info.m_grObjectReferences[i].get();
+		// const_cast hack follows. To avoid the const you could copy m_grObjectReferences[i] to a GrObjectPtr and then
+		// call get() on that. But that will cost 2 atomic operations
+		el.m_grObjects[i] = const_cast<GrObject*>(info.m_grObjectReferences[i].get());
 	}
 }
 

+ 7 - 7
AnKi/ShaderCompiler/ShaderProgramDump.cpp

@@ -24,7 +24,7 @@ static void disassembleBlockInstance(const ShaderProgramBinaryBlockInstance& ins
 		const ShaderProgramBinaryVariable& var = block.m_variables[varInstance.m_index];
 
 		lines.pushBackSprintf(ANKI_TAB ANKI_TAB ANKI_TAB ANKI_TAB "%-48s type %8s blockInfo %d,%d,%d,%d\n",
-							  var.m_name.getBegin(), shaderVariableDataTypeToString(var.m_type).cstr(),
+							  var.m_name.getBegin(), getShaderVariableDataTypeInfo(var.m_type).m_name,
 							  varInstance.m_blockInfo.m_offset, varInstance.m_blockInfo.m_arraySize,
 							  varInstance.m_blockInfo.m_arrayStride, varInstance.m_blockInfo.m_matrixStride);
 	}
@@ -38,7 +38,7 @@ static void disassembleBlock(const ShaderProgramBinaryBlock& block, StringListAu
 	for(const ShaderProgramBinaryVariable& var : block.m_variables)
 	{
 		lines.pushBackSprintf(ANKI_TAB ANKI_TAB "%-48s type %8s\n", var.m_name.getBegin(),
-							  shaderVariableDataTypeToString(var.m_type).cstr());
+							  getShaderVariableDataTypeInfo(var.m_type).m_name);
 	}
 }
 
@@ -119,7 +119,7 @@ void dumpShaderProgramBinary(const ShaderProgramBinary& binary, StringAuto& huma
 		for(const ShaderProgramBinaryOpaque& o : binary.m_opaques)
 		{
 			lines.pushBackSprintf(ANKI_TAB "%-32s set %4u binding %4u type %12s\n", o.m_name.getBegin(), o.m_set,
-								  o.m_binding, shaderVariableDataTypeToString(o.m_type).cstr());
+								  o.m_binding, getShaderVariableDataTypeInfo(o.m_type).m_name);
 		}
 	}
 	else
@@ -133,7 +133,7 @@ void dumpShaderProgramBinary(const ShaderProgramBinary& binary, StringAuto& huma
 		for(const ShaderProgramBinaryConstant& c : binary.m_constants)
 		{
 			lines.pushBackSprintf(ANKI_TAB "%-32s type %8s id %4u\n", c.m_name.getBegin(),
-								  shaderVariableDataTypeToString(c.m_type).cstr(), c.m_constantId);
+								  getShaderVariableDataTypeInfo(c.m_type).m_name, c.m_constantId);
 		}
 	}
 	else
@@ -152,7 +152,7 @@ void dumpShaderProgramBinary(const ShaderProgramBinary& binary, StringAuto& huma
 			{
 				const CString typeStr = (member.m_type == ShaderVariableDataType::NONE)
 											? &binary.m_structs[member.m_structIndex].m_name[0]
-											: shaderVariableDataTypeToString(member.m_type);
+											: getShaderVariableDataTypeInfo(member.m_type).m_name;
 				lines.pushBackSprintf(ANKI_TAB ANKI_TAB "%-32s type %24s\n", member.m_name.getBegin(), typeStr.cstr());
 			}
 		}
@@ -220,7 +220,7 @@ void dumpShaderProgramBinary(const ShaderProgramBinary& binary, StringAuto& huma
 				const ShaderProgramBinaryOpaque& o = binary.m_opaques[instance.m_index];
 				lines.pushBackSprintf(ANKI_TAB ANKI_TAB ANKI_TAB "%-32s set %4u binding %4u type %12s arraySize %4u\n",
 									  o.m_name.getBegin(), o.m_set, o.m_binding,
-									  shaderVariableDataTypeToString(o.m_type).cstr(), instance.m_arraySize);
+									  getShaderVariableDataTypeInfo(o.m_type).m_name, instance.m_arraySize);
 			}
 		}
 
@@ -239,7 +239,7 @@ void dumpShaderProgramBinary(const ShaderProgramBinary& binary, StringAuto& huma
 			{
 				const ShaderProgramBinaryConstant& c = binary.m_constants[instance.m_index];
 				lines.pushBackSprintf(ANKI_TAB ANKI_TAB ANKI_TAB "%-32s type %8s id %4u\n", c.m_name.getBegin(),
-									  shaderVariableDataTypeToString(c.m_type).cstr(), c.m_constantId);
+									  getShaderVariableDataTypeInfo(c.m_type).m_name, c.m_constantId);
 			}
 		}