Металл не знает и не заботится, работает ли ваш шейдер на изображении. Это не «рубит» изображение или что-то в этом роде.
Вычислительный шейдер обрабатывается по «сетке». Сетка - это абстракция. Это произвольный способ организовать работу. Металл не придает сетке никакого значения, например, связывает позицию в сетке с пикселем на изображении.
Такая связь, если она существует, подразумевается в поведении вашего шейдерного кода. Да, это во многом зависит от того, что делает шейдер с thread_position_in_grid
, thread_position_in_threadgroup
, thread_index_in_threadgroup
и т. Д.
Итак, если вы используете переменную gid
с атрибутом thread_position_in_grid
и используете ее координаты в качестве координат изображения, то именно это использование определяет, что каждая позиция сетки соответствует пикселю изображения. Как только вы это сделаете, из этого следует, что каждая группа потоков соответствует блоку изображения, поскольку группа потоков - это просто блок позиций сетки. Но опять же, это не то, что делает Metal, это то, что делает ваш шейдер.
Вы могли бы сделать что-то совершенно другое, и Металлу было бы все равно.