Here is an outline of such a procedure. Checking that a vertex $u$ is a top one can be done by solving a linear program, as follows: write $p$ in baricentric coordinates, i.e. $p=p_x=\sum_{v\in V} x_v v$, $x_v\geq 0$ for any $v\in V$, and $\sum_{v\in V} x_v=1$ (I denote by $V$ the set of vertices of the simplex). To check $u$ is top is equivalent to checking that there exists $x=(x_{v_1},\dots,x_{v_{|V|}})$ satisfying $x\geq 0$, $\sum_{v\in V} x_v=1$, $u\geq p_x$, and $x_u<1$. So you solve the linear program $$\min x_u \text{ subject to $x\geq 0$, $\sum_{v\in V} x_v=1$, $u\geq p_x$},$$ and it can be done in polynomial time. If the value of the objective is strictly less than 1 then $u$ is top. Testing for $u$ to be bottom is essentially the same, just replace the inequalities $u\geq p_x$ by $u\leq p_x$. Finally, do this for each vertex.