1. You're right. I just tried to modify the code for both SlimDX and SharpDX now to use a Direct2D device context but at least on my Windows 7 box with the latest nuget packages installed, the relevant objects aren't defined even with Platform Update installed.
This blog shows how to get a Direct2D DeviceContext in SharpDX: http://english.r2d2rigo.es/2012/07/04/basic-direct2d-drawing-with-sharpdx/ - if you get this to work on Windows 7, please let me know
2. I don't know about an 'efficient' way, but when I used the composite effect to calculate the collision pixels between two objects a while ago I did it like this (in C++):
// Create a Direct2D effect which lets us composite the bitmaps with a compare function
ID2D1Effect *compositeEffect;
Screen->CreateEffect(CLSID_D2D1Composite, &compositeEffect);
// Set the two bitmaps as the input to the effect
compositeEffect->SetInput(0, intersectionA);
compositeEffect->SetInput(1, intersectionB);
// Set the composition comparison function
// D2D1_COMPOSITE_MODE_SOURCE_IN retains solid pixels from B which are also solid in A
compositeEffect->SetValue(D2D1_COMPOSITE_PROP_MODE, D2D1_COMPOSITE_MODE_SOURCE_IN);
// Render the effect (create the composite)
Screen->BeginDraw();
Screen->SetTarget(composite);
// Make sure any previous temporary data in the image is erased
Screen->Clear(D2D1::ColorF(D2D1::ColorF::Black, 0.0f));
Screen->DrawImage(compositeEffect);
Screen->EndDraw();
// Change the render target back to the normal screen back buffer
Screen->SetTarget(Direct2DBackBuffer);
/* collision detection code elided */
// Release the effect
SafeRelease(&compositeEffect);
where Screen is a Direct2D 1.1 IDeviceContext, intersectionA, intersectionB, composite and Direct2DBackBuffer are ID2D1Bitmap1. The two inputs to the composite effect (intersectionA and intersectionB) are passed to the effect and the effect's output is rendered to composite. The DeviceContext's render target is then changed back to the main application's window (Direct2DBackBuffer). You can then render composite to the main window if you want. If the main window's surface type is compatible with the effect output, you can skip rendering to a separate composite surface (I think).
3. I have no idea, never tried, so I'll throw that open to someone with more expertise.
Katy.
Edit: Oh, one important thing I forgot about efficiency... don't be creating and destroying temporary ID2D1Bitmap1s every frame for your effect rendering. In the code above, to save on those expensive operations at the cost of memory, I created bitmaps at application start-up using the largest possible dimensions I would be needing and just re-used them every frame, using Clear to erase their previous contents each frame, which is much faster than creating a new bitmap from scratch each frame.