diff --git a/src/amd/ci/radv-navi21-aco-fails.txt b/src/amd/ci/radv-navi21-aco-fails.txt index fc577664064..ddf125936e8 100644 --- a/src/amd/ci/radv-navi21-aco-fails.txt +++ b/src/amd/ci/radv-navi21-aco-fails.txt @@ -17,7 +17,3 @@ dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.st dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.access_sbt_read,Crash dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_all_transfer,Crash dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_as_copy_bit,Crash -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.size,Fail -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.size,Fail -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.size,Fail -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.size,Fail diff --git a/src/amd/ci/radv-navi22-aco-fails.txt b/src/amd/ci/radv-navi22-aco-fails.txt index 1104eb4a4fa..c4d1ce4f6ae 100644 --- a/src/amd/ci/radv-navi22-aco-fails.txt +++ b/src/amd/ci/radv-navi22-aco-fails.txt @@ -18,7 +18,3 @@ dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.st dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.access_sbt_read,Crash dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_all_transfer,Crash dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_as_copy_bit,Crash -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.size,Fail -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.size,Fail -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.size,Fail -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.size,Fail diff --git a/src/amd/ci/radv-vangogh-aco-fails.txt b/src/amd/ci/radv-vangogh-aco-fails.txt index 6c10c89e3fe..deae8157626 100644 --- a/src/amd/ci/radv-vangogh-aco-fails.txt +++ b/src/amd/ci/radv-vangogh-aco-fails.txt @@ -21,7 +21,3 @@ dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.cpu.st dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.access_sbt_read,Crash dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_all_transfer,Crash dEQP-VK.ray_tracing_pipeline.acceleration_structures.copy_within_pipeline.gpu.stage_as_copy_bit,Crash -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.buffer.size,Fail -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.cpu.memory.size,Fail -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.buffer.size,Fail -dEQP-VK.ray_tracing_pipeline.acceleration_structures.query_pool_results.gpu.memory.size,Fail diff --git a/src/amd/vulkan/radv_acceleration_structure.c b/src/amd/vulkan/radv_acceleration_structure.c index 0ab407ba289..6a6b8f95914 100644 --- a/src/amd/vulkan/radv_acceleration_structure.c +++ b/src/amd/vulkan/radv_acceleration_structure.c @@ -215,7 +215,7 @@ radv_WriteAccelerationStructuresPropertiesKHR( value = header->instance_count; break; case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR: - value = accel->size; + value = header->size; break; default: unreachable("Unhandled acceleration structure query"); @@ -627,6 +627,24 @@ optimize_bvh(const char *base_ptr, uint32_t *node_ids, uint32_t node_count) free(entries); } +static void +fill_accel_struct_header(struct radv_accel_struct_header *header) +{ + /* 16 bytes per invocation, 64 invocations per workgroup */ + header->copy_dispatch_size[0] = DIV_ROUND_UP(header->compacted_size, 16 * 64); + header->copy_dispatch_size[1] = 1; + header->copy_dispatch_size[2] = 1; + + header->serialization_size = + header->compacted_size + align(sizeof(struct radv_accel_struct_serialization_header) + + sizeof(uint64_t) * header->instance_count, + 128); + + header->size = header->serialization_size - + sizeof(struct radv_accel_struct_serialization_header) - + sizeof(uint64_t) * header->instance_count; +} + static VkResult build_bvh(struct radv_device *device, const VkAccelerationStructureBuildGeometryInfoKHR *info, const VkAccelerationStructureBuildRangeInfoKHR *ranges) @@ -751,17 +769,7 @@ build_bvh(struct radv_device *device, const VkAccelerationStructureBuildGeometry header->instance_count = instance_count; header->compacted_size = (char *)ctx.curr_ptr - base_ptr; - /* 16 bytes per invocation, 64 invocations per workgroup */ - header->copy_dispatch_size[0] = DIV_ROUND_UP(header->compacted_size, 16 * 64); - header->copy_dispatch_size[1] = 1; - header->copy_dispatch_size[2] = 1; - - header->serialization_size = - header->compacted_size + align(sizeof(struct radv_accel_struct_serialization_header) + - sizeof(uint64_t) * header->instance_count, - 128); - - header->size = accel->size; + fill_accel_struct_header(header); fail: device->ws->buffer_unmap(accel->bo); @@ -2279,17 +2287,7 @@ radv_CmdBuildAccelerationStructuresKHR( header.instance_count = bvh_states[i].instance_count; header.compacted_size = bvh_states[i].node_offset; - /* 16 bytes per invocation, 64 invocations per workgroup */ - header.copy_dispatch_size[0] = DIV_ROUND_UP(header.compacted_size, 16 * 64); - header.copy_dispatch_size[1] = 1; - header.copy_dispatch_size[2] = 1; - - header.serialization_size = - header.compacted_size + align(sizeof(struct radv_accel_struct_serialization_header) + - sizeof(uint64_t) * header.instance_count, - 128); - - header.size = accel_struct->size; + fill_accel_struct_header(&header); radv_update_buffer_cp(cmd_buffer, radv_buffer_get_va(accel_struct->bo) + accel_struct->mem_offset + base,