I thought of that, but loading shaders twice I thought would cause issues with shaders of the same filename. Say if you only had a shader file with one shader entry in hardware/glsl/gothic_block.shader, it'd break all the shaders in scripts/gothic_block.shader
My idea is to use FS_ListFiles twice, once to get the normal shader filenames and second time to get the hardware specific filenames, appending the hardware ones onto the end of the list. Hence you would get both scripts/gothic_block.shader and hardware/glsl/gothic_block.shader in the list (and in the final big block of shader data).
The reason I put hardware/ at the top level (instead of having scripts/pcx/*.shader) is that I think FS_ListFiles will match results that are in sub-directories too, so you would end up getting all the shader files in all the sub-directories of scripts/ -- not what we want.
Maybe tonight I'll play around with the code......