Right now I'm using Predication to cull my BV tree after I first cull it with a few different view frustums, to get different ranges of objects to pass on to other parts of the engine. Life is good it works and has been a big save for me!
What I basically do is cull all the extracted BV trees nodes against the current depth buffer and it takes a few frames but I then do this:
If g_pPredicate IsNot Nothing Then
Dim tester As Boolean = _context.IsDataAvailable(g_pPredicate)
If tester Then
Dim ds As DataStream = _context.ImmediateContext.GetData(g_pPredicate)
Predication = ds.Read(Of Boolean)
ds.Dispose()
ds = Nothing
End If
End If
to check the current occlusion of the BV tree node when I next update on the cpu, like I said it happens a few frames late but I can live with that for now.
The way I hide the lag is by only using the Predication result on tree nodes that are far from the camera and I also only update the visible tree nodes every 6 frames.
I also know after read the MSDN docs that I can use a different flag to just do the actual drawing of the object with the Predication hint and not return a value to the cpu but I don't think it will work with my instance drawing and I imagine that testing BV nodes would be faster than testing all the objects because BV nodes hold objects so if I cant see a node then I know that the objects want bee seen.
My question is, should I be down sampling the depth buffer and doing the Predication query's in a smaller resolution because that would allow me the get the returned value faster? Would it still take the same amount of time or am I doing it wrong?