You can use GDI to draw onto surfaces fairly easily.
For example (taken from the DX9 wizard generated code, mostly):
Code:
Bitmap bmp =
new Bitmap
(1,
1,
System.
Drawing.
Imaging.
PixelFormat.
Format32bppArgb);
System.
Drawing.
Graphics g =
System.
Drawing.
Graphics.
FromImage(bmp
);
// Do your drawing on g ...Texture texture = Texture.
FromBitmap(device, bmp,
0, Pool.
Managed);
Most non-circular shapes can be drawn in Direct3D by breaking your shape into triangles. Obviously, squares and rectangles are the easiest (next to triangles

). A hexagon or a more "random" object might be slightly harder. If it's convex, you could use a simple Triangle Fan. Don't forget Direct3D can draw lines as well - just use LineList instead of TriangleList.
For circles, arcs, bezier curves and such you might actually do well to use GDI. I can't speak of the performance as I've never really tried generating objects and loading surfaces per-frame. If you're not worried about the framerate and only need to generate the shapes once to prepare a surface there shouldn't be any problem.
-nerseus