а может быть проблема в этом? есть оказывается dFdxFine и dFdxCoarse, и когда используешь dFdx, то какой из вариантов - dFdxFine /dFdxCoarse - на усмотрение вендера. Зеленый как раз получается из-за dFdxCoarse, что выгодно по перфу
производная считается в кваде 2х2, и всегда со "старшего" пикселя вычитается "младший" старший/младший в плане координат. каждый пиксель хранит в себе x/y координаты. И к соседу стучится просто переключая младший бит.