I tried to post this in R300 technology forum but got no useful replies, maybe here someone will notice it.
I have written a DX7 application (I don't know whether it is different in DX8 or DX9). It originally created a Z-Buffer surface by requesting given bit-depth (16, 24 or 32) with according Z bit mask (0x0000FFFF, 0x00FFFFFF or 0xFFFFFFFF). This worked fine on Radeon 8500 which supports all possible Z-Buffer formats, but on Radeon 9700 I was only able to get 16 bit Z-Buffer using this method.
So started enumerating available Z-Buffer formats and choosing the best one. However, on Radeon 9700 there seem to be only two Z-Buffer formats, that being 16 bit plain and 24 bit Z with 8 bit stencil. There is no 24 bit without stencil neither 32 bit format. It also seems that the only way to get the Z depth of enumerated Z-Buffer format is actually counting the bits in Z mask, since the ZBits for 24+8 format is 32.
Now comes the main question: Is it possible to enable different Z-Buffer formats with registry keys (as was the case on Radeon 8500)? Or is it a hardware limitation? Would it be possible to force Z-Buffer depth in drivers (it works in OGL)?
I think that the lack of Z-Buffer formats is the reason for visual artifacts in some games (Morrowind). I have also seen on these forums that Sacrifice (don't have the game myself) is unable to run in 32 bpp mode, since it probably also wants 32 bit Z-Buffer and falls back to 16 bpp mode, hence disabling FSAA.
I have written a DX7 application (I don't know whether it is different in DX8 or DX9). It originally created a Z-Buffer surface by requesting given bit-depth (16, 24 or 32) with according Z bit mask (0x0000FFFF, 0x00FFFFFF or 0xFFFFFFFF). This worked fine on Radeon 8500 which supports all possible Z-Buffer formats, but on Radeon 9700 I was only able to get 16 bit Z-Buffer using this method.
So started enumerating available Z-Buffer formats and choosing the best one. However, on Radeon 9700 there seem to be only two Z-Buffer formats, that being 16 bit plain and 24 bit Z with 8 bit stencil. There is no 24 bit without stencil neither 32 bit format. It also seems that the only way to get the Z depth of enumerated Z-Buffer format is actually counting the bits in Z mask, since the ZBits for 24+8 format is 32.
Now comes the main question: Is it possible to enable different Z-Buffer formats with registry keys (as was the case on Radeon 8500)? Or is it a hardware limitation? Would it be possible to force Z-Buffer depth in drivers (it works in OGL)?
I think that the lack of Z-Buffer formats is the reason for visual artifacts in some games (Morrowind). I have also seen on these forums that Sacrifice (don't have the game myself) is unable to run in 32 bpp mode, since it probably also wants 32 bit Z-Buffer and falls back to 16 bpp mode, hence disabling FSAA.