Repository navigation
perf(agc): draw non-indexed mesh indirect draws from their records on the GPU - #7894
eljackjoestar-cmd wants to merge 1 commit into
Conversation
… the GPU A mesh-path indirect draw took the GPU-side path only when it was indexed. An auto draw was classified NonVertexPath, so the driver read its records on the CPU and waited for the GPU writes queued before them. Resolve the mesh arguments of an auto draw on the GPU as well. It has no index buffer, so its count is not clamped, and its start vertex reaches the shader only through a base-vertex user SGPR, which the GPU-side path requires to be absent, so its first index is 0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
This pull request is labeled |
|
Raw
{"commit":"b3d5d03d6d13","dirty":false,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":180,"ms":10304.757},"interval_start_s":97.151,"interval_end_s":107.456,"presents":31,"frame_ms":{"p50":323.520,"p90":378.092,"p99":394.011,"max":394.011},"gpu_busy_ms_per_present":239.873,"worker_busy_pct":{"queue worker 0x0":99.442,"queue worker 0x20":79.429},"top_phases_ms_per_frame":{"Driver.Packet":593.029,"Driver.Packet.dispatch":200.304,"Driver.Packet.draw":175.543,"Driver.Draw":175.115,"Driver.Dispatch":162.771,"Driver.Draw.shader_compile_and_link":129.831,"Shader.DrawStage":126.023,"Shader.DrawStage.capture_resources":114.033},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":false,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":211,"ms":10296.895},"interval_start_s":107.456,"interval_end_s":117.753,"presents":30,"frame_ms":{"p50":332.659,"p90":396.147,"p99":410.646,"max":410.646},"gpu_busy_ms_per_present":249.559,"worker_busy_pct":{"queue worker 0x0":99.445,"queue worker 0x20":79.392},"top_phases_ms_per_frame":{"Driver.Packet":612.120,"Driver.Packet.dispatch":208.945,"Driver.Packet.draw":177.392,"Driver.Draw":176.964,"Driver.Dispatch":169.228,"Driver.Draw.shader_compile_and_link":127.897,"Shader.DrawStage":124.051,"Shader.DrawStage.capture_resources":112.126},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":false,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":241,"ms":10301.473},"interval_start_s":117.753,"interval_end_s":128.054,"presents":31,"frame_ms":{"p50":320.415,"p90":378.110,"p99":406.711,"max":406.711},"gpu_busy_ms_per_present":233.692,"worker_busy_pct":{"queue worker 0x0":99.433,"queue worker 0x20":80.008},"top_phases_ms_per_frame":{"Driver.Packet":594.797,"Driver.Packet.dispatch":203.123,"Driver.Packet.draw":172.987,"Driver.Draw":172.572,"Driver.Dispatch":165.716,"Driver.Draw.shader_compile_and_link":123.544,"Shader.DrawStage":119.765,"Shader.DrawStage.capture_resources":107.905},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":false,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":272,"ms":10271.213},"interval_start_s":128.054,"interval_end_s":138.326,"presents":22,"frame_ms":{"p50":322.137,"p90":714.764,"p99":2029.634,"max":2029.634},"gpu_busy_ms_per_present":239.744,"worker_busy_pct":{"queue worker 0x0":99.599,"queue worker 0x20":84.160},"top_phases_ms_per_frame":{"Driver.Packet":854.931,"Driver.Packet.dispatch":256.277,"Driver.Packet.draw":252.029,"Driver.Draw":251.606,"Driver.Dispatch":215.891,"Driver.Packet.memory_wait":185.896,"Driver.Draw.shader_compile_and_link":155.459,"Shader.DrawStage":151.578},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":false,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":294,"ms":10227.457},"interval_start_s":138.326,"interval_end_s":148.553,"presents":29,"frame_ms":{"p50":324.315,"p90":402.991,"p99":952.994,"max":952.994},"gpu_busy_ms_per_present":311.509,"worker_busy_pct":{"queue worker 0x0":99.498,"queue worker 0x20":80.261},"top_phases_ms_per_frame":{"Driver.Packet":630.443,"Driver.Packet.dispatch":227.232,"Driver.Packet.draw":193.128,"Driver.Draw":192.717,"Driver.Dispatch":190.916,"Driver.Draw.shader_compile_and_link":143.039,"Shader.DrawStage":139.266,"Shader.DrawStage.capture_resources":127.341},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":158,"ms":10183.697},"interval_start_s":98.414,"interval_end_s":108.598,"presents":24,"frame_ms":{"p50":414.613,"p90":465.380,"p99":492.903,"max":492.903},"gpu_busy_ms_per_present":243.381,"worker_busy_pct":{"queue worker 0x0":99.544,"queue worker 0x20":70.336},"top_phases_ms_per_frame":{"Driver.Packet":717.120,"Driver.Packet.dispatch":229.389,"Driver.Packet.draw":203.044,"Driver.Draw":202.580,"Driver.Dispatch":183.940,"Driver.Draw.shader_compile_and_link":134.263,"Shader.DrawStage":130.193,"Driver.Packet.memory_wait":127.053},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":182,"ms":10010.573},"interval_start_s":108.598,"interval_end_s":118.608,"presents":24,"frame_ms":{"p50":415.091,"p90":433.269,"p99":456.517,"max":456.517},"gpu_busy_ms_per_present":242.594,"worker_busy_pct":{"queue worker 0x0":99.574,"queue worker 0x20":69.341},"top_phases_ms_per_frame":{"Driver.Packet":702.726,"Driver.Packet.dispatch":220.210,"Driver.Packet.draw":207.951,"Driver.Draw":207.498,"Driver.Dispatch":172.129,"Driver.Draw.shader_compile_and_link":147.972,"Shader.DrawStage":143.977,"Shader.DrawStage.capture_resources":131.710},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":206,"ms":10391.564},"interval_start_s":118.608,"interval_end_s":129.000,"presents":25,"frame_ms":{"p50":409.266,"p90":436.941,"p99":463.050,"max":463.050},"gpu_busy_ms_per_present":242.726,"worker_busy_pct":{"queue worker 0x0":99.551,"queue worker 0x20":69.535},"top_phases_ms_per_frame":{"Driver.Packet":700.834,"Driver.Packet.dispatch":223.082,"Driver.Packet.draw":205.833,"Driver.Draw":205.379,"Driver.Dispatch":174.403,"Driver.Draw.shader_compile_and_link":143.296,"Shader.DrawStage":139.319,"Shader.DrawStage.capture_resources":127.068},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":231,"ms":10010.716},"interval_start_s":129.000,"interval_end_s":139.011,"presents":24,"frame_ms":{"p50":414.963,"p90":437.545,"p99":451.937,"max":451.937},"gpu_busy_ms_per_present":242.755,"worker_busy_pct":{"queue worker 0x0":99.558,"queue worker 0x20":69.558},"top_phases_ms_per_frame":{"Driver.Packet":703.488,"Driver.Packet.dispatch":224.583,"Driver.Packet.draw":202.465,"Driver.Draw":202.010,"Driver.Dispatch":175.397,"Driver.Draw.shader_compile_and_link":141.532,"Shader.DrawStage":137.472,"Shader.DrawStage.capture_resources":125.309},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":255,"ms":10243.461},"interval_start_s":139.011,"interval_end_s":149.254,"presents":25,"frame_ms":{"p50":410.560,"p90":419.148,"p99":423.570,"max":423.570},"gpu_busy_ms_per_present":242.803,"worker_busy_pct":{"queue worker 0x0":99.528,"queue worker 0x20":69.861},"top_phases_ms_per_frame":{"Driver.Packet":692.295,"Driver.Packet.dispatch":220.776,"Driver.Packet.draw":198.649,"Driver.Draw":198.193,"Driver.Dispatch":176.640,"Driver.Draw.shader_compile_and_link":139.033,"Shader.DrawStage":134.937,"Shader.DrawStage.capture_resources":122.599},"trace_dropped":false,"trace":""} |
|
Raw
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":171,"ms":10165.210},"interval_start_s":94.075,"interval_end_s":104.240,"presents":31,"frame_ms":{"p50":318.890,"p90":359.604,"p99":439.638,"max":439.638},"gpu_busy_ms_per_present":239.438,"worker_busy_pct":{"queue worker 0x0":99.446,"queue worker 0x20":79.816},"top_phases_ms_per_frame":{"Driver.Packet":586.334,"Driver.Packet.dispatch":197.897,"Driver.Packet.draw":173.588,"Driver.Draw":173.184,"Driver.Dispatch":160.715,"Driver.Draw.draw_and_resource_release":129.954,"Driver.Packet.memory_wait":105.052,"Recorder.WaitSerial":97.598},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":202,"ms":10176.665},"interval_start_s":104.240,"interval_end_s":114.417,"presents":30,"frame_ms":{"p50":327.739,"p90":388.024,"p99":409.439,"max":409.439},"gpu_busy_ms_per_present":239.772,"worker_busy_pct":{"queue worker 0x0":99.453,"queue worker 0x20":78.567},"top_phases_ms_per_frame":{"Driver.Packet":601.913,"Driver.Packet.dispatch":207.989,"Driver.Packet.draw":170.738,"Driver.Draw":170.337,"Driver.Dispatch":169.226,"Driver.Draw.draw_and_resource_release":125.373,"Driver.Packet.memory_wait":106.640,"Recorder.WaitSerial":95.334},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":232,"ms":10232.896},"interval_start_s":114.417,"interval_end_s":124.650,"presents":31,"frame_ms":{"p50":321.831,"p90":355.476,"p99":395.104,"max":395.104},"gpu_busy_ms_per_present":248.553,"worker_busy_pct":{"queue worker 0x0":99.443,"queue worker 0x20":79.054},"top_phases_ms_per_frame":{"Driver.Packet":587.718,"Driver.Packet.dispatch":199.681,"Driver.Packet.draw":171.480,"Driver.Draw":171.080,"Driver.Dispatch":160.592,"Driver.Draw.draw_and_resource_release":127.911,"Driver.Packet.memory_wait":104.881,"Recorder.WaitSerial":99.073},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":263,"ms":10465.700},"interval_start_s":124.650,"interval_end_s":135.115,"presents":29,"frame_ms":{"p50":318.415,"p90":383.992,"p99":1329.885,"max":1329.885},"gpu_busy_ms_per_present":230.544,"worker_busy_pct":{"queue worker 0x0":99.499,"queue worker 0x20":80.697},"top_phases_ms_per_frame":{"Driver.Packet":648.488,"Driver.Packet.dispatch":207.307,"Driver.Packet.draw":195.159,"Driver.Draw":194.757,"Driver.Dispatch":169.022,"Driver.Draw.draw_and_resource_release":130.228,"Driver.Packet.memory_wait":122.267,"Recorder.WaitSerial":100.333},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":292,"ms":10058.120},"interval_start_s":135.115,"interval_end_s":145.174,"presents":22,"frame_ms":{"p50":324.341,"p90":724.263,"p99":2012.645,"max":2012.645},"gpu_busy_ms_per_present":333.386,"worker_busy_pct":{"queue worker 0x0":99.598,"queue worker 0x20":82.115},"top_phases_ms_per_frame":{"Driver.Packet":820.853,"Driver.Packet.dispatch":282.150,"Driver.Dispatch":243.492,"Driver.Packet.draw":237.983,"Driver.Draw":237.580,"Driver.Draw.draw_and_resource_release":177.445,"Driver.Packet.memory_wait":155.284,"Recorder.WaitSerial":150.152},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":186,"ms":10167.926},"interval_start_s":96.956,"interval_end_s":107.124,"presents":34,"frame_ms":{"p50":294.000,"p90":326.705,"p99":354.918,"max":354.918},"gpu_busy_ms_per_present":243.715,"worker_busy_pct":{"queue worker 0x0":99.365,"queue worker 0x20":87.487},"top_phases_ms_per_frame":{"Driver.Packet":557.411,"Driver.Packet.dispatch":197.073,"Driver.Packet.memory_wait":166.083,"Driver.Dispatch":161.009,"Recorder.WaitSerial":99.252,"Driver.Packet.prepare_memory":86.369,"Driver.Packet.draw":74.470,"Driver.Draw":74.040},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":220,"ms":10122.060},"interval_start_s":107.124,"interval_end_s":117.246,"presents":31,"frame_ms":{"p50":316.923,"p90":375.373,"p99":452.156,"max":452.156},"gpu_busy_ms_per_present":249.504,"worker_busy_pct":{"queue worker 0x0":99.422,"queue worker 0x20":84.902},"top_phases_ms_per_frame":{"Driver.Packet":599.835,"Driver.Packet.dispatch":221.500,"Driver.Dispatch":181.796,"Driver.Packet.memory_wait":162.126,"Recorder.WaitSerial":92.551,"Driver.Packet.prepare_memory":88.228,"Driver.Packet.draw":86.045,"Driver.Draw":85.594},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":251,"ms":10235.671},"interval_start_s":117.246,"interval_end_s":127.482,"presents":32,"frame_ms":{"p50":321.392,"p90":356.424,"p99":371.443,"max":371.443},"gpu_busy_ms_per_present":244.971,"worker_busy_pct":{"queue worker 0x0":99.432,"queue worker 0x20":87.269},"top_phases_ms_per_frame":{"Driver.Packet":595.662,"Driver.Packet.dispatch":213.106,"Driver.Dispatch":173.695,"Driver.Packet.memory_wait":170.652,"Recorder.WaitSerial":99.491,"Driver.Packet.prepare_memory":88.449,"Driver.Packet.draw":81.687,"Driver.Draw":81.257},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":283,"ms":10286.827},"interval_start_s":127.482,"interval_end_s":137.768,"presents":20,"frame_ms":{"p50":305.988,"p90":1338.224,"p99":2094.300,"max":2094.300},"gpu_busy_ms_per_present":349.487,"worker_busy_pct":{"queue worker 0x0":99.625,"queue worker 0x20":89.136},"top_phases_ms_per_frame":{"Driver.Packet":966.396,"Driver.Packet.memory_wait":320.808,"Driver.Packet.dispatch":311.530,"Driver.Dispatch":272.334,"Driver.Packet.draw":150.103,"Driver.Draw":149.642,"Driver.Packet.prepare_memory":134.617,"Recorder.WaitSerial":126.230},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":303,"ms":10187.071},"interval_start_s":137.768,"interval_end_s":147.956,"presents":34,"frame_ms":{"p50":299.774,"p90":306.955,"p99":310.686,"max":310.686},"gpu_busy_ms_per_present":244.012,"worker_busy_pct":{"queue worker 0x0":99.405,"queue worker 0x20":84.243},"top_phases_ms_per_frame":{"Driver.Packet":548.639,"Driver.Packet.dispatch":206.204,"Driver.Dispatch":171.506,"Driver.Packet.memory_wait":165.185,"Recorder.WaitSerial":92.035,"Driver.Packet.prepare_memory":75.372,"Driver.Packet.draw":74.253,"Driver.Draw":73.828},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":188,"ms":10066.957},"interval_start_s":94.924,"interval_end_s":104.991,"presents":33,"frame_ms":{"p50":294.115,"p90":343.950,"p99":378.991,"max":378.991},"gpu_busy_ms_per_present":240.608,"worker_busy_pct":{"queue worker 0x0":99.376,"queue worker 0x20":85.964},"top_phases_ms_per_frame":{"Driver.Packet":563.781,"Driver.Packet.dispatch":197.823,"Driver.Packet.memory_wait":167.471,"Driver.Dispatch":161.273,"Recorder.WaitSerial":95.631,"Driver.Packet.prepare_memory":85.060,"Driver.Packet.draw":78.051,"Driver.Draw":77.623},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":221,"ms":10052.331},"interval_start_s":104.991,"interval_end_s":115.043,"presents":32,"frame_ms":{"p50":306.471,"p90":353.728,"p99":400.881,"max":400.881},"gpu_busy_ms_per_present":242.282,"worker_busy_pct":{"queue worker 0x0":99.410,"queue worker 0x20":85.335},"top_phases_ms_per_frame":{"Driver.Packet":578.445,"Driver.Packet.dispatch":205.845,"Driver.Dispatch":168.533,"Driver.Packet.memory_wait":163.547,"Recorder.WaitSerial":95.208,"Driver.Packet.prepare_memory":85.222,"Driver.Packet.draw":82.070,"Driver.Draw":81.645},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":253,"ms":10140.293},"interval_start_s":115.043,"interval_end_s":125.183,"presents":34,"frame_ms":{"p50":293.469,"p90":322.416,"p99":345.655,"max":345.655},"gpu_busy_ms_per_present":241.119,"worker_busy_pct":{"queue worker 0x0":99.388,"queue worker 0x20":87.659},"top_phases_ms_per_frame":{"Driver.Packet":556.323,"Driver.Packet.dispatch":195.968,"Driver.Packet.memory_wait":169.226,"Driver.Dispatch":159.837,"Recorder.WaitSerial":96.724,"Driver.Packet.prepare_memory":84.705,"Driver.Packet.draw":72.979,"Driver.Draw":72.564},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":287,"ms":10032.948},"interval_start_s":125.183,"interval_end_s":135.216,"presents":19,"frame_ms":{"p50":320.643,"p90":1349.415,"p99":2016.644,"max":2016.644},"gpu_busy_ms_per_present":351.405,"worker_busy_pct":{"queue worker 0x0":99.650,"queue worker 0x20":89.298},"top_phases_ms_per_frame":{"Driver.Packet":992.802,"Driver.Packet.dispatch":334.308,"Driver.Packet.memory_wait":324.068,"Driver.Dispatch":292.742,"Driver.Packet.draw":147.983,"Driver.Draw":147.548,"Driver.Packet.prepare_memory":133.525,"Recorder.WaitSerial":128.467},"trace_dropped":false,"trace":""}
{"commit":"b3d5d03d6d13","dirty":true,"env":{"APS5_LAZY_SHADER_PREPARE":"1","APS5_NO_PAD_INPUT":"1","APS5_TRACE_DIR":"<path>","APS5_TRACE_SUMMARY_EVERY":"10"},"gpu":"NVIDIA GeForce RTX 5070","driver":"NVIDIA 617.14","os":"Windows 10.0.26300","resolution":"3840x2160","window":{"spec":"summary_every 10","first_present":306,"ms":10130.751},"interval_start_s":135.216,"interval_end_s":145.347,"presents":34,"frame_ms":{"p50":298.587,"p90":304.390,"p99":312.438,"max":312.438},"gpu_busy_ms_per_present":242.007,"worker_busy_pct":{"queue worker 0x0":99.388,"queue worker 0x20":84.425},"top_phases_ms_per_frame":{"Driver.Packet":546.351,"Driver.Packet.dispatch":204.939,"Driver.Dispatch":170.598,"Driver.Packet.memory_wait":159.677,"Recorder.WaitSerial":89.195,"Driver.Packet.prepare_memory":76.584,"Driver.Packet.draw":75.604,"Driver.Draw":75.194},"trace_dropped":false,"trace":""} |
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
|
adriadam10
left a comment
There was a problem hiding this comment.
The change reads correctly (indexed flag in the push word, first index 0 for an auto draw, the three new meshArgumentTests rows), but it should not land as is:
- Alone it is slower on your own scene: 2.40 vs 2.77 FPS (mesh-1 vs ctl-1/2, frame p50 415 ms vs 325 ms). It depends on #7891, which is still open and under review, so merging this first ships a regression. Please keep it until #7891 is merged, then rebase and re-measure with the final rule of #7891 (no temporary switch).
- With #7891 the gain is 2.85 → 2.99 FPS, about the spread between your repeated runs (ctl 2.76/2.78, srt 2.89/2.80). Two runs per configuration on the final stack, and the
Driver.Packet.drawfigure (it halves), would show it is real. - No test covers that an auto mesh draw is classified GPU-side (
ClassifyIndirectDrawwith no index buffer) or thatMeshArguments.comphonoursindexed == 0; the new rows only testResolveMeshArguments. The claim that the start vertex reaches the shader throughvertexConstantis not pinned either. An execution test with an auto draw whose record has a non-zero start vertex would cover both.
What
ClassifyIndirectDrawtook the GPU-side path for a mesh-path indirect draw only when the draw was indexed. A non-indexed (auto) mesh draw was classifiedNonVertexPath. The driver then read its records on the CPU, waiting for the GPU writes queued before them, and drew from the values it read.This change resolves an auto draw's mesh arguments on the GPU too, in the same
MeshArguments.comppass that indexed draws use.MeshArgumentRulesFortakes the index count asstd::optional. An auto draw has no index buffer, so its count is not clamped (indexCountisUINT32_MAX) andMeshArgumentRules::indexedis false. The flag reaches the pass in the push word that was unused.ResolveMeshArgumentsand the pass). The GPU-side mesh path requires no base-vertex SGPR location. Without one, the driver's vertex rule isConstant, and the vertex offset reaches the shader asvertexConstant(VGT_INDX_OFFSET plus the vertex-offset user word), as for every other indirect draw.prepareDrawInputsno longer refuses a non-indexed indirect mesh draw. A tessellated or quad-list indirect draw is still refused.New
meshArgumentTestscases cover an auto draw: it takes the record's count, its start vertex is not an index offset, and it draws nothing without a complete triangle.Tested
Windows 11 Pro 26300, Ryzen 7 7800X3D, NVIDIA GeForce RTX 5070 (driver 617.14), WinLibs GCC 15.2 UCRT, Release.
Focused tests. Run on
main6762694 and on this branch, same machine, withVK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation ANYPS5_NO_SHADER_CACHE=1 ANYPS5_REQUIRE_VULKAN=1 ctest --test-dir build -R <pattern> -V. The tests includeagc_driver_graphics,agc_driver_mesh*and the indirect-argument tests.was not found but was requested by env var VK_INSTANCE_LAYERS.agc_driver_indirect_arguments_pending_producer:VUID-vkCmdWaitEvents-srcStageMask-01158andVUID-vkSetEvent-event-09543. This change adds none.The 63 focused tests (same set on main and the change)
agc_command_batch_fence_failure,agc_compute_descriptor_layout_flags,agc_copy_input_kept_bytes,agc_dcc_key_sharing,agc_depth_copy_kept_bytes,agc_descriptor_cache,agc_descriptor_pool_reset_failure,agc_display_buffer_dcc,agc_driver_address_space_teardown,agc_driver_alpha_to_coverage_state,agc_driver_buffer_descriptor_runtime,agc_driver_covered_centroid_state,agc_driver_dcc_key_presync,agc_driver_dcc_keys_first_write,agc_driver_fill_cover_keys,agc_driver_gpu_indirect_arguments_misaligned_writer_ahead,agc_driver_gpu_indirect_arguments_written_ahead,agc_driver_graphics,agc_driver_guarded_null_pointer,agc_driver_indirect_arguments_pending_producer,agc_driver_indirect_arguments_written_ahead,agc_driver_indirect_patched_stage,agc_driver_memory_value_fill,agc_driver_mesh,agc_driver_mesh_draw_relocation,agc_driver_mesh_index_cache,agc_driver_mesh_provoking_layer,agc_driver_mesh_provoking_vertex,agc_driver_msaa_dcc_state,agc_driver_rect_list_indirect,agc_driver_sample_location_grid_fallback,agc_driver_sparse_indirect_indices,agc_driver_sparse_indirect_indices_unreadable,agc_driver_staged_clear_sampled_read,agc_driver_undithered_alpha_to_coverage_state,agc_driver_unused_viewport_depth,agc_heap_mirror_run_unwatch,agc_heap_mirror_run_unwatch_no_space_cache,agc_heap_mirror_unwatch,agc_heap_mirror_unwatch_no_space_cache,agc_pipeline_journal,agc_pipeline_library_clear_waits_for_build,agc_pipeline_store_lazy_buffer_pool,agc_shader_bindless,agc_shader_entry_lane_proof_budget,agc_shader_frontend_pair,agc_shader_frontend_pair_off,agc_shader_layout_pair,agc_shader_layout_pair_off,agc_shader_memory,agc_shader_quad_mask_no_demote,agc_shader_selected_records_direct_image_limit,agc_shader_selected_records_direct_pair_limit,agc_shader_selected_records_image_limit,agc_shader_selected_records_pair_limit,agc_shader_srt_read_patching,agc_shader_table_snapshot_reuse,agc_shader_type_zero_image_materialization,agc_sparse_buffer_holes,agc_sparse_heap_mirror_unwatch,agc_sparse_heap_mirror_unwatch_no_space_cache,agc_write_tracking,agc_write_watch_coveragePerformance. PPSA28099 start screen ("Press any button to continue"), 3840x2160. The title issues non-indexed mesh indirect draws (
DRAW_INDIRECT, no base-vertex or instance location). Without this change they take the CPU path:APS5_TRACE_INDIRECT_DRAWS=1prints-> cpu (non-vertex path)for them.maincannot run this title: at 6762694 it stops at boot withindirect register sentinel semantics are not implemented(Execution/src/Pm4.cpp:47). The captures below use the base the title runs on: main a62c724 with #6094 and #6160 (both merged since), #6146, #6366 and #7644, commit b3d5d03d6.b3d5d03d6d13. The base lines have"dirty":falseand the change lines"dirty":true.APS5_TRACE_SUMMARY_EVERY=10,APS5_LAZY_SHADER_PREPARE=1andAPS5_NO_PAD_INPUT=1, a warm shader cache, and no otherAPS5_TRACE_*orAPS5_PROFILE_*switch. Only interval summary lines were written; there is no trace file to attach.Driver.Packet.drawis the mean ms per frame fromtop_phases_ms_per_frame.Driver.Packet.drawThe strict-1 build chose the final rule of #7891 through a temporary switch (
APS5_DEBUG_STRICT_UNION=1), which is not part of either PR.On its own this change is slower on this scene: 2.40 against 2.77 FPS. With the capture change of #7891 it is faster: 2.99 against 2.85 FPS with the first version of #7891 alone, and
Driver.Packet.drawhalves. HenceDepends on: #7891.The slowdown alone was not profiled. A likely cause is that the resource captures of the draws that follow still wait for GPU-pending branch words, the waits #7891 removes. Without the CPU read of the records, the queue is no longer drained before those waits.
tools/trace_digest.py, base (ctl-2)
17 intervals, 0.0 to 179.1 s, 416 presents
NVIDIA GeForce RTX 5070, NVIDIA 617.14, Windows 10.0.26300, 3840x2160, commit b3d5d03d6d13
tools/trace_digest.py, this change alone (mesh-1)
17 intervals, 0.0 to 180.1 s, 345 presents
NVIDIA GeForce RTX 5070, NVIDIA 617.14, Windows 10.0.26300, 3840x2160, commit b3d5d03d6d13 (dirty)
tools/trace_digest.py, first version of #7891 (srt-2)
17 intervals, 0.0 to 175.9 s, 408 presents
NVIDIA GeForce RTX 5070, NVIDIA 617.14, Windows 10.0.26300, 3840x2160, commit b3d5d03d6d13 (dirty)
tools/trace_digest.py, first version of #7891 + this change (both-2)
17 intervals, 0.0 to 175.7 s, 441 presents
NVIDIA GeForce RTX 5070, NVIDIA 617.14, Windows 10.0.26300, 3840x2160, commit b3d5d03d6d13 (dirty)
The raw
aps5-summary.jsonllines of the 90-155 s window for these runs are in the two comments below.Overlap.
tools/pr_overlap.py --branchfinds no open PR that changes the same lines. It lists PRs that conflict withmainand shareDraw.cpp,Draw.hpp,Recorder.*ortests/Graphics.cpp; none of them changes the mesh indirect classification or the mesh argument pass.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)