03-16-2016, 01:35 AM
On my GeForce linear tiling prevents texture from using several mipmap level which break almost all 3d games. For some reasons it looks like not all GeForce are affected.
In addition the current implementation always use host visible memory to store data. On Radeon this is fine since device memory is host accessible however on GeForce it's not which means all rendering operation happen in main memory instead of device memory which is bad for performance.
I guess these limitations lead to the upload/default/read back design decision of dx12 ; I'm currently implementing a similar way of doing for Vulkan. While it will add an extra copy operation for Radeon user the texture cache will limit the amount of such copy. On the other hand usage of optimal tiling will increase bandwidth usage for sampling and rendering operation so the benefit are likely to outweighs the drawback performance wise.
If necessary an heuristic could detect which textures are modified per frame and use linear tiling for such texture on Radeon but that's a more long-term idea.
In addition the current implementation always use host visible memory to store data. On Radeon this is fine since device memory is host accessible however on GeForce it's not which means all rendering operation happen in main memory instead of device memory which is bad for performance.
I guess these limitations lead to the upload/default/read back design decision of dx12 ; I'm currently implementing a similar way of doing for Vulkan. While it will add an extra copy operation for Radeon user the texture cache will limit the amount of such copy. On the other hand usage of optimal tiling will increase bandwidth usage for sampling and rendering operation so the benefit are likely to outweighs the drawback performance wise.
If necessary an heuristic could detect which textures are modified per frame and use linear tiling for such texture on Radeon but that's a more long-term idea.