Qual é a maneira mais eficiente de implementar um filtro de convolução em um pixel shader?

A implementação da convolução em um pixel shader é um tanto onerosa quanto ao número muito alto de buscas de textura.

Uma maneira direta de implementar um filtro de convolução é fazerN x N pesquisas por fragmento usando dois para ciclos por fragmento. Um cálculo simples diz que uma imagem de 1024x1024 borrada com um kernel Gaussiano 4x4 precisaria1024 x 1024 x 4 x 4 = 16M pesquisas.

O que se pode fazer sobre isso?

Pode-se usar alguma otimização que precisaria de menos pesquisas? Não estou interessado em otimizações específicas do kernel, como as do Gaussian (ou são específicas do kernel?)Alguém pode pelo menos tornar essas pesquisas mais rápidas explorando de alguma forma a localidade dos pixels com os quais trabalharia?

Obrigado!

questionAnswers(3)

yourAnswerToTheQuestion