Search code examples
directxmonogamehlsl

direct11 write data to buffer in pixel shader? (like ssbo in open)


I'm trying to write data to a buffer in hlsl shader. I know in opengl you need ssbo, but is there a corresponding buffer type in direct11?(I'm new to it).

p.s. I'm using monogame so the newest shader model available is 3.0.

thanks!


Solution

  • Shader Model 3 corresponds to the DirectX 9 architecture. This architecture looks as follows:

    DX9 Pipeline
    (source: s-msft.com)

    (Source: https://msdn.microsoft.com/en-us/library/windows/desktop/bb219679(v=vs.85).aspx)

    As you see, there is only one output from the pixel shader. This output can be a color or depth value and will be rendered to the render target. So, there is no way in DX9.

    In DX10 (SM 4), the pipeline looks as follows:

    DX10 pipeline
    (source: s-msft.com)

    Source: https://msdn.microsoft.com/en-us/library/windows/desktop/bb205123(v=vs.85).aspx

    Again, the output of the pixel shader is color and depth. No way in DX10 either.

    Finally, DirectX 11 (SM 5):

    DX11 pipeline
    (source: s-msft.com)

    Source: https://msdn.microsoft.com/en-us/library/windows/desktop/ff476882(v=vs.85).aspx

    Now there is a way from the Pixel Shader to Memory Resources. The buffer type that you would need is the RWBuffer.