CG UFRGS
glslAngel:
Uma Ferramenta de Depuração
para a Linguagem GLSL
{bbgoncalves, oliveira}@inf.ufrgs.br
Bárbara Bellaver Gonçalves
Manuel M. Oliveira
Orientador
Introdução
2
© Bee Movie, DreamWorks
Introdução (cont.)
3
© Bee Movie, DreamWorks
© Wall-E, Pixar
© Ratatouille, Pixar
Introdução (cont.)
4
© Crysis, Crytek
© Grid, Codemasters
© Far Cry 2, Ubisoft
Como Obter Estes Efeitos?
 Shaders
 Programas desenvolvidos para GPUs.
5
© Crysis, Crytek © Crysis, Crytek
Sem shader Com shader
Evolução das Placas Gráficas
6
GeForce GTX 280, 2008Voodoo 1, 1997
• 2 engines de renderização 3D
• 1 processador multimidia 2D
• 6MB de EDO RAM
• 240 Núcleos de processamento
• 1GB de memória
© Quake 1, Activision © Fallout 3, Bethsoft
O Pipeline Gráfico
7
© MSDN, http://msdn.microsoft.com
Programação de Shaders
 Evolução similar à programação de CPUs
 Assembly → Alto Nível
 Exemplos de linguagens de alto nível
 Cg, HLSL e GLSL
 Dificuldades atuais:
 Programação paralela
• Cultura de programação seqüencial é a mais difundida
 Ferramentas de desenvolvimento deficitárias
• Editores e depuradores separados, por exemplo
8
Exemplo de Shader
9
PSSceneIn VSSkymain(VSSceneIn input)
{
PSSceneIn output;
// Transform the vert to view-space
float4 v4Position = mul(float4(input.pos, 1),
g_mWorldViewProj);
output.pos = v4Position;
// Transfer the rest
output.tex = input.tex;
output.color = float4(1,1,1,1);
return output;
}
GLSL
 Linguagem padrão
 Garante compatibilidade
 Fácil adaptar para aplicações existentes
 Código otimizado para hardware utilizado
10
Ferramentas Existentes
11
[gDEBugger, 2008]
[FxComposer, 2008]
[glslDevil, 2007]
Objetivos
 Desenvolver um depurador de shaders GLSL
 GLSL é um padrão aberto
 Poucas ferramentas existentes
 Multiplataforma (Linux, Windows, etc.)
 Principal dificuldade:
 Dados não estão facilmente disponíveis
12
A Ferramenta
 Inspirada na ferramenta glslDevil [Strengert et. Al, 2007]
 Projeto de código aberto
 www.codeplex.com/hl2glsl
 Permite depurar, editar e compilar o shader
13
Interface
Gráfica
Biblioteca
OpenGL
Parser GLSL
A Ferramenta (cont.)
14
Demo 1
Fluxograma de Execução
15
Hospedeiro
(OpenGL)
Biblioteca do Sistema
(c:/Windows/System32/opengl32.dll)
Geometry
Shader
Fragment
Shader
Vertex
Shader
Intercepta Chamadas OpenGL
16
Hospedeiro
(OpenGL)
Biblioteca do Sistema
(c:/Windows/System32/opengl32.dll)
Geometry
Shader
Fragment
Shader
Vertex
Shader
Biblioteca Modificada
(../Pasta Local/opengl32.dll)
Depurador
Instrumentação do Hospedeiro
17
Hospedeiro
(OpenGL)
Biblioteca Modificada
(../Pasta Local/opengl32.dll)
Geometry
Shader
Fragment
Shader
Vertex
Shader
Biblioteca do Sistema
(c:/Windows/System32/opengl32.dll)
glUseProgram
 Criar buffers
 Definir o que capturar
glSwapBuffers
 Ler o resultado
glBegin
 Setar modo de desenho
Instrumenta
o Código
Instrumentação do Hospedeiro (cont.)
18
Depurador
Hospedeiro
(OpenGL)
Biblioteca Modificada
(../Pasta Local/opengl32.dll)
Geometry
Shader
Fragment
Shader
Vertex
Shader
Instrumenta o Código
Biblioteca do Sistema
(c:/Windows/System32/opengl32.dll)
Re-escrita do Shader
19
Shader
Original
varying vec4 dbg_varUser;
void main(){
dbg_varUser = vec4(0.2,0.2,0.1,0.3);
}
*código gerado
Re-escreve
shader
void main(){
vec4 cor = vec4(0.2,0.2,0.1,0.3);
}
*código recebido
Shader
Re-escrito
Depurador
Fluxograma de Execução Final
20
Hospedeiro
(OpenGL)
Biblioteca Modificada
(../Pasta Local/opengl32.dll)
Instrumenta o Código
Biblioteca do Sistema
(c:/Windows/System32/opengl32.dll)
Geometry
Shader
Fragment Shader
Re-escrito
Vertex Shader
Re-escrito
Re-escreve
shader
Resultados
21
Demo 2
Conclusões
 Ferramenta de depuração
 Programa OpenGL hospedeiro
 Shader GLSL
 Desenvolvimento integrado da aplicação
 Atualmente, é dependente de hardware
22
Sugestões para Projetistas de HW
 Modificações que tornariam tudo mais fácil
 Acesso ao que acontece na placa
 Uso de buffers mais transparente
 Melhoria da documentação
23
Trabalhos Futuros
 Suporte à geometry shaders
 Novas formas de interação
 Seleção do vértice para obter informação
 Otimização do código
 Suporte a mais de um shader do mesmo tipo
24
Trabalhos Futuros
 Integração com ferramentas existentes
 Shader Designer [Typhoon Labs, 2006]
 Microsoft Visual Studio
 Ambiente único de desenvolvimento
25
Shader Designer Visual Studio
Agradecimentos
 Prof. Manuel Oliveira
 Microsoft
 Grupo de Computação Gráfica
 Leandro Fernandes e Vitor Pamplona
 Minha família
 Power Trio Quindim
 Alexandre Coster, Eduardo Camaratta e Mariane
Machado
26
Perguntas?
27
© GLSL, Falanx

Defesa TC V1.2.1

  • 1.
    CG UFRGS glslAngel: Uma Ferramentade Depuração para a Linguagem GLSL {bbgoncalves, oliveira}@inf.ufrgs.br Bárbara Bellaver Gonçalves Manuel M. Oliveira Orientador
  • 2.
  • 3.
    Introdução (cont.) 3 © BeeMovie, DreamWorks © Wall-E, Pixar © Ratatouille, Pixar
  • 4.
    Introdução (cont.) 4 © Crysis,Crytek © Grid, Codemasters © Far Cry 2, Ubisoft
  • 5.
    Como Obter EstesEfeitos?  Shaders  Programas desenvolvidos para GPUs. 5 © Crysis, Crytek © Crysis, Crytek Sem shader Com shader
  • 6.
    Evolução das PlacasGráficas 6 GeForce GTX 280, 2008Voodoo 1, 1997 • 2 engines de renderização 3D • 1 processador multimidia 2D • 6MB de EDO RAM • 240 Núcleos de processamento • 1GB de memória © Quake 1, Activision © Fallout 3, Bethsoft
  • 7.
    O Pipeline Gráfico 7 ©MSDN, http://msdn.microsoft.com
  • 8.
    Programação de Shaders Evolução similar à programação de CPUs  Assembly → Alto Nível  Exemplos de linguagens de alto nível  Cg, HLSL e GLSL  Dificuldades atuais:  Programação paralela • Cultura de programação seqüencial é a mais difundida  Ferramentas de desenvolvimento deficitárias • Editores e depuradores separados, por exemplo 8
  • 9.
    Exemplo de Shader 9 PSSceneInVSSkymain(VSSceneIn input) { PSSceneIn output; // Transform the vert to view-space float4 v4Position = mul(float4(input.pos, 1), g_mWorldViewProj); output.pos = v4Position; // Transfer the rest output.tex = input.tex; output.color = float4(1,1,1,1); return output; }
  • 10.
    GLSL  Linguagem padrão Garante compatibilidade  Fácil adaptar para aplicações existentes  Código otimizado para hardware utilizado 10
  • 11.
  • 12.
    Objetivos  Desenvolver umdepurador de shaders GLSL  GLSL é um padrão aberto  Poucas ferramentas existentes  Multiplataforma (Linux, Windows, etc.)  Principal dificuldade:  Dados não estão facilmente disponíveis 12
  • 13.
    A Ferramenta  Inspiradana ferramenta glslDevil [Strengert et. Al, 2007]  Projeto de código aberto  www.codeplex.com/hl2glsl  Permite depurar, editar e compilar o shader 13 Interface Gráfica Biblioteca OpenGL Parser GLSL
  • 14.
  • 15.
    Fluxograma de Execução 15 Hospedeiro (OpenGL) Bibliotecado Sistema (c:/Windows/System32/opengl32.dll) Geometry Shader Fragment Shader Vertex Shader
  • 16.
    Intercepta Chamadas OpenGL 16 Hospedeiro (OpenGL) Bibliotecado Sistema (c:/Windows/System32/opengl32.dll) Geometry Shader Fragment Shader Vertex Shader Biblioteca Modificada (../Pasta Local/opengl32.dll)
  • 17.
    Depurador Instrumentação do Hospedeiro 17 Hospedeiro (OpenGL) BibliotecaModificada (../Pasta Local/opengl32.dll) Geometry Shader Fragment Shader Vertex Shader Biblioteca do Sistema (c:/Windows/System32/opengl32.dll) glUseProgram  Criar buffers  Definir o que capturar glSwapBuffers  Ler o resultado glBegin  Setar modo de desenho Instrumenta o Código
  • 18.
    Instrumentação do Hospedeiro(cont.) 18 Depurador Hospedeiro (OpenGL) Biblioteca Modificada (../Pasta Local/opengl32.dll) Geometry Shader Fragment Shader Vertex Shader Instrumenta o Código Biblioteca do Sistema (c:/Windows/System32/opengl32.dll)
  • 19.
    Re-escrita do Shader 19 Shader Original varyingvec4 dbg_varUser; void main(){ dbg_varUser = vec4(0.2,0.2,0.1,0.3); } *código gerado Re-escreve shader void main(){ vec4 cor = vec4(0.2,0.2,0.1,0.3); } *código recebido Shader Re-escrito
  • 20.
    Depurador Fluxograma de ExecuçãoFinal 20 Hospedeiro (OpenGL) Biblioteca Modificada (../Pasta Local/opengl32.dll) Instrumenta o Código Biblioteca do Sistema (c:/Windows/System32/opengl32.dll) Geometry Shader Fragment Shader Re-escrito Vertex Shader Re-escrito Re-escreve shader
  • 21.
  • 22.
    Conclusões  Ferramenta dedepuração  Programa OpenGL hospedeiro  Shader GLSL  Desenvolvimento integrado da aplicação  Atualmente, é dependente de hardware 22
  • 23.
    Sugestões para Projetistasde HW  Modificações que tornariam tudo mais fácil  Acesso ao que acontece na placa  Uso de buffers mais transparente  Melhoria da documentação 23
  • 24.
    Trabalhos Futuros  Suporteà geometry shaders  Novas formas de interação  Seleção do vértice para obter informação  Otimização do código  Suporte a mais de um shader do mesmo tipo 24
  • 25.
    Trabalhos Futuros  Integraçãocom ferramentas existentes  Shader Designer [Typhoon Labs, 2006]  Microsoft Visual Studio  Ambiente único de desenvolvimento 25 Shader Designer Visual Studio
  • 26.
    Agradecimentos  Prof. ManuelOliveira  Microsoft  Grupo de Computação Gráfica  Leandro Fernandes e Vitor Pamplona  Minha família  Power Trio Quindim  Alexandre Coster, Eduardo Camaratta e Mariane Machado 26
  • 27.