Trabalho De Conclusão Bárbara Bellaver Gonçalves
Total Page:16
File Type:pdf, Size:1020Kb
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA CURSO DE CIÊNCIA DA COMPUTAÇÃO BÁRBARA BELLAVER GONÇALVES glslAngel: Uma Ferramenta de Depuração para a Linguagem GLSL Trabalho de Graduação Prof. Dr. Manuel Menezes de Oliveira Neto Orientador Porto Alegre, novembro de 2008. UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL Reitor: Prof. Carlos Alexandre Netto Vice-Reitor: Prof. Rui Vicente Oppermann Pró-Reitora Graduação: Profa. Valquiria Link Bassani Diretor do Instituto de Informática: Prof. Flávio Rech Wagner Coordenador do CIC: Prof. Raul Fernando Weber Bibliotecária-Chefe do Instituto de Informática: Beatriz Regina Bastos Haro AGRADECIMENTOS Agradeço primeiramente à Deus, por toda a luz. Ao meu orientador, Manuel Menezes de Oliveira Neto, pela paciência, pelos conselhos, pelas conversas, pela disponibilidade e por toda a experiência adquirida no desenvolvimento deste trabalho. Aos doutorandos Vitor Pamplona e Leandro Fernandes pela ajuda revisando o texto e assistindo minha apresentação várias vezes. Suas críticas e comentários foram bastante valiosos. Por fim, agradeço minha família pelo carinho e apoio. SUMÁRIO LISTA DE ABREVIATURAS E SIGLAS ...................................................................... 6 LISTA DE FIGURAS ...................................................................................................... 7 LISTA DE TABELAS ..................................................................................................... 8 RESUMO ......................................................................................................................... 9 ABSTRACT ................................................................................................................... 10 1 INTRODUÇÃO ...................................................................................................... 11 2 O PIPELINE GRÁFICO ........................................................................................ 14 2.1 Sumário ............................................................................................................ 17 3 A LINGUAGEM GLSL ......................................................................................... 18 3.1 Shaders ............................................................................................................. 18 3.2 Evolução da programação de shaders .............................................................. 19 3.2.1 Cg ............................................................................................................ 20 3.2.2 HLSL ....................................................................................................... 20 3.2.3 GLSL ....................................................................................................... 21 3.3 Sumário ............................................................................................................ 23 4 EVOLUÇÃO E O ESTADO DA ARTE EM HARDWARE GRÁFICOS ............ 24 4.1 Sumário ............................................................................................................ 26 5 REQUISITOS DE UM DEPURADOR .................................................................. 28 5.1 Depuração em CPUs e GPUs ........................................................................... 28 5.2 Sumário ............................................................................................................ 29 6 TRABALHOS RELACIONADOS ........................................................................ 30 6.1 Depuradores de Programas OpenGL® ............................................................. 30 6.2 Depuradores e/ou editores de shaders .............................................................. 31 6.2.1 Que não consideram o programa OpenGL® hospedeiro ........................ 31 6.2.2 Que consideram o programa OpenGL® hospedeiro............................... 32 6.3 Sumário ............................................................................................................ 33 7 IMPLEMENTAÇÃO ............................................................................................. 34 7.1 Biblioteca de funções ....................................................................................... 35 7.1.1 Instrumentação do código ....................................................................... 36 7.2 Parser GLSL .................................................................................................... 41 7.3 Interface ............................................................................................................ 46 7.3.1 Inicialização da Ferramenta .................................................................... 47 7.3.2 Depuração Apenas do Shader ................................................................. 47 7.3.3 Depuração do Programa OpenGL e do Shader ....................................... 49 7.4 Compilando o Shader”. .................................................................................... 49 7.5 Sumário ............................................................................................................ 50 8 RESULTADOS ...................................................................................................... 51 8.1 A Ferramenta Construída ................................................................................. 51 8.2 Exemplo de Execução ...................................................................................... 52 8.3 Depuração do Programa OpenGL Hospedeiro ................................................. 56 8.4 Limitações ........................................................................................................ 57 8.5 Sumário ............................................................................................................ 58 9 CONCLUSÃO ........................................................................................................ 59 10 REFERÊNCIAS ..................................................................................................... 62 APÊNDICE A - Funções Inseridas na GLTrace ............................................................ 67 LISTA DE ABREVIATURAS E SIGLAS ARB Architecture Review Board CPU Central Processing Unit GPU Graphics Processing Unit GUI Graphic User Interface SDK Software Development Kit SLI Scalable Link Interface LISTA DE FIGURAS FIGURA 2.1: DIAGRAMA LÓGICO DA ARQUITETURA BÁSICA DA OPENGL 2.0 [ROS05] ............................. 15 FIGURA 2.2:ENTRADAS E SAÍDAS DO PROCESSADOR DE VÉRTICES [ROS04] ............................................. 16 FIGURA 2.3: ENTRADAS E SAÍDAS DO PROCESSADOR DE FRAGMENTOS [ROS04] ..................................... 17 FIGURA 3.1: CENA DO JOGO CRYSIS ........................................................................................................... 18 FIGURA 3.2: PROCESSO DE COMPILAÇÃO DE UM PROGRAMA EM LINGUAGEM CG................................. 20 FIGURA 3.3:PROCESSO DE COMPILAÇÃO DE UM PROGRAMA EM LINGUAGEM GLSL .............................. 22 FIGURA 4.1: IMAGEM EM TEMPO REAL COM O USO DA PLACA NVIDIA GEFORCEGTX280 [TWE08] ........ 26 FIGURA 4.2: IMAGEM EM TEMPO REAL COM O USO DA PLACA ATI RADEON HD4870X2 [AMD08] ......... 26 FIGURA 4.4:NVIDIA GEFORCEGTX280 ........................................................................................................ 26 FIGURA 5.1:REPRESENTAÇÃO DA VISUALIZAÇÃO DA DEPURAÇÃO DE QUATRO PROPRIEDADES DIFERENTES DE UM SHADER ESCRITO EM CG [DNB05A] .................................................................. 29 FIGURA 6.1: INTERFACE DA FERRAMENTA SPYGLASS [MAG02] ................................................................ 31 FIGURA 7.1: FLUXOGRAMA EM ALTO NÍVEL DA APLICAÇÃO ..................................................................... 35 FIGURA 7.2:FUNÇÕES ADICIONADAS AO CÓDIGO DA BIBLIOTECA NO INÍCIO DA EXECUÇÃO .................. 37 FIGURA 7.3: FUNÇÕES ADICIONADAS AO CÓDIGO DA BIBLIOTECA A CADA RENDERIZAÇÃO DA CENA .... 38 FIGURA 7.4: FUNÇÕES ADICIONADAS AO CÓDIGO DA BIBLIOTECA AO INICIAR A EXECUÇÃO DO PROGRAMA ....................................................................................................................................... 39 FIGURA 7.5: FUNÇÕES ADICIONADAS AO CÓDIGO DA BIBLIOTECA A CADA RENDERIZAÇÃO DA CENA .... 40 FIGURA 7.6: PASSOS NECESSÁRIOS PARA A CRIAÇÃO DE UM SHADER [FER06] ........................................ 41 FIGURA 7.7: EXEMPLO DE CASO ONDE DEVE SER INCLUÍDA A FUNÇÃO GL_POSITION (SUPERIOR) E DE QUANDO ELA NÃO DEVE SER INSERIDA (INFERIOR) ......................................................................... 42 FIGURA 7.9: VERSÃO RECEBIDA DA INTERFACE NOS PASSOS 1 E 2 DE EXECUÇÃO, RESPECTIVAMENTE. 43 FIGURA 7.8: CÓDIGO FONTE ORIGINAL DO VERTEX SHADER ..................................................................... 43 FIGURA 7.10: VERSÃO DEVOLVIDA PARA A INTERFACE APÓS O PASSO 1 ................................................. 43 FIGURA 7.11: VERSÃO DEVOLVIDA PARA A INTERFACE APÓS O PASSO 2 ................................................. 44 FIGURA 7.12: VERSÃO DO FRAGMENT SHADER QUE É GERADA NOS PASSOS 1 E 2 .................................. 44 FIGURA 7.13: CÓDIGO ALTERADO PARA DEPURAÇÃO DE UM FRAGMENT SHADER ................................. 45 FIGURA 7.14: INTERFACE DA FERRAMENTA ............................................................................................... 46 FIGURA 7.15: FLUXOGRAMA SIMPLIFICADO DA EXECUÇÃO DO DEPURADOR .......................................... 47 FIGURA