Estou ciente de que a maioria das GPUs modernas, embora projetadas para ponto flutuante, são mais ou menos equivalentes no desempenho inteiro atualmente, com algumas ressalvas, como a falta de um complemento multiplicado por fusão. Não tenho certeza de como isso se aplica às operações de turno. Estou fazendo Marching Cubes na GPU, inicialmente escrevendo uma posição compactada de 32 bits para cada cubo de superfície e depois descompactando-os posteriormente para os vértices reais nesse cubo, da seguinte forma:
ivec3 unpackedPos = ivec3( packedPos >> 20 & 0x3FF,
packedPos >> 10 & 0x3FF,
packedPos & 0x3FF);
Só me ocorreu pensar se as unidades de shader têm shifters de barril neles hoje em dia? Estou fazendo 2 turnos aqui ou 30?
EDIT >> Eu sou um idiota ... Obrigado pelas respostas pessoal, útil saber, mas eu estive fazendo isso tudo errado. Eu deveria apenas usar o formato de textura RGB10_A2UI e depois empacotar / descompactar com uma única instrução de carregamento / armazenamento de imagem, em vez de brincar comigo mesmo com deslocamento de bits.
RE_EDIT >> Ou não ... Esse método aparentemente funciona em caixas vermelhas, mas não em verdes, portanto, voltamos aos turnos de bits.