I’m working in a multiplatform renderer that have support for opengl, dx11 and dx12 backed.
I’m having problem when trying to use logic op blending under dx11 and dx12.
Opengl supports logical operations natively, but with dx11 I have to test for dx11.1 feature level and for support for the surface format I want to use. Dx11.1 specification requires logical op support only for UINT formats, so for other formats I have to test for compatibility using CheckFeatureSupport and D3D11_FEATURE_FORMAT_SUPPORT2. The initial bad news for me was that no format except UINT one supported logic ops.
That was a little disappointing starting from the fact that opengl supports them on the same hardware. But my surprise was big when I forced logical blending and it worked perfectly even on UNORM formats like DXGI_FORMAT_R8G8B8A8_UNORM. Then I proceeded with dx12 implementation and the bad news there was that it reported no support on all the formats and also it didn’t worked when forced.
So my question is taking the fact that dx11 is actually working, it will be possible to add the needed flags to declare support for logic ops in the remaining surface formats, to avoid the need for a forced path, and also add this to dx12?