12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
-
- namespace UnityEngine.Rendering.RadeonRays
- {
- internal class TraceGeometry
- {
- const uint kGroupSize = 64u;
- const uint kStackSize = 64u;
-
- private ComputeShader shaderTrace;
- private int kernelTrace;
-
- public TraceGeometry(RadeonRaysShaders shaders)
- {
- shaderTrace = shaders.intersector;
- kernelTrace = shaderTrace.FindKernel("TraceRays");
- }
-
- public void Execute(
- CommandBuffer cmd,
- GraphicsBuffer rays, uint rayCount, GraphicsBuffer indirectRayCount,
- RayQueryType queryType, RayQueryOutputType queryOutputType,
- GraphicsBuffer vertexBuffer, GraphicsBuffer indexBuffer,
- GraphicsBuffer bvh, uint bvhOffset, GraphicsBuffer scratch,
- GraphicsBuffer hits)
- {
- ConfigureShaderKeywords(cmd, indirectRayCount, queryType, queryOutputType);
-
- cmd.SetComputeIntParam(shaderTrace, SID.g_constants_ray_count, (int)rayCount);
- cmd.SetComputeIntParam(shaderTrace, SID.g_bvh_offset, (int)bvhOffset);
- cmd.SetComputeBufferParam(shaderTrace, kernelTrace, SID.g_bvh, bvh);
- if (indirectRayCount != null)
- cmd.SetComputeBufferParam(shaderTrace, kernelTrace, SID.g_ray_count, indirectRayCount);
- cmd.SetComputeBufferParam(shaderTrace, kernelTrace, SID.g_rays, rays);
- cmd.SetComputeBufferParam(shaderTrace, kernelTrace, SID.g_hits, hits);
- cmd.SetComputeBufferParam(shaderTrace, kernelTrace, SID.g_stack, scratch);
- cmd.SetComputeBufferParam(shaderTrace, kernelTrace, Shader.PropertyToID("g_trace_index_buffer"), indexBuffer);
- cmd.SetComputeBufferParam(shaderTrace, kernelTrace, Shader.PropertyToID("g_trace_vertex_buffer"), vertexBuffer);
- cmd.SetComputeIntParam(shaderTrace, Shader.PropertyToID("g_trace_vertex_stride"), 3);
-
- cmd.DispatchCompute(shaderTrace, kernelTrace, (int)Common.CeilDivide(rayCount, kGroupSize), 1, 1);
- }
-
- static public ulong GetScratchDataSizeInDwords(uint rayCount)
- {
- return kStackSize * rayCount;
- }
- void ConfigureShaderKeywords(CommandBuffer cmd, GraphicsBuffer indirectRayCount, RayQueryType queryType, RayQueryOutputType queryOutputType)
- {
- Common.EnableKeyword(cmd, shaderTrace, "INDIRECT_TRACE", indirectRayCount != null);
- Common.EnableKeyword(cmd, shaderTrace, "FULL_HIT", queryOutputType == RayQueryOutputType.FullHitData);
- Common.EnableKeyword(cmd, shaderTrace, "ANY_HIT", queryType == RayQueryType.AnyHit);
- }
- }
-
- }
|