BRPI0301122B1 - métodos para proporcionar e utilizar alvos de memória intermediária em um sistema de computação, sistema de computação, dispositivo de co-processamento e sistema para utilizar alvos de memória intermediária. - Google Patents

métodos para proporcionar e utilizar alvos de memória intermediária em um sistema de computação, sistema de computação, dispositivo de co-processamento e sistema para utilizar alvos de memória intermediária. Download PDF

Info

Publication number
BRPI0301122B1
BRPI0301122B1 BRPI0301122A BR0301122A BRPI0301122B1 BR PI0301122 B1 BRPI0301122 B1 BR PI0301122B1 BR PI0301122 A BRPI0301122 A BR PI0301122A BR 0301122 A BR0301122 A BR 0301122A BR PI0301122 B1 BRPI0301122 B1 BR PI0301122B1
Authority
BR
Brazil
Prior art keywords
component
data
program
graphics
target
Prior art date
Application number
BRPI0301122A
Other languages
English (en)
Other versions
BR0301122A (pt
Inventor
Anantha R Kancherla
Charles N Boyd
Michele B Boland
Original Assignee
Microsoft Corp
Microsoft Technology Licensing Llc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp, Microsoft Technology Licensing Llc filed Critical Microsoft Corp
Publication of BR0301122A publication Critical patent/BR0301122A/pt
Publication of BRPI0301122B1 publication Critical patent/BRPI0301122B1/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Image Processing (AREA)
  • Digital Computer Display Output (AREA)

Abstract

"sistemas e métodos para prover destinos intermediários em um sistema gráfico". sistemas e métodos para utilização de destino (s) intermediário (s) em conjunto com gráfico de computador em um sistema de computador são proporcionados. em várias modalidades, buffers de memória intermediária em memória de vídeo são proporcionados e utilizados para permitir que programas serializados de apis de gráfico suportem algoritmos que excedem os limites de instrução dos instrumentos para sombrear procedurais para programas únicos. os buffers intermediários podem também permitir o compartilhamento de dados entre programas para outras finalidades também, e são acessíveis atomicamente. o tamanho dos buffers, i.e., a quantidade de dados armazenados nos destinos intermediários, pode ser ajustado de modo variável para uma quantidade variada de resolução com relação aos dados do gráfico. sob esse aspecto, um programa único gera dados intermediários, que podem então ser usados, e reutilizados, por uma extensão do mesmo programa e/ou qualquer número de outros programas qualquer número de vezes como possa ser desejado, possibilitando flexibilidade e complexidade consideráveis dos programas de sombreado, enquanto mantendo a velocidade dos chips de gráfico modernos.

Description

Relatório Descritivo da Patente de Invenção para "MÉTODO PARA PROPORCIONAR E UTILIZAR ALVOS DE MEMÓRIA INTERMEDIÁRIA EM UM SISTEMA DE COMPUTAÇÃO, SISTEMA DE COMPUTAÇÃO, DISPOSITIVO DE CO-PROCESSAMENTO E SISTEMA PARA UTILIZAR ALVOS DE MEMÓRIA INTERMEDIÁRIA".
ORIENTAÇÃO E PERMISSÃO DE DIREITOS AUTORAIS
Uma parte da descrição deste documento de patente pode conter material que é submetido à proteção de direitos autorais. 0 dono do direito autoral não tem objeção à reprodução em fac-símile por qualquer um do documento de patente ou da descrição de patente, como ele aparece nos arquivos ou registros de patente do Escritório de Marcas e Patentes, mas de outra forma reserva todos os direitos do direito autoral. A seguinte orientação deve aplicar-se a este documento: Co- pyright © 2001, Microsoft Corp.
CAMPO DA INVENÇÃO A presente invenção é direcionada a sistemas e métodos para prover alvo(s) de memória intermediários em conjunto com computação gráfica. Mais particularmente, a presente invenção está relacionada com sistemas e métodos para prover alvo(s) de memória intermediários para uso em conjunto com shaders (dispositivos que executam programas dentro da placa de vídeo para interagir com uma imagem) procedurais, tal como pixel shader e vertex shader.
HISTÓRICO DA INVENÇÃO A renderização e exibição de gráfico tridimensional (3-D) tipicamente envolvem muitos cálculos e computações. Por exemplo, para renderizar um objeto 3-D, um conjunto de pontos ou vértices de coordenada que definem o objeto a ser renderizado é formado. Os vértices podem ser unidos para formar polígonos que definem a superfície do objeto a ser renderizado e exibido. Depois que os vértices que definem um objeto são formados, os vértices podem ser transformados a partir de um objeto ou quadro de modelo de referência para um quadro mundial de referência e finalmente para coordenadas 2-D que podem ser exibidas em um dispositivo de exibição plano, tal como um monitor. Durante o caminho, os vértices podem ser girados, representados em escala, eliminados ou recortados porque eles situam-se fora de uma área visível, iluminados por vários esquemas de iluminação e fontes, coloridos, de outra forma transformados, sombreados e assim por diante. Os processos envolvidos na renderização e exibição de um objeto 3-D podem ser intensivos de modo computacional e podem envolver um grande número de vértices.
Convencionalmente, como ilustrado na Fig. 1, objetos complexos 3-D, ou partes dos mesmos, podem ser representados pelas coleções de triângulos adjacentes ("uma malha") representando a geometria aproximada do objeto 3-D, ou por um mapa de geometria, ou superfície, no espaço de superfície bidimensional (2-D). A malha pode ser especificada através da posição dos vértices dos triângulos. Um ou mais mapas de textura podem ser mapeados para a superfície para criar uma superfície com textura de acordo com o processo de mapeamento de textura. Sob esse aspecto, sinais com textura sobre uma superfície podem ser muito gerais, e podem especificar qualquer tipo de resultado intermediário que possa ser inserido em mecanismo(s) de transformação, tal como procedimento (s) de interação com uma imagem, para produzir uma cor final e/ou outros valores associados com uma amostra de ponto.
Depois da amostragem da textura, transformações adicionais, tal como algoritmos e técnicas de sombreado, podem opcionalmente ser aplicadas na superfície com textura antes da renderização da imagem com elementos de quadro (pixels) de um dispositivo de exibição, ou saída dos dados para algum lugar com alguma finalidade além da exibição. Imagens em computação gráfica são tipicamente representadas como uma matriz 2-D de valores discretos (escala cinza) ou como três matrizes 2-D de valores discretos (cor). Usando um sistema padrão de coordenadas retangulares (x, y, z), uma superfície pode ser especificada como uma malha (por exemplo, malha de triângulo) com uma coordenada (x, y, z) por vértice da malha, ou como um mapa de geometria no qual as coordenadas (x, y, z) são especificadas como uma imagem retilínea sobre um sistema de coordenada 2D (u, v), algumas vezes chamada o domínio de parametrização da superfície. Mapa(s) de textura pode(m) também ser especificado(s) com o sistema de coordenadas (u, v) .
Amostras de ponto no domínio de parametrização da superfície, onde sinais foram presos à superfície, incluindo sua geometria, podem ser geradas a partir das malhas com textura ou mapas de geometria. Essas amostras podem ser transformadas e sombreadas usando uma variedade de computações. No fim dessa transformação e processamento de sombreado, uma amostra do ponto inclui (a) informação posicionai, i.e., um endereço de imagem indicando onde no plano de imagem o ponto mapeia para, e (b) cor com textura, ou escala cinza, a informação que indica a cor da amostra na posição indicada pela informação posicionai. Outros dados, tal como a informação de profundidade da amostra de ponto para permitir a eliminação da superfície oculta, peso ou qualquer outra informação útil sobre a amostra de ponto, podem também ser incluídos. A superfície com textura transformada é colocada em um armazenamento temporário de quadro antes de ser renderizada por uma exibição no espaço de imagem de pixel 2-D (x, y). Nesse ponto, no caso de um dispositivo de exibição em preto e branco, cada localização do pixel (x, y) no espaço da imagem 2-D é designada com um valor de cinza de acordo com alguma função da superfície no armazenamento temporário de quadro. No caso de um dispositivo típico de exibição a cores, cada localização do pixel (x, y) no espaço de imagem 2-D é designada com valores de vermelho, verde e azul (RGB) . É observado que uma variedade de formatos de cor diferentes do RGB existe também. Conquanto as variações da arquitetura, do início ao fim, o veículo acima descrito para esmiuçar as quantidades maciças de vértices de gráfico e dados de pixels é conhecido como o encadeamento (pipeline) do gráfico. A indústria de computação gráfica e os encadeamen-tos de gráfico têm observado uma quantidade de crescimento particularmente enorme nos últimos poucos anos. Por exemplo, as gerações atuais de jogos de computador estão se movendo para gráficos tridimensionais (3-D) em um modo cada vez mais crescente e mais realístico. Ao mesmo tempo, a velocidade do jogo é cada vez mais rápida. Essa combinação impulsionou uma necessidade genuína para a rápida renderização de gráfico 3-D em sistemas relativamente baratos. Tão cedo quanto nos anos 70, os sistemas de rende-rização 3-D foram capazes de descrever a "aparência" dos objetos de acordo com parâmetros. Esses e métodos posteriores proporcionam a parametrização da cor percebida de um objeto com base na posição e orientação da sua superfície e das fontes luminosas que o iluminam. Ao fazer isso, a aparência do objeto é calculada a partir daí. Parâmetros adicionalmente incluem valores tal como cor difusa, o coeficiente de reflexão especular, a cor especular, a capacidade de reflexão e a transparência do material do objeto. Tais parâmetros são globalmente citados como parâmetros de sombreado do objeto.
Os sistemas anteriores puderam somente atribuir um valor único para parâmetros de sombreado e portanto eles permaneciam constantes e uniformes através de toda a superfície do objeto. Sistemas posteriores possibilitaram o uso de parâmetros não uniformes (transparência por exemplo) que poderíam ter valores diferentes sobre partes diferentes do objeto. Duas técnicas proeminentes e distintas foram usadas para descrever os valores tirados por esses parâmetros não uniformes nas várias partes da superfície do objeto: o sombreado procedural e mapeamento da textura. O mapeamento da textura é baseado em pixel e dependente da resolução. 0 sombreado procedural descreve a aparência de um material em qualquer ponto de um espaço 1-D, 2-D ou 3-D definindo uma função (frequentemente chamada procedural sha-der) neste espaço no espaço do parâmetro de sombreado. 0 objeto é "imerso" no espaço 1-D, 2-D ou 3-D original e os valores dos parâmetros do sombreado em um dado ponto da super- fície do objeto são definidos como um resultado da função de sombreado procedural nesse ponto. Por exemplo, shaders pro-cedurais que aproximam-se da aparência da madeira, mármore ou outros materiais naturais foram desenvolvidos e podem ser encontrados na literatura. A renderização dos dados do gráfico em um sistema de computador é uma coleção de processos intensivos de recursos. 0 processo de sombreado, i.e., o processo para executar algoritmos complexos sobre conjunto (s) de estruturas de dados do gráfico especializado, usadas para determinar valores para certas primitivas, tal como cor, etc. associadas com as estruturas de dados do gráfico, exemplifica um tal processo de computação intensivo e complexo. Geralmente o processo de sombreado tem sido normalizado até certo grau. Passando o código fonte designado para funcionar com shader em uma aplicação, um shader torna-se um objeto que a aplicação pode criar/utilizar de modo a facilitar o desenho eficiente do gráfico de vídeo complexo. Vertex shaders e pixel shaders são exemplos de tais dispositivos.
Antes da sua implementação atual nos circuitos integrados de hardware especializado, os shaders vértice e pixel shaders eram algumas vezes implementados totalmente ou principalmente como código de software, e algumas vezes implementados como uma combinação das peças mais rígidas do hardware com software para controlar o hardware. Essas implementações freqüentemente continham uma CPU ou imitavam a existência de uma usando a CPU do sistema. Por exemplo, as implementações de hardware diretamente integravam um chip de CPU no seu projeto para executar a funcionalidade do processamento requerido das tarefas de sombreado. Embora uma CPU adicione muita flexibilidade no processo de sombreado por causa da faixa de funcionalidade que um chip de processamento padrão oferece, a incorporação de uma CPU adiciona despesas indiretas ao processo de sombreado especializado. Sem o estado da técnica do hardware atual, entretanto, existia pouca escolha.
Atualmente, entretanto, avanços existentes na tecnologia do hardware facilitaram a capacidade de se mover a funcionalidade previamente implementada no software para o hardware especializado. Como resultado, os pixel shaders e vértice atuais são implementados como chips de hardware especializados e programáveis. Os desenhos de hardware atual dos chips do shader vértice e pixel são altamente especializados e assim não se comportam como as implementações de hardware na CPU do passado. APIs gráficas 3-D especializadas foram desenvolvidas que expõem a funcionalidade especializada dos shaders vértice e pixel shaders atuais. Sob esse aspecto, um desenvolvedor é capaz de transferir instruções para um shader vértice que efetivamente programam o shader vértice a executar o comportamento especializado. Por exemplo, APIs expõem a funcionalidade associada com números crescentes de regis-tradores em shaders vértice, por exemplo, a funcionalidade do sombreado de vértice especializado com relação a números de ponto flutuante em um nível de registrador. Além disso, é possível implementar um conjunto de instruções que faz com que o shader vértice extremamente rápido retorne somente a parte fracionária dos números do ponto flutuante. Uma variedade de funcionalidades pode ser atingida através da transferência dessas instruções, assumindo que o limite de contagem de instrução do shader vértice não é excedido.
Similarmente, com relação aos pixel shaders, a funcionalidade especializada do sombreado de pixel pode ser atingida pela transferência de instruções para o pixel shader. Por exemplo, a funcionalidade é exposta que proporciona um mecanismo de interpolação limiar no pixel shader. Além do mais, a funcionalidade de muitos modificadores de operação diferentes é exposta aos desenvolvedores em conjunto com conjuntos de instrução talhados para pixel shaders. Por exemplo, negação, remapeação, desvio e outras funcionalidades são extremamente úteis para muitas aplicações de gráfico para as quais o sombreado de pixel eficiente é desejável, porém como eles são executados como parte de uma única instrução, eles são melhor expressos como modificadores para essa instrução. Em resumo, a funcionalidade acima é vantajosa para muitas operações gráficas, e sua incorporação funcional em conjuntos de instruções de pixel shader e vértice já especializados adiciona um valor tremendo da perspectiva de facilidade do desenvolvimento e desempenho aperfeiçoado. Uma variedade de funcionalidade pode assim ser atingida através da transferência dessas instruções, assumindo que o limite de contagem da instrução do pixel shader não é excedido. 0 Pedido de Patente U.S. co-pendente comumente designado No. 2002/0033817, depositado em 6 de Marco de 2001, proporciona tais APIs tridimensionais (3-D) exemplares para co- municação com implementações de hardware de shaders vértice e pixel shaders tendo registradores locais. Com relação aos shaders vértice, as comunicações da API são descritas no mesmo que podem fazer uso de um índice de registrador no chip e as comunicacões de API são também proporcionadas para uma função especializada, implementada no chip em um nível de registrador, que produz como saída a(s) parte(s) fracionaria(s) da(s) entrada(s). Com relação aos pixel shaders, as comunicações da API são proporcionadas para uma função especializada, implementada no chip em um nível de registrador, que executa uma função de interpolação linear e as comunicações de API são proporcionadas para modificadores especializados, também implementados no chip em um nível de registrador, que executam funções de modificação incluindo negação, complemento, remapeamento, desvio, graduação, e saturação. Vantajosamente, as comunicações da API expõem elementos algorítmicos gráficos muitos úteis no chip para um desenvolvedor enquanto ocultando os detalhes da operação dos chips do shader vértice e do pixel shader do desenvolvedor. 0 Pedido de Patente U.S. co-pendente comumente designado No. 2002/0003541, depositado em 1 de Marco de 2001, também descreve APIs 3-D, que expõem elementos algorítmicos únicos para desenvolvedores para uso com shaders procedu-rais através de um mecanismo que está, de forma conceptual, abaixo ou dentro da interface do software, e possibilita que um desenvolvedor transfira instruções para os shaders procedurais, e GPU (Unidades de Processamento de Gráfico -"Graphics Processing Units"). Por exemplo, uma tal API 3-D possibilita que as operações sejam transferíveis para um chip 3-D para obter características de desempenho aperfeiçoadas. Essas APIs 3-D tiram vantagens dos chips de gráfico 3-D de borda cortante que começaram a lidar com tal funcionalidade programável, incluindo processamento no chip flexível e memória no chip limitada, para remover código de gráfico personalizado do processamento do processador hospedeiro e para colocar tal funcionalidade programável e transferível em um chip de gráfico. Tais APIs fazem isso de modo que a programação ou os elementos algorítmicos escritos pelo desenvolvedor podem ser transferidos para o chip, dessa maneira programando o chip para executar esses algoritmos em níveis de desempenho aperfeiçoados. Relacionados com esse caso onde um desenvolvedor pode escrever uma rotina transferível para o chip 3-D, existem também conjunto(s) de elementos algorítmicos que são proporcionados em conjunto com a API 3-D (rotinas que não são escritas pelo desenvolvedor, mas que já foram programadas para o desenvolvedor) . Similarmente, um desenvolvedor pode transferir esses algoritmos de API pré colocados em pacotes em um chip 3-D programável para obter melhor desempenho. A capacidade para transferir elementos algorítmicos 3-D proporciona melhor desempenho, maior controle bem como facilidade de desenvolvimento .
Assim, a introdução de operações programáveis em uma base por vértice e por pixel tornou-se muito difundida no hardware de gráfico moderno. Essa capacidade de programação geral permite um vasto potencial para algoritmos criativos sofisticados em níveis de desempenho maiores. Entretanto, existem algumas limitações ao que pode ser atingido. Ti- picamente, com os encadeamentos de renderização dos dias atuais nos shaders vértice e pixel, como ilustrado na Fig. 2, um fluxo de dados de geometria SGD ("Stream of Geometry Data") e inserido no shader vértice 200 para executar alguma operação dos vértices, depois do que um rastreador 210 ras-treia os dados de geometria para os dados de pixel, produzindo como saida um fluxo de dados de pixel SPDl. O shader vértice 200 pode receber instruções que programam o shader vértice 200 a executar a funcionalidade especializada, mas existem limites quanto ao tamanho e complexidade das instruções do shader vértice. Similarmente, um pixel shader 220 pode opcionalmente executar uma ou mais transformações nos dados que produzem um fluxo de dados de pixels SPD2. O pixel shader 220 pode também receber instruções que programam o pixel shader 220 a executar a funcionalidade especializada, mas existem limites para o tamanho e complexidade das instruções do pixel shader. Assim, um limite para as APIs atuais e hardware correspondente que a maior parte do hardware tem uma contagem de instrução muito limitada. Essa contagem de instrução limitada evita a implementação de alguns dos mais sofisticados algoritmos pelo desenvolvedor usando as APIs. Adicionalmente, hardware programável atual tem mecanismos muito limitados para trocar dados entre programas separados, i.e., um primeiro programa de pixel shader não pode reutilizar a saida de dados de um segundo programa de pixel shader.
Adicionalmente, como ilustrado na Fig. 2A, um pixel e comumente imaginado como um ponto na grade 2-D do es- paço de imagem, tendo um valor de escala cinza ou valores de cor associados com ele; entretanto, o gráfico moderno considera um pixel na encadeamento do mecanismo de pixel como quaisquer dados coletivos associados com um ponto em qualquer formação 2-D, quer ele seja relevante para uma imagem exibida ou não. Por exemplo, embora a Fig. 2A ilustre um pixel tendo um depósito para Vermelho, um depósito para Verde e um depósito para Azul, esse não precisa ser o caso, e qualquer número de depósitos e valores correspondentes podem ser um pixel. Assim, existe flexibilidade considerável na geração de uma formação 2-D de dados de pixel, que podería incluir valores de parâmetro para efeitos de iluminação, peso, informação do armazenamento temporário-z, etc. Um problema com a encadeamento de gráfico atual, como ilustrado na Fig. 2C, refere-se à flexibilidade com a qual conjuntos separados de pixels podem ser fornecidos como saída. Embora o mecanismo de pixel 230 seja capaz de produzir como saída qualquer tipo de dados de pixel, i.e., os pixels Pl, P2, P3, P4 a PN sendo colocados em fluxo como saída podem adotar uma flexibilidade considerável quanto ao tipo e número de depósitos que definem os pixels, Pl, P2, P3, P4 a PN, Pl, P2, P3, P4 a PN, entretanto, todos têm que ter os mesmos depósitos. Assim, se Pl inclui dados R, G, B, da mesma forma inclui P2, P3, P4 a PN, e assim não existe a flexibilidade para definir conjuntos diferentes de dados de pixel de saída, alguns dos quais poderíam ser usados para iluminação e alguns poderíam ser usados estritamente para cor. Além do mais, atualmente, a resolução para renderizar alvos é prede- terminada de acordo com o processo de rastreio, i.e., o processo de renderização direciona a quantidade de amostras que pode ser colocada em um alvo de renderização, e assim seria desejável controlar de modo variável a resolução de um alvo de renderização, i.e., a quantidade de amostras que pode ser armazenada em conjunto com um alvo de renderização.
Assim seria desejável implementar sistemas e métodos que superassem os inconvenientes da capacidade de programação presente em conjunto com as arquiteturas de encade-amentos de gráfico atuais, APIs e hardware devido âs limitações na contagem de instrução, limitações na forma de saída e a carência de compartilhamento de dados entre os programas .
SUMÁRIO DA INVENÇÃO
Em vista do precedente, a presente invenção proporciona sistemas e métodos para proporcionar alvo(s) intermediário (s) em conjunto com computação gráfica em um sistema de computador. Em várias modalidades, a invenção proporciona e utiliza armazenamento temporários de memória intermediária na memória de vídeo para permitir que programas serializados de APIs gráficas suportem algoritmos que excedem os limites de instrução dos shaders procedurais para programas únicos. Os armazenamento temporários intermediários podem também permitir o compartilhamento dos dados entre programas para outras finalidades também, e são acessíveis atomicamente. O tamanho dos armazenamento temporários, i.e., a quantidade dos dados armazenados nos alvos intermediários, pode ser variavelmente ajustado para uma quantidade variada de resolu- ção com relação aos dados do gráfico. Sob esse aspecto, um único programa gera dados intermediários, que podem então ser usados, e reutilizados, por uma extensão do mesmo programa e/ou qualquer número de outros programas em qualquer número de vezes como possa ser desejado, possibilitando flexibilidade e complexidade consideráveis dos programas de sombreado, enquanto mantendo a velocidade dos chips de gráfico modernos.
Outros aspectos e modalidades da presente invenção são descritos abaixo.
BREVE DESCRIÇÃO DOS DESENHOS O sistema e métodos para proporcionar alvos de memória intermediária de acordo com a presente invenção são adicionalmente descritos com referência aos desenhos acompanhantes nos quais: A figura 1 proporciona uma visão geral do processo de uma encadeamento de gráfico em um sistema de computação gráfica;
As figuras 2A a 2C ilustram várias limitações de e problemas com as encadeamentos de gráfico da técnica anterior ; A figura 3A é um diagrama em bloco representando um ambiente de rede exemplar tendo uma variedade de dispositivos de computação nos quais a presente invenção pode ser implementada; A figura 3B é um diagrama em bloco representando um dispositivo de computação não limitador exemplar no qual a presente invenção pode ser implementada; A figura 4 ilustra o uso exemplar dos alvos de memória intermediária da invenção para exceder um limite de contagem de instrução de hardware; A figura 5 é um diagrama de fluxo exemplar ilustrando o uso de uma API de acordo com a invenção; A figura 6 é um diagrama em bloco ilustrando aspectos exemplares dos alvos de memória intermediária da invenção; e A figura 7 ilustra o uso exemplar dos alvos de memória intermediária para obter funcionalidade complexa com várias passagens do programa pelo hardware de acordo com a invenção.
DESCRIÇÃO DETALHADA DA INVENÇÃO
VISÃO GERAL
Como descrito acima, a presente invenção possibilita circulação de alvo intermediário múltiplo para uso nas linguagens de sombreado, tal como linguagens de sombreado de baixo nível, que possibilitam que um desenvolvedor programe a funcionalidade dos shaders procedurais. As plataformas gráficas que não têm a recirculação dos alvos intermediários de acordo com a invenção são limitadas no tamanho e complexidade dos programas que operam em um nível por pixel e por vértice. Os sistemas e métodos da invenção possibilitam a criação de uma linguagem de alto nível para abstrair e simplificar o uso das capacidades programáveis em conjunto com a evolução de uma encadeamento de gráfico geralmente progra-mável. A invenção pode também ser usada para criar programas de comprimento virtualmente ilimitado que permitem a rende- rização sem tempo real usando aceleração de hardware. 0 tamanho dos armazenamento temporários, i.e., a quantidade de dados armazenados nos alvos intermediários, pode ser ajustado de modo variável para uma quantidade variada de resolução com relação aos dados do gráfico. A disponibilidade da re-circulação acelerada do hardware ilimitado para aplicações de renderização sem ser em tempo real de acordo com a invenção, dessa maneira, aumenta a velocidade e desempenho de uma plataforma gráfica.
AMBIENTES EXEMPLARES EM REDE E DISTRIBUÍDOS
Alguém de conhecimento comum na técnica pode verificar que um computador ou outro cliente ou dispositivo de servidor pode ser disposto como parte de uma rede de computador, ou em um ambiente de computação distribuído. Sob esse aspecto, a presente invenção pertence a qualquer sistema de computador tendo qualquer número de memória ou unidades de l armazenamento, e q*ualquer número de aplicações e processos que ocorrem através de qualquer número de unidades de armazenamento ou volumes, que podem ser usados em conjunto com os alvos de memória intermediária da invenção. A presente invenção pode ser aplicada a um ambiente com computadores de servidor e computadores de cliente dispostos em um ambiente de rede ou ambiente de computação distribuído, tendo armazenamento remoto ou local. A presente invenção pode também ser aplicada a dispositivos de computação dedicados, tendo funcionalidade de linguagem de programação, capacidades de interpretação e execução para gerar, receber e transmitir informação em conjunto com serviços remotos ou locais. A computação distribuída facilita o compartilhamento dos recursos do computador e serviços pela troca direta entre dispositivos de computação e sistemas. Esses recursos e serviços incluem a troca de informação, armazenamento de cache e armazenamento em discos para arquivos. A computação distribuída tira vantagem da conectividade da rede, permitindo que clientes aumentem seu poder coletivo para beneficiar todo o empreendimento. Sob esse aspecto, uma variedade de dispositivos pode ter aplicações, objetos ou recursos que podem comprometer os alvos de memória intermediária da invenção. A Fig. 3A proporciona um diagrama esquemático de um ambiente de computação distribuído ou em rede exemplar. 0 ambiente de computação distribuído compreende objetos de computação 10a, 10b, etc. e objetos ou dispositivos de computação 110a, 110b, 110c, etc. Esses objetos podem compreender programas, métodos, armazenamentos de dados, lógica pro-gramável, etc. Os objetos podem compreender partes dos mesmos ou diferentes dispositivos tais como PDAs, televisões, reprodutores de MP3, televisões, computadores pessoais, etc. Cada objeto pode se comunicar com um outro objeto por meio da rede de comunicações 14. Essa rede pode ela própria compreender outros objetos de computação e dispositivos de computação que proporcionam serviços para o sistema da Fig. 3A. De acordo com um aspecto da invenção, cada objeto 10a, 10b, etc. ou 110a, 110b, 110c, etc. pode conter uma aplicação que podería fazer uso de uma API, ou outro objeto, para solicitar o uso dos alvos de memória intermediária da invenção.
Em uma arquitetura de computação distribuída, computadores, que podem ter sido tradicionalmente usados somente como clientes, se comunicam diretamente entre si e podem agir como ambos clientes e servidores, assumindo qualquer que seja o papel mais eficiente para a rede. Isso reduz a carga nos servidores e permite que todos os clientes acessem recursos disponíveis em outros clientes, dessa maneira aumentando a capacidade e eficiência de toda rede. Serviços que usam os alvos intermediários de acordo com a presente invenção podem assim ser distribuídos entre clientes e servidores, agindo em uma maneira que é eficiente para toda a rede. A computação distribuída pode ajudar serviços de distribuição de negócios e capacidades mais eficientemente através de diversos limites geográficos. Além do mais, a computação distribuída pode mover os dados para mais perto do ponto onde os dados são consumidos agindo como um mecanismo de colocação em cache de rede. A computação distribuída também permite que redes de computação dinamicamente funcionem juntas usando agentes inteligentes. Os agentes residem nos computadores iguais e comunicam vários tipos de informação de um lado para outro. Os agentes podem também iniciar tarefas em nome de outros sistemas iguais. Por exemplo, agentes inteligentes podem ser usados para dar prioridade às tarefas em uma rede, mudar o fluxo do tráfego, pesquisar arquivos localmente ou determinar comportamento anômalo tal como um vírus e exclui-lo antes que ele afete a rede. Todos os tipos de outros serviços podem ser considerados também.
Desde que o(s) objeto(s) gráfico(s), mapas de textura, dados de sombreado, etc. podem, na prática, estar fisicamente localizados em uma ou mais localizações, a capacidade para distribuir serviços que fazem uso dos alvos intermediários descritos aqui é de grande utilidade em um tal sistema.
Também pode ser verificado que um objeto, tal como 110c, pode ficar hospedado em um outro dispositivo de computador, 10a, 10b, etc. ou 110a, 110b, etc. Assim, embora o ambiente físico representado possa mostrar os dispositivos conectados como computadores, tal ilustração é meramente exemplar e o ambiente físico pode alternativamente ser representado ou descrito compreendendo vários dispositivos digitais tais como PDAs, televisões, reprodutores de MP3, etc., objetos de software tais como interfaces, objetos COM e semelhante.
Existe uma variedade de sistemas, componentes e configurações de rede que suportam ambientes de computação distribuídos. Por exemplo, sistemas de computação podem ser conectados por sistemas ligados por fio ou sem fio, por redes locais ou redes amplamente distribuídas. Atualmente, muitas das redes são acopladas na Internet, que proporciona a infra-estrutura para computação amplamente distribuída e abrange muitas redes diferentes.
Nos ambientes de rede residencial, existem pelo menos quatro meios de transporte de rede diferentes que podem, cada um, suportar um protocolo único, tal como uma linha de Energia, dados (ambos sem fio e por fio) , voz (por exemplo, telefone) e meios de entretenimento. A maioria dos dispositivos de controle residencial tal como interruptores de luz e aparelhos pode usar a linha de força para obter conectividade. Os Serviços de Dados podem entrar na casa como banda larga (por exemplo, DSL ou modem a Cabo) e são acessíveis dentro da casa usando conectividade sem fio (por exemplo, HomeRF ou 802.11b) ou por fio (por exemplo, Home PNA, Cat 5, até mesmo linha de energia) . O tráfego de voz pode entrar na casa tanto como por fio (por exemplo, Cat 3) ou sem fio (por exemplo, telefones celulares) e pode ser distribuído dentro da casa usando fiação Cat 3. Os meios de entretenimento, ou outros dados gráficos, podem entrar na casa através de satélite ou cabo e são tipicamente distribuídos na casa usando cabo coaxíal. IEEE 1394 e DVI estão também emergindo como interligações digitais para grupos de dispositivos de meios. Todos esses ambientes de rede e outros que possam surgir como padrões de protocolo podem ser interligados para formar uma intranet que pode ser conectada ao mundo exterior por meio da Internet. Em resumo, uma variedade de fontes diferentes existe para armazenamento e transmissão dos dados, e conseqüentemente, os dispositivos de computação de movimento avançado exigirão maneiras de compartilhar dados, tal como dados acessados ou utilizados incidentes aos objetos de programa que fazem uso dos resultados intermediários dos alvos intermediários de acordo com a presente invenção .
A Internet geralmente refere-se a coleção de redes e portas que utilizam o conjunto de protocolos TCP/IP, que são bem conhecidos na técnica da rede de computação. TCP/IP é um acrônimo para "Protocolo de Controle de Transpor-te/Programa de Interface". A Internet pode ser descrita como um sistema de redes de computadores remotos geograficamente distribuídos interligados por computadores que executam protocolos de rede que permitem que os usuários interajam e compartilhem informação através das redes. Por causa de tal compartilhamento de informação muito difundido, redes remotas tal como a Internet tem, até o momento, geralmente evoluído em um sistema aberto para os quais os desenvolvedores podem projetar aplicações de software para executar operações ou serviços especializados, essencialmente sem restrição .
Assim, a infra-estrutura de rede possibilita um hospedeiro das topologias de rede tal como arquiteturas de cliente/servidor, não hierárquicas ou híbridas. 0 "cliente" é um membro de uma classe ou grupo que usa os serviços de uma outra classe ou grupo ao qual ele não está relacionado. Assim, na computação, um cliente é um processo, i.e., aproximadamente um conjunto de instruções ou tarefas, que solicita um serviço proporcionado por um outro programa. O processo do cliente utiliza o serviço solicitado sem ter que "conhecer" quaisquer detalhes de trabalho sobre o outro programa ou o próprio serviço. Em uma arquitetura de cliente/servidor, particularmente um sistema em rede, um cliente é geralmente um computador que acessa os recursos compartilhados de rede proporcionados por um outro computador, por exemplo, um servidor. No exemplo da Fig. 3A, os computadores 110a,110b, etc. podem ser imaginados como clientes e o com- putador 10a, 10b, etc. pode ser imaginado como o servidor onde o servidor 10a, 10b, etc. mantém os dados que são então duplicados para os computadores do cliente 110a, 110b, etc..
Um servidor é tipicamente um sistema de computador remoto acessível através de uma rede remota tal como a Internet. 0 processo do cliente pode ficar ativo em um primeiro sistema de computador, e o processo do servidor pode ficar ativo em um segundo sistema de computador, se comunicando um com o outro através de um meio de comunicações, assim proporcionando a funcionalidade distribuída e permitindo que múltiplos clientes tirem vantagem das capacidades de concentração de informação do servidor. O cliente e o servidor se comunicam utilizando a funcionalidade proporcionada por uma camada de protocolo. Por exemplo, o Protocolo de Transferência de Hipertexto (HTTP) é um protocolo comum que é usado em conjunto com a World Wide Web (WWW) . Tipicamente, um endereço de rede de computador tal como um Localizador de Recurso Universal (URL) ou um endereço de Protocolo da Internet (IP) é usado para identificar os computadores do servidor ou cliente um com o outro. 0 endereço de rede pode ser citado como um endereço URL. Por exemplo, a comunicação pode ser proporcionada através de um meio de comunicações. Em particular, o cliente e servidor podem ser acoplados um no outro através de conexões TCP/IP para comunicação de alta capacidade.
Assim, a Fig. 3A ilustra um ambiente de rede ou distribuído exemplar, com um servidor em comunicação com computadores do cliente através de uma rede/barramento, no qual a presente invenção pode ser utilizada. Em mais detalhes, um número de servidores 10, 10b, etc., é interligado através de uma rede de comunicações/barramento 14, que pode ser uma LAN, WAN, intranet, a Internet, etc., com um número de dispositivos de computação remotos ou de cliente 110a, 110b, 110c, HOd, HOe, etc., tal como um computador portátil, computador de mão, cliente magro, aparelho de rede, ou outro dispositivo, tal como um VCR, TV, forno, luz, aquecedor e semelhante de acordo com a presente invenção. Assim, é considerado que a presente invenção pode ser aplicada a qualquer dispositivo de computação em conjunto com o qual é desejável processar objeto(s) gráfico (s) .
Em um ambiente de rede no qual a rede de comunicações/barramento 14 é a Internet, por exemplo, os servidores 10a, 10b, etc. podem ser servidores da Web com os quais os clientes 110a, 110b, 110c, HOd, HOe, etc. se comunicam através de qualquer um de uma série de protocolos conhecidos tal como HTTP. Os servidores 10a, 10b, etc. podem também servir como clientes 110a, 110b, 110c, HOd, HOe, etc. como pode ser característico de um ambiente de computação distribuído. As comunicações podem ser ligadas por fio ou sem fio, onde apropriado. Os dispositivos do cliente 110a, 110b, 110c, HOd, HOe, etc. podem ou não se comunicar através da rede de comunicações/barramento 14, e podem ter comunicações independentes associadas com eles. Por exemplo, no caso de uma TV ou VCR, pode existir ou não um aspecto de rede para o seu controle. Cada computador de cliente 110a, 110b, 110c, HOd, lOOe, etc. e computador do servidor 10a, 10b, etc. po- de ser equipado com vários módulos de programa de aplicação ou objetos 135 e com conexões ou acesso a vários tipos de elementos de armazenamento ou objetos, através dos quais os arquivos podem ser armazenados ou nos quais parte (ões) dos arquivos pode(m) ser transferida (s) ou migrada (s) . Qualquer computador 10a, 10b, 110a, 110b, etc. pode ser responsável pela manutenção e atualização de uma base de dados 20 ou outro elemento de armazenamento de acordo com o presente invenção, tal como uma base de dados ou memória 20 para armazenar objeto(s) do gráfico ou objeto(s) do gráfico intermediário ou dados processados de acordo com a invenção. Assim, a presente invenção pode ser utilizada em um ambiente de rede de computador tendo computadores de cliente 110a, 110b, etc. que podem acessar e interagir com uma rede de computa-dor/barramento 14 e computadores do servidor 10a, 10b, etc. que podem interagir com computadores do cliente 110a, 110b, etc. e outros dispositivos semelhantes, e bases de dados 20.
DISPOSITIVO DE COMPUTAÇÃO EXEMPLAR A Fig. 3B e a discussão seguinte são planejadas para proporcionar uma breve descrição geral de um ambiente de computação adequado no qual a invenção pode ser implementada. Deve ser entendido, entretanto, que dispositivos de computação de mão, portáteis e outros e objetos de computação de todos os tipos são considerados para uso em conjunto com a presente invenção. Embora um computador de uso geral seja descrito abaixo, isso é apenas um exemplo, e a presente invenção pode ser implementada com um cliente magro tendo interoperabilidade de rede/barramento e interação. Assim, a presente invenção pode ser implementada em um ambiente de serviços hospedados em rede nos quais muito poucos recursos de cliente ou recursos mínimos são envolvidos, por exemplo, um ambiente de rede no qual o dispositivo do cliente serve meramente como uma interface para a rede/barramento, tal como um objeto colocado em um aparelho. Essencialmente, em qualquer lugar que os dados possam ser armazenados ou do qual os dados possam ser recuperados é um ambiente desejável, ou adequado, para a operação das técnicas de encadea-mento de gráfico da invenção.
Embora não requerido, a invenção pode ser implementada através de um sistema operacional, para uso por um desenvolvedor de serviços para um dispositivo ou objeto, e/ou incluída dentro do software de aplicação que opera em conjunto com alvos intermediários da invenção. A invenção também envolve o desenho dos shaders vértice e pixel shaders igualmente de modo a interagir com os alvos intermediários da invenção. 0 software pode ser descrito no contexto geral das instruções executáveis pelo computador, tal como módulos de programa, sendo executadas por um ou mais computadores, tais como estações de trabalho de cliente, servidores ou outros dispositivos. Geralmente, módulos de programa incluem rotinas, programas, objetos, componentes, estruturas de dados e semelhantes que executam tarefas particulares ou implementam tipos de dados abstratos particulares. Tipicamente, a funcionalidade dos módulos do programa pode ser combinada ou distribuída como desejado em várias modalidades. A-lém do mais, esses peritos na técnica verificarão que a in- venção pode ser praticada com outras configurações de sistema de computador. Outros sistemas de computação bem conhecidos, ambientes e/ou configurações que podem ser adequados para uso com a invenção incluem, mas não são limitados a, computadores pessoais (PCs), máquinas de caixa automáticas, computadores de servidor, dispositivos de mão ou laptops, sistemas de multiprocessador, sistemas baseados em microprocessador, eletrônica de consumidor programável, PCs de rede, aparelhos, luzes, elementos de controle ambiental, minicom-putadores, computadores de grande porte e semelhantes. A invenção pode também ser praticada nos ambientes de computação distribuídos onde as tarefas são executadas pelos dispositivos de processamento remoto que são ligados através de uma rede de comunicações/barramento ou outro meio de transmissão de dados. Em um ambiente de computação distribuído, módulos do programa podem estar localizados em ambos os meios de armazenamento de computador local e remoto incluindo dispositivos de armazenamento de memória e nós de cliente podem por sua vez comportar-se como nós do servidor. A Fig. 3B assim ilustra um exemplo de um ambiente de sistema de computação adequado 100 no qual a invenção pode ser implementada, embora como dito claramente acima, o ambiente do sistema de computação 100 é somente um exemplo de um ambiente de computação adequado e não é planejado para sugerir qualquer limitação quanto ao escopo de uso ou funcionalidade da invenção. Nem deve o ambiente de computação 100 ser interpretado como tendo qualquer dependência ou exi- gência com relação a qualquer um ou combinação de componentes ilustrados no ambiente de operação exemplar 100.
Com referência à Fig. 3B, um sistema exemplar para implementar a invenção inclui um dispositivo de computação de uso geral na forma de um computador 110 . Componentes do computador 110 podem incluir, mas não são limitados a, uma unidade de processamento 120, uma memória do sistema 130 e um barramento do sistema 121 que reúne vários componentes do sistema incluindo a memória do sistema na unidade de processamento 120. 0 barramento do sistema 121 pode ser qualquer uma de vários tipos de estruturas de barramento incluindo um barramento de memória ou controlador de memória, um barramento periférico, e um barramento local usando qualquer uma de uma variedade de arquiteturas de barramento. Por meio de exemplo, e não limitação, tais arquiteturas incluem barramento de Arquitetura Padrão Industrial (ISA), barramento de Arquitetura de Micro Canal (MCA), barramento ISA Aperfeiçoado (EISA), barramento local da Associação dos Padrões Eletrônicos de Vídeo (VESA) e barramento de Interligação de Componente Periférico (PCI) (também conhecido como barramento Mezanino). 0 computador 110 tipicamente inclui uma variedade de meios legíveis pelo computador. Meios legíveis pelo computador podem ser quaisquer meios disponíveis que podem ser acessados pelo computador 110 e incluem tanto meios voláteis quanto não voláteis, meios removíveis e não removíveis. Por meio de exemplo, e não limitação, meios legíveis por computador podem compreender meios de armazenamento de computador e meios de comunicação. Meios de armazenamento de computador incluem meios tanto voláteis quanto não voláteis, removíveis e não removíveis implementados em qualquer método ou tecnologia para armazenamento de informação tais como instruções legíveis pelo computador, estruturas de dados, módulos do programa ou outros dados. Meios de armazenamento de computador incluem, mas não são limitados a, RAM, ROM, EEPROM, memória flash ou outra tecnologia de memória, CD-ROM, discos versáteis digitais (DVD) ou outro armazenamento de disco ótico, cassetes magnéticos, fita magnética, armazenamento de disco magnético ou outros dispositivos de armazenamento magnético ou qualquer outro meio que pode ser usado para armazenar a informação desejada e que pode ser acessado pelo computador 110. Meios de comunicação tipicamente personificam instruções legíveis pelo computador, estruturas de dados, módulos do programa ou outros dados em um sinal de dados modulado tal como uma onda portadora ou outro mecanismo de transporte e incluem quaisquer meios de entrega de informação. O termo "sinal de dados modulado" significa um sinal que tem uma ou mais de suas características ajustadas ou alteradas em uma tal maneira de modo a codificar a informação no sinal. Por meio de exemplo, e não limitação, meios de comunicação incluem meios ligados por fio tal como uma rede ligada por fio ou conexão com fio direto, e meios sem fio tal como meios sem fio acústicos, de RF, infravermelhos e outros. Combinações de qualquer um dos acima devem também ser incluídas dentro do escopo dos meios legíveis por computador . A memória do sistema 130 inclui meios de armazenamento de computador na forma de memória volátil e/ou não volátil tal como memória somente de leitura (ROM) 131 e memória de acesso aleatório (RAM) 132. Um sistema básico de en-trada/saída 133 (BIOS), contendo as rotinas básicas que ajudam a transferir informação entre elementos no computador 110, tal como durante a partida, é tipicamente armazenado na ROM 131. A RAM (132) tipicamente contém dados e/ou módulos do programa que são imediatamente acessíveis para e/ou atualmente sendo operados pela unidade de processamento 120. Por meio de exemplo, e não limitação, a Fig. 3B ilustra o sistema operacional 134, programas de aplicação 135, outros módulos do programa 136 e dados do programa 137. O computador 110 pode também incluir outros meios de armazenamento de computador removíveis/não removíveis, voláteis/não voláteis. Por meio de exemplo somente, a Fig. 3B ilustra uma unidade de disco rígido 141 que lê de ou escreve nos meios magnéticos não removíveis, não voláteis, uma unidade de disco magnético 151 que lê de ou escreve em um disco magnético removível, não volátil 152 e uma unidade de disco ótico 155 que lê de ou escreve em um disco ótico removível, não volátil 156, tal como um CD-ROM ou outros meios óticos. Outros meios de armazenamento de computador removíveis/não removíveis, voláteis/não voláteis que podem ser usados no ambiente de operação exemplar incluem, mas não são limitados a, cassetes de fita magnética, placas de memória flash, discos versáteis digitais, fita de vídeo digital, RAM de estado sólido, ROM de estado sólido e semelhante. A uni- dade de disco rígido 141 é tipicamente conectada no barra-mento do sistema 121 através de uma interface de memória não removível tal como interfaces 140, e a unidade de disco magnético 151 e a unidade de disco ótico 155 são tipicamente conectadas no barramento do sistema 121 por uma interface de memória removível, tal como a interface 150.
As unidades e seus meios de armazenamento de computador associados discutidos acima e ilustrados na Fig. 3B proporcionam armazenamento das instruções legíveis por computador, estruturas de dados, módulos do programa e outros dados para o computador 110. Na Fig. 3B, por exemplo, a unidade de disco rígido 141 é ilustrada como armazenando o sistema operacional 144, programas de aplicação 145, outros módulos do programa 146 e dados do programa 147. Observe que esses componentes podem ser os mesmos que ou diferentes do sistema operacional 134, programas de aplicação 135, outros módulos do programa 136 e dados do programa 137. 0 sistema operacional 144, programas de aplicação 145, outros módulos do programa 14 6 e dados do programa 14 7 são fornecidos com números diferentes aqui para ilustrar que, no mínimo, eles são cópias diferentes. Um usuário pode inserir comandos e informação no computador 110 através dos dispositivos de entrada tal como um teclado 162 e dispositivo ponteiro 161, geralmente citado como um mouse, trackball ou mesa sensível ao toque. Outros dispositivos de entrada (não mostrados) podem incluir um microfone, joystick, mesa de jogos, prato de satélite, scanner ou semelhante. Esses e outros dispositivos de entrada são freqüentemente conectados na unidade de pro- cessamento 120 através de uma interface de entrada do usuário 160 que é acoplada no barramento do sistema 121, mas pode ser conectada por outra interface e estruturas de barramento, tal como uma porta paralela, porta de jogos ou um barramento serial universal (USB). Uma interface de gráfico 182, tal como Northbridge, pode também ser conectada no barramento do sistema 121. Northbridge é um conjunto de circuitos integrados que se comunica com a CPU, ou unidade de processamento hospedeira 120 e assume responsabilidade pelas comunicações da porta do gráfico acelerada (AGP). Uma ou mais unidades de processamento de gráfico (GPUs) 184 pode se comunicar com a interface do gráfico 182. Sob esse aspecto, as GPUs 184 geralmente incluem armazenamento de memória embutido, tal como armazenamento do registrador e GPUs 184 se comunicam com uma memória de vídeo 186, onde os alvos intermediários da invenção podem ser implementados. As GPUs 184, entretanto, são apenas um exemplo de um coprocessador e assim uma variedade de dispositivos de co-processamento pode ser incluída no computador 110, e podem incluir uma variedade de shaders procedurais, tal como pixel shaders e vértice. Um monitor 191 ou outro tipo de dispositivo de exibição é também conectado no barramento do sistema 121 via uma interface, tal como uma interface de vídeo 190, que pode por sua vez se comunicar com a memória do vídeo 186. Além do monitor 191, computadores podem também incluir outros dispositivos de saída periférica tal como alto-falantes 197 e impressora 196, que podem ser conectados através de uma interface periférica de saída 195. O computador 110 pode operar em um ambiente de rede ou distribuído usando conexões lógicas para um ou mais computadores remotos, tal como o computador remoto 180. O computador remoto 180 pode ser um computador pessoal, um servidor, um roteador, um PC de rede, um dispositivo par ou outro nó de rede comum, e tipicamente inclui muitos ou todos os elementos descritos acima em relação ao computador 110, embora somente um dispositivo de armazenamento de memória 181 tenha sido ilustrado na Fig. 3B. As conexões lógicas representadas na Fig. 3B incluem uma rede de área local (LAN) 171 e uma rede de longa distância (WAN) 173, mas podem também incluir outras redes/barramentos. Tais ambientes de rede são comuns em casas, escritórios, redes de computador difundidas na empresa, intranets e a Internet.
Quando usado em um ambiente de rede LAN, o computador 110 é conectado na LAN 171 através de uma interface de rede ou adaptador 170. Quando usado em um ambiente de rede WAN, o computador 110 tipicamente inclui um modem 172 ou outro dispositivo para estabelecer as comunicações através da WAN 173, tal como a Internet. O modem 172, que pode ser interno ou externo, pode ser conectado no barramento do sistema 121 via a interface de entrada do usuário 160, ou outro mecanismo apropriado. Em um ambiente de rede, módulos do programa representados em relação ao computador 110, ou partes do mesmo, podem ser armazenados no dispositivo de armazenamento de memória remoto. Por meio de exemplo, e não limitação, a Fig. 3B ilustra os programas de aplicação remotos 185 como residentes no dispositivo de memória 181. Será ve- rificado que as conexões de rede mostradas são exemplares e outros dispositivos para estabelecer um elo de comunicações entre os computadores pode ser usado.
ESTRUTURAS OU ARQUITETURAS DE COMPUTAÇÃO DISTRIBUÍDAS EXEMPLARES Várias estruturas de computação distribuídas foram e estão sendo desenvolvidas em vista da convergência da computação pessoal e da Internet. Usuários individuais e de negócios semelhantemente são munidos com uma interface habilitada na Web e interoperável de modo total para aplicações e dispositivos de computação, tornando as atividades de computação cada vez mais orientadas pelo navegador da Web ou rede .
Por exemplo, a plataforma .NET da MICROSOFT® inclui servidores, serviços de bloco de construção, tal como armazenamento de dados com base na Web e software de dispositivo transferível. Falando de forma geral, a plataforma .NET proporciona (1) a capacidade para fazer toda a faixa de dispositivos de computação trabalhar junto e ter informação do usuário automaticamente atualizada e sincronizada em todos eles, (2) maior capacidade interativa para os sites da Web, possibilitada pelo maior uso de XML ao invés de HTML, (3) serviços em linha que caracterizam acesso personalizado e entrega de produtos e serviços para o usuário a partir de um ponto de partida central para o gerenciamento de várias aplicações, tal como e-mail, por exemplo, ou software, tal como Office .NET, (4) armazenamento de dados centralizado, que aumentará a eficiência e facilidade de acesso à informa- ção, bem como sincronização da informação entre usuários e dispositivos, (5) a capacidade de integrar vários meios de comunicações, tais como e-mail, faxes e telefones, (6) para desenvolvedores, a capacidade para criar módulos reutilizá-veis, dessa maneira aumentando a produtividade e reduzindo o número de erros de programação e (7) muitos outros aspectos de integração compatíveis com várias plataformas também.
Embora as modalidades exemplares aqui sejam descritas em conjunto com software que reside em um dispositivo de computação, uma ou mais partes da invenção podem também ser implementadas via um sistema operacional, interface de programa de aplicação (API) ou um objeto "intermediário" entre um coprocessador e objeto solicitante, tal que os serviços de amostragem de textura controláveis podem ser executados por, suportados em ou acessados via todas as linguagens e serviços de .NET, e em outras estruturas de computação distribuídas também. Adicionalmente, um outro aspecto para a invenção é os próprios alvos intermediários residindo na memória de vídeo, bem como a arquitetura do gráfico que permite que shaders procedurais recebam programas da API, e os traduza para vários alvos intermediários.
CIRCULAÇÃO DE ALVO INTERMEDIÁRIO MÚLTIPLO
Os sistemas e métodos da invenção possibilitam a criação de uma linguagem de alto nível para abstrair e simplificar o uso das capacidades programáveis em conjunto com a evolução de uma encadeamento de gráfico geralmente progra-mável. A invenção assim possibilita que uma plataforma que permite uma faixa muito mais ampla de técnicas de gráfico seja expressa pelo desenvolvedor, mas executada em níveis de desempenho muito altos pelo hardware do gráfico.
As plataformas gráficas que não tem a nova circulação de alvos intermediários de acordo com a invenção são limitadas no tamanho e complexidade dos programas que operam em um nível por pixel e por vértice de uma perspectiva do desempenho, já que passagens adicionais nos dados são necessárias para atingir um resultado similar. Por exemplo, certos programas que implementam efeitos de iluminação, ou transformações semelhantes, são limitados a gráfico em tempo não real sem a presente invenção por causa da complexidade e/ou comprimento dos programas envolvidos. Como ilustrado pela Fig. 4, um programa de shader relativamente complexo SP excede o limite máximo de instrução para o hardware, por e-xemplo, pixel shader, envolvido e dessa maneira, o desenvolvedor sem a ajuda da invenção é deixado para implementar a transformação pelo processador hospedeiro, que pode não ser rápido o suficiente para demandas em tempo real. Através do uso dos alvos intermediários MRT1 e MRT2, que podem ser dimensionados de modo variável de acordo com a invenção, o desenvolvedor pode na realidade quebrar o programa SP em partes SPP1, SPP2 e SPP3, nenhuma das quais individualmente excede o limite de instrução para o hardware, mas que coletivamente executam a funcionalidade de SP produzindo e reutilizando resultados intermediários. Por exemplo, SPP1 produz como saída os resultados intermediários para o alvo intermediário MRT1, que serve como uma entrada para a parte do programa SPP2, que então produz como saída os resultados inter- mediários para o alvo intermediário MRT2, que por sua vez serve como uma entrada para a parte do programa SPP3, que então produz como saída os dados transformados desejados. A invenção pode assim ser usada para criar programas de comprimento virtualmente ilimitado que permitem a renderização em tempo não real usando aceleração do hardware. A disponibilidade da nova circulação acelerada do hardware ilimitado para aplicações de renderização de tempo não real de acordo com a invenção, dessa maneira, aumenta a velocidade e desempenho de uma plataforma de gráfico.
Além do mais, a capacidade para circular novamente os dados nos MRTs para qualquer programa com uma entrada qualquer número de vezes significa que as operações iterati-vas, e a reutilização dos dados intermediários sem o novo cálculo podem ser realizadas por qualquer programa. Ainda adicionalmente, o formato dos dados nos alvos intermediários é ajustado pelo desenvolvedor tal que MRT1 pode incluir dados de cor Vermelha, Verde, Azul, mas MRT2 pode incluir dados totalmente irrelevantes à cor, por exemplo, os dados podem ter a ver com uma função complexa de posição, ou peso. Também, como mencionado acima, o tamanho dos armazenamento temporários, i.e., a quantidade de dados armazenados nos alvos intermediários, pode ser ajustado de modo variável para uma quantidade variada de resolução para os dados do gráfico .
Como usado aqui, alvos de nova circulação múltiplos (MRTs) da invenção são texturas que são usadas como armazenamento temporários. Os armazenamento temporários podem ser usados como entradas para e saída de um programa por pixel comumente citado como um "pixel shader". Um programa de pixel shader único pode simultaneamente inserir de qualquer número desses MRTs na forma de texturas enquanto produzindo como saída para qualquer número de outros MRTs que aparecem como alvos de renderização. 0 número desses armazenamento temporários distintos é limitado somente pelo hardware, e o tamanho da memória de vídeo, e assim esses armazenamento temporários podem ser muito numerosos.
Componentes exemplares da invenção incluem: (1) programa(s) de pixel shader que têm a capacidade para amostrar textura e fornecer como saída para múltiplos alvos de renderização além de qualquer saída de armazenamento temporário de quadro opcional final e (2) armazenamento temporários de nova circulação que podem ser amarrados aos programais) de pixel shader como alvos de renderização para a saída ou texturas para entrada.
MODALIDADES NÃO LIMITADORAS O que seguem são implementações de software não limitadoras da invenção que utilizam os componentes acima da invenção. Sob esse aspecto, a invenção expressa MRTs em pelo menos duas formas de modo a acomodar variações no hardware. As implementações incluem uma forma descrita como uma forma MET e uma forma descrita como uma forma MRT. A forma MET é uma forma mais simples. No caso de MET, as quatro saídas intermediárias de componente geralmente associadas com um elemento de cor são escritas em uma única superfície em um modo intercalado. No caso MRT, os elementos de cor individuais podem ser amarrados a superfícies individuais separadamente. Essas superfícies podem variar no formato para cada elemento de cor em qualquer que seja a maneira ótima para a técnica sendo expressa pelo programa do pixel shader.
API DO MET NÃO LIMITADOR
Com finalidades da API do MET, texturas tradicionais são consideradas como texturas de elemento único, possibilitando que aplicações escrevam em múltiplos elementos de uma textura simultaneamente a partir do pixel shader, de modo que na próxima passagem de renderização, uma aplicação pode usar um ou mais desses elementos como uma textura de elemento único, i.e., como entradas para o pixel shader. Esses elementos adicionais podem ser imaginados como armazenamento temporário para resultados intermediários que serão usados em uma passagem posterior pela aplicação. 0 uso não limitador exemplar dos METs é ilustrado pelo fluxograma de pseudocódigo da Fig. 5. Em 500, uma aplicação descobre suporte para os alvos intermediários verificando a disponibilidade dos formatos MET. Em 510, a aplicação cria as superfícies do MET por uma chamada por uma função CriarSuperf ície. Em 520, a aplicação ajusta um MET como AlvodeRenderização via uma chamada de função AjustarAlvode-Renderização. 0 pixel shader 230 fornece como saída para as superfícies usando uma instrução mover. Em 530, uma função AjustarTextura é chamada para ajustar uma superfície do MET para um estágio particular. Como outras texturas, a mesma superfície pode ser ajustada para múltiplos estágios de uma vez. Em 540, uma função AjustarEstadodoAmostrador é chamada para configurar uma variável D3DSAMP_ELEMENTINDEX para o número do elemento apropriado na textura MET da qual o amos-trador tira a amostra, por meio do que o valor padrão para o estado do amostrador é 0, o que significa que texturas sem MET funcionarão. Uma chamada de função ValidarDispositivo relata o ajuste desse estado para um número não apropriado, por exemplo, se o MET é somente de 2 elementos de largura mas o amostrador é solicitado para tirar amostra do 4o' elemento . 0 seguinte é uma API não limitadora que suporta o recurso MET. Existem formatos de superfícies como os mostrados abaixo que expressam a intercalação do formato. // formatos de superfície intercalados que a placa pode suportar D 3 D FMT_MULT12_ARGB 8 = MAKEFOURCC('Μ' , 'E' ,'Τ' ,'1') , D 3 DFMT_MULT14_ARGB 8 = MAKEFOURCC('Μ',Έ','Τ',^'), // Estado do amostrador para indicar qual elemento escolher. D3DSAMP_ELEMENTINDEX // Estados de renderização // D3DRS_COLORWRITEENABLE aplica para alvo de renderização (ou elemento) zero. D3 DRS_C0L0RWRITEENABLE1 D3DRS_COLORWRITEENABLE2 D 3 DRS_COLORWRITEENABLE3 // Topos específicos do dispositivo opcional D3DPMISCCAPS_INDEPENDENTWRITEMASKS // Verdadeiro se dispositivo pode suportar máscaras de escrita independentes API DE ALVOS DE RENDERIZAÇÃO MÚLTIPLOS (MRT) NÃO LIMITADORES
Muitas implementações suportam uma forma menos restritiva de MET, chamada aqui MRT. Um tal relaxamento é a capacidade de ter múltiplos alvos de renderização que podem ser criados independentemente. Essas renderizações podem ter formatos diferentes. Atualmente, algumas APIs gráficas 3-D suportam um único Alvo de Renderização que é ajustável via a API AjustarAlvodeRenderização pré existente. De acordo com a invenção, esse ponto de entrada da API foi estendido para permitir que múltiplos alvos de renderização fiquem simultaneamente presentes no dispositivo. Um novo topo expressa essa capacidade.
Os registradores oCn seguintes abaixo representam elementos diferentes exemplares de uma textura MET: (a) oCO: Cor 0 (elemento 0) , (b) oCl: Cor 1 (elemento 1) , (c) oC2 : Cor 2 (elemento 2), (d) oC3: Cor 3 (elemento 3) e (e) oPro- fundidade: Novo valor de profundidade para teste de profundidade contra armazenamento temporário estêncil de profundidade. Os registradores oCx podem ser escritos para usar uma instrução mover.
Pseudocódigo não limitador exemplar para uma API do MRT segue: IDirect3DDevice9::SetRenderTarget(DWORD RenderTar-getlndex, IDirect3DSurface9*pRenderTarget); IDirect3DDevice9::GetRenderTarget(DWORD RenderTar-getlndex, IDirect3DSurface9**ppRenderTarget); // Topo específico do dispositivo D3DCAPS9.NumSimultaneousRTs // 1 para todos exceto esses que podem suportar esse recurso. Nunca 0. // Instrução mover Move:mov Formato da Ficha: 1 ficha do código da operação - D3DSI0_M0V (campo de comprimento da instrução ajustado para: 2) 1 ficha de alvo 1 ficha fonte Instrução: mov[_sat]dst[.mask],[-]srcO[.swizzle] 0 seguinte inclui uma descrição de pseudocódigo exemplar para um tipo de componente mover: Operação: dst = srcO dst pode ser r#/oC#/oProfundidade srcO pode ser r#/c#/v#/t# USO EXEMPLAR DOS ALVOS INTERMEDIÁRIOS A Fig. 6 ilustra que com os alvos intermediários da invenção, uma pluralidade de alvos intermediários pode ser criada como saídas do mecanismo de pixel, com depósitos variados de informação, ao contrário das técnicas do mecanismo de pixel da técnica anterior. Além do mais, os dados nos alvos intermediários podem ser preservados indefinidamente e dessa maneira, podem ser reutilizados posteriormente. Por exemplo, os pixels PI a PN podem armazenar valores de pixels R, G e B e ser colocados no alvo intermediário ΙΤ2. Os pixels PW a PX podem armazenar valores de iluminação e ser colocados no alvo intermediário IT2 e os pixels PY a PZ podem armazenar algum outro resultado intermediário e ser colocados no alvo intermediário IT3. Os dados em cada um dos alvos intermediários IT1, IT2 e IT3 podem ser reutilizados pelos mesmos programas ou diferentes, ou partes do programas, e assim uma variedade de efeitos de sombreado complexos pode ser atingida. 0 hardware, por exemplo, o chip de gráfico incluindo um shader vértice e um pixel shader, fornece como saída para ou insere dos alvo(s) intermediário(s) de acordo com a especificação do desenvolvedor via as APIs.
Para um exemplo de uma operação mais complexa que pode ser realizada de acordo com a invenção, a Fig. 7 ilustra um alvo intermediário MRT1 que persistiu por algum tempo, e é solicitado de ser uma entrada para a Passageml de um primeiro programa, que adota MRT1 como uma entrada e fornece como saída o alvo intermediário MRT2. Subseqüentemente, ou previamente, a Passagem2 do programa adota MRT1 como uma entrada e fornece como saída o alvo intermediário MRT3. Adicionalmente, a Passagem3 do programa fornece como saída o alvo intermediário MRT4 sem entrada. Finalmente, a Passagem4 do programa executa alguma operação tomando MRT2, MRT3 e MRT4 como entradas para o hardware. Vários MRTs são usados para permitir que vários programas de pixel compartilhem dados intermediários em um modo mais complexo. Isso demonstra que a duração do MRT é totalmente dependente do controle do desenvolvedor.
Em outras palavras, o programa começa com a Passa-geml. Os dados são lidos do MRT1 (que foi criado algum tempo antes por algum outro programa). A Passageml executa algum algoritmo programático e produz MRT2. A Passagem2 novamente usa MRT1 e executa um algoritmo diferente para produzir MRT3. A Passagem3 gera de modo algorítmico MRT4 sem a entrada . A Passagem4 (passagem final) combina dados de MRT2, MRT3 e MRT4 para finalmente emitir os dados de cor correta para o armazenamento temporário do quadro, um efeito de sombreado muito mais complicado do que pôde ter sido atingido antes com hardware de gráfico com as limitações da técnica anterior .
Existem múltiplas maneiras de implementação da presente invenção. Uma maneira é proporcionar uma implementação por meio da qual o(s) coprocessador(es), por exemplo, GPUs, é (são) pré fabricado(s) para executar a funcionalidade da invenção, e receber comandos adequados para os múltiplos alvos intermediários como descrito aqui. Uma outra implementação da invenção inclui uma API apropriada, conjunto de ferramenta, código de driver, sistema operacional, objeto de software dedicado ou transferível, etc. que possibilita que aplicações e serviços usem os alvos intermediários para obter funcionalidade mais complexa. A invenção considera o uso da invenção do ponto de vista de uma API (ou outro objeto de software) , do chip do gráfico e da memória do vídeo. Assim, várias implementações da invenção descritas aqui têm aspectos que estão totalmente no hardware, parcialmente no hardware e parcialmente no software, bem como no software.
Como mencionado acima, embora modalidades exemplares da presente invenção tenham sido descritas em conjunto com vários dispositivos de computação e arquiteturas de rede, os conceitos básicos podem ser aplicados a qualquer dispositivo de computação ou sistema no qual é desejável programar os shaders procedurais em mais do que as maneiras triviais. Assim, as técnicas para proporcionar capacidade de programação aperfeiçoada dos shaders procedurais de acordo com a presente invenção podem ser aplicadas em uma variedade de aplicações e dispositivos. Por exemplo, o(s) algoritmo(s) e implementações de hardware da invenção podem ser aplicados no sistema operacional de um dispositivo de computação, proporcionado como um objeto separado no dispositivo, como parte de um outro objeto, como um objeto transferível de um servidor, como um "intermediário" entre um dispositivo ou objeto e a rede, como um objeto distribuído, como hardware, na memória, uma combinação de qualquer um dos precedentes, etc. Embora linguagens de programação exemplares, nomes e exemplo sejam escolhidos aqui como representativos de várias escolhas, essas linguagens, nomes e exemplos não são planejados para serem limitadores. Alguém de conhecimento comum na técnica verificará que existem numerosas maneiras de proporcionar código de objeto que atinge a mesma funcionalidade, similar ou equivalente a atingida pela API da invenção .
As várias técnicas descritas aqui podem ser implementadas em conjunto com hardware ou software ou, onde apropriado, com uma combinação de ambos. Assim, os métodos e aparelho da presente invenção, ou certos aspectos ou partes da mesma, podem adotar a forma de código de programa (i.e., instruções) personificado em meios tangíveis, tais como disquetes flexíveis, CD-ROMs, unidades rígidas ou qualquer outro meio de armazenamento legível pela máquina, onde, quando o código do programa é carregado em e executado por uma máquina, tal como um computador, a máquina torna-se um aparelho para praticar a invenção. No caso da execução do código do programa em computadores programáveis, o dispositivo de computação geralmente incluirá um processador, um meio de armazenamento legível pelo processador (incluindo memória volátil e não volátil e/ou elementos de armazenamento), pelo menos um dispositivo de entrada e pelo menos um dispositivo de saída. Um ou mais programas que podem utilizar os serviços de alvo intermediário da presente invenção, por exemplo, através do uso de uma API de processamento de dados ou semelhante, são preferivelmente implementados em uma linguagem de programação orientada a objetos ou procedural de alto nível para se comunicar com um sistema de computador. Entretanto, o(s) programa(s) pode(m) ser implementado(s) em linguagem assembly ou de máquina, se desejado. Em qualquer caso, a linguagem pode ser uma linguagem compilada ou interpretada, e combinada com implementações de hardware.
Os métodos e aparelhos da presente invenção podem também ser praticados via comunicações personificadas na forma de código de programa que é transmitido através de algum meio de transmissão, tal como através de fiação ou cabe-amento elétrico, através de fibra ótica ou através de qual- quer outra forma de transmissão, onde, quando o código do programa é recebido e carregado em e executado por uma máquina, tal como EPROM, arranjo de circuitos, um dispositivo lógico programável (PLD) , um computador de cliente, um gravador de vídeo ou semelhante, ou uma máquina de recepção tendo as capacidades de processamento de sinal como descrito nas modalidades exemplares acima torna-se um aparelho para a prática da invenção. Quando implementado em um processador de uso geral, o código do programa combina com o processador para proporcionar um aparelho único que opera para invocar a funcionalidade da presente invenção. Adicionalmente, quaisquer técnicas de armazenamento usadas em conjunto com a presente invenção podem ser invariavelmente uma combinação de hardware e software.
Embora a presente invenção tenha sido descrita em conjunto com as modalidades preferidas das várias figuras, é para ser entendido que outras modalidades similares podem ser usadas ou modificações e adições podem ser feitas na modalidade descrita para executar a mesma função da presente invenção sem se desviar da mesma. Por exemplo, embora ambientes de rede exemplares da invenção sejam descritos no contexto de um ambiente em rede, tal como um ambiente em rede não hierárquico, alguém perito na técnica verificará que a presente invenção não é limitada a ele, e que os métodos, como descritos no presente pedido podem se aplicar a qualquer dispositivo de computação ou ambiente, tal como um console de jogos, computador de mão, computador portátil, etc., quer ligado por fio ou sem fio, e podem ser aplicados a qualquer número de tais dispositivos de computação conectados através de uma rede de comunicações, e interagir através da rede. Além do mais, deve ser enfatizado que uma variedade de plataformas de computador, incluindo sistemas operacionais de dispositivo de mão e outros sistemas operacionais específicos da aplicação é considerada, especialmente quando o número de dispositivos em rede sem fio continua a proliferar. Ainda adicionalmente, a presente invenção pode ser implementada em ou através de uma pluralidade de chips ou dispositivos de processamento, e o armazenamento pode similarmente ser efetuado através de uma pluralidade de dispositivos. Portanto, a presente invenção não deve ser limitada a qualquer modalidade única, mas preferivelmente deve ser interpretada em amplitude e escopo de acordo com as reivindicações anexas.

Claims (20)

1. Método para proporcionar e utilizar alvos de memória intermediária em um sistema de computação (100) que possui um sistema central incluindo uma unidade de processamento (120) central (CPU) e um subsistema de gráfico que inclui uma unidade de processamento (184) de gráfico (GPU), o método caracterizado pelo fato de que compreende as etapas de: acessar um programa de gráfico que, quando operado, excede uma contagem máxima de instrução de hardware de gráficos, em que o programa de gráfico processa gráficos tridimensionais com uma pluralidade de superfícies, em que elementos de cor da pluralidade de superfícies são limitados a superfícies individuais separadamente; separar o programa de gráfico em conjuntos de instruções de programa em que cada conjunto de instruções de programa não excede a contagem máxima de instrução de hardware de gráfico; transmitir, a partir do sistema central, um primeiro conjunto de instruções de programa para pelo menos um componente do hardware de gráfico do subsistema de gráfico para programar o pelo menos um componente a executar uma função especializada; em que o pelo menos um componente inclui um shader procedural, e em que o pelo menos um componente inclui um dentre (A) inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente do hardware de gráfico e (B) fornecer como saída dados do pelo menos um componente de hardware de gráfico para um alvo de memória intermediária; transmitir um segundo conjunto de instruções de programa para o pelo menos um componente do hardware de gráfico para programar o pelo menos um componente a executar uma segunda função especializada que inclui pelo menos um dentre (A) reutilizar os dados de pelo menos um alvo de memória intermediária como uma entrada para o pelo menos um componente, (B) inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente, e (C) fornecer como saída dados do pelo menos um componente para um alvo de memória intermediária; e armazenar e recircular os dados de múltiplos do pelo menos um dos alvos de memória intermediária para executar uma terceira função especializada, em que os dados dos múltiplos do pelo menos um alvo intermediário (MRTl, MRT2, MRT3, MRT4) são reutilizados para executar a terceira função especializada diferente das primeira e segunda funções especializadas, em que a resolução de cada alvo de memória intermediária é ajustada de modo variável.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o alvo de memória intermediária e uma parte da memória de vídeo (186) , e em que o programa de gráfico opera em uma base por vertex em tempo real.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que os dados em um alvo de memória intermediária persistem.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o shader procedural é um dentre um vertex shader (200) e um pixel shader (220), em que o primeiro conjunto de instruções de programa emite dados para múlti- pios elementos de uma textura simultaneamente, e em que o segundo conjunto de instruções de programa utiliza uma pluralidade dos múltiplos elementos como um único elemento de textura .
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que os dados em um primeiro alvo de memória intermediária representam tipos e quantidades de dados de pixel diferentes do que os dados em um segundo alvo de memória intermediária.
6. Sistema de computação (100) compreendendo uma central de processamento central (CPU) e uma unidade de processamento (184) de gráfico (GPU), o sistema de computação (100) configurado para executar uma interface de programa de aplicação (135, 145) para fazer interface com pelo menos um sistema de computação (100) de alvo, o sistema de computação (100) caracterizado pelo fato de que realiza etapas compreendendo : acessar um programa de gráfico que, quando operado, excede uma contagem máxima de instrução de hardware de gráficos, em que o programa de gráfico processa gráficos tridimensionais com uma pluralidade de superfícies, e em que elementos de cor da pluralidade de superfícies são limitados a superfícies individuais separadamente; separar, através do sistema de computação (100), o programa de gráfico em conjuntos de instruções de programa em que cada conjunto de instruções de programa não excede a contagem máxima de instrução de hardware de gráfico; transmitir, através do sistema de computação (100), um primeiro conjunto de instruções de programa para pelo me- nos um componente do hardware de gráfico do sistema de computação (100) , em que o pelo menos um componente inclui um shader procedural, e em que o primeiro conjunto de instruções de programa o pelo menos um componente de hardware para realizar função especializada, a dita função especializada incluindo um dentre: (A) inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente de hardware e (B) fornecer como saida dados do pelo menos um componente de hardware para um alvo de memória intermediária; transmitir, pelo sistema de computação (100), um segundo conjunto de instruções de programa para o pelo menos um componente do hardware de gráfico para programar o pelo menos um componente de hardware do sistema de computação (100) para programar o pelo menos um componente a executar uma segunda função especializada que inclui pelo menos um dentre (A) reutilizar os dados de pelo menos um alvo de memória intermediária como uma entrada para o pelo menos um componente de hardware, (B) inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente de hardware, e (C) fornecer como saida dados do pelo menos um componente de hardware para um alvo de memória intermediária; e armazenar e recircular, através do sistema de computação (100), os dados de múltiplos do pelo menos um dos alvos de memória intermediária para executar uma terceira função especializada, em que os dados dos múltiplos do pelo menos um alvo intermediário (MRTl, MRT2, MRT3, MRT4) são reutilizados para executar a terceira função especializada diferente das primeira e segunda funções especializadas, em que a resolução de cada alvo de memória intermediária é ajustada de modo variável .
7. Sistema de computação, de acordo com a reivindicação 6, caracterizado pelo fato de que o alvo de memória intermediária e uma parte da memória de video (186).
8. Sistema de computação, de acordo com a reivindicação 6, caracterizado pelo fato de que os dados em um alvo de memória intermediária persistem.
9. Sistema de computação, de acordo com a reivindicação 6, caracterizado pelo fato de que o pelo menos um componente inclui um shader procedural.
10. Sistema de computação, de acordo com a reivindicação 9, caracterizado pelo fato de que o shader procedural é um dentre um vertex shader (200) e um pixel shader (220) .
11. Sistema de computação, de acordo com a reivindicação 6, caracterizado pelo fato de que os dados em um primeiro alvo de memória intermediária representam tipos e quantidades de dados de pixel diferentes do que os dados em um segundo alvo de memória intermediária.
12. Dispositivo de co-processamento para uso em conjunto com alvos de memória intermediária, caracterizado pelo fato de que compreende: um componente manipulador de programa de gráfico para acessar programa de gráfico, em que o programa de gráfico excede uma contagem máxima de instrução de hardware de gráficos, em que o programa de gráfico processa gráficos tridimensionais com uma pluralidade de superfícies, em que elementos de cor da pluralidade de superfícies são limitados a superfícies individuais separadamente, e em que o componente manipulador de programa de gráfico separa o programa de gráfico em conjuntos de instruções de programa em que cada conjunto de instruções de programa não excede a contagem máxima de instrução de hardware de gráfico; um componente de entrada (162) para receber um conjunto de instruções de programa para pelo menos um componente do dispositivo de co-processamento, em que o pelo menos um componente de hardware inclui um shader procedural, e em que o conjunto de instruções de programa o pelo menos um componente a executar uma função especializada, a dita função especializada incluindo um dentre (A) inserir dados de um alvo de memória intermediária para o pelo menos um componente e (B) fornecer como saída dados do pelo menos um componente para um alvo de memória intermediária; um componente de entrada (162) para receber um segundo conjunto de instruções de programa para pelo menos um componente do dispositivo de co-processamento programar o pelo menos um componente a executar uma segunda função especializada; a dita segunda função especializada incluindo pelo menos um dentre (A) reutilizar os dados de pelo menos um alvo de memória intermediária como uma entrada para o pelo menos um componente, (B) inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente, e (C) fornecer como saída dados do pelo menos um componente para um alvo de memória intermediária; e um componente de entrada (162) para receber dados ar- mazenados e re-circulados de múltiplos do pelo menos um dos alvos de memória intermediária para executar uma terceira função especializada diferente das primeira e segunda funções especializadas, em que a resolução de cada alvo de memória intermediária é ajustada de modo variável.
13. Dispositivo de co-processamento, de acordo com a reivindicação 12, caracterizado pelo fato de que o alvo de memória intermediária e uma parte da memória de video (186) , e em que o programa de gráfico opera em uma base por vertex em tempo real.
14. Dispositivo de co-processamento, de acordo com a reivindicação 12, caracterizado pelo fato de que os dados em um alvo de memória intermediária persistem.
15. Dispositivo de co-processamento, de acordo com a reivindicação 12, caracterizado pelo fato de que o shader procedural é um dentre um vertex shader (200) e um pixel shader (220), em que o primeiro conjunto de instruções de programa emite dados para múltiplos elementos de uma textura simultaneamente, e em que o segundo conjunto de instruções de programa utiliza uma pluralidade dos múltiplos elementos como um único elemento de textura.
16. Dispositivo de co-processamento, de acordo com a reivindicação 12, caracterizado pelo fato de que os dados em um primeiro alvo de memória intermediária representam tipos e quantidades de dados de pixel diferentes do que os dados em um segundo alvo de memória intermediária.
17. Dispositivo de co-processamento, de acordo com a reivindicação 12, caracterizado pelo fato de que o dito dispositivo de co-processamento inclui pelo menos uma unidade de processamento (184) de gráfico (GPU).
18. Sistema para utilizar alvos de memória intermediária em um sistema de gráfico, o sistema caracterizado pelo fato de que compreende: meios para acessar um programa de gráfico que, quando operado, excede uma contagem máxima de instrução de hardware de gráficos, em que o programa de gráfico processa gráficos tridimensionais com uma pluralidade de superfícies, e em que o pelo menos um componente inclui um shader procedural; meios para separar o programa de gráfico em conjuntos de instruções de programa em que cada conjunto de instruções de programa não excede a contagem máxima de instrução de hardware de gráfico; meios para transmitir um conjunto de instruções de programa para pelo menos um componente do hardware de gráfico de um subsistema de gráfico para programar o pelo menos um componente a executar uma função especializada, em que o pelo menos um componente inclui um shader procedural, e em que a função especializada inclui um dentre (A) meios para inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente de hardware, e (B) meios para fornecer como saída dados do pelo menos um componente de hardware para um alvo de memória intermediária; meios para transmitir um segundo conjunto de instruções de programa para o pelo menos um componente do hardware de gráfico para programar o pelo menos um componente a executar uma segunda função especializada que inclui pelo menos um dentre (A) meios para reutilizar os dados de pelo menos um alvo de memória intermediária como uma entrada para o pelo menos um componente, (B) inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente, e (C) fornecer como saida dados do pelo menos um componente para um alvo de memória intermediária; e meios para armazenar e recircular os dados de múltiplos do pelo menos um dos alvos de memória intermediária para executar uma terceira função especializada, em que os dados dos múltiplos do pelo menos um alvo intermediário (MRTl, MRT2, MRT3, MRT4) são reutilizados para executar a terceira função especializada diferente das primeira e segunda funções especializadas, em que a resolução de cada alvo de memória intermediária é ajustada de modo variável.
19. Sistema de computação (100) que executa uma interface de programa de aplicação (135, 145) para fazer interface com pelo menos um alvo de memória intermediária via pelo menos um componente de hardware no sistema de computação (100), o sistema de computação (100) caracterizado pelo fato de que compreende: meios para acessar um programa de gráfico que, quando operado, excede uma contagem máxima de instrução de hardware de gráficos, em que o programa de gráfico processa gráficos tridimensionais com uma pluralidade de superfícies, e em que elementos de cor da pluralidade de superfícies são limitados a superfícies individuais separadamente; meios para separar o programa de gráfico em conjuntos de instruções de programa em que cada conjunto de instruções de programa não excede a contagem máxima de instrução de hardware de gráfico; meios para transmitir, através de um componente do sistema de computação (100), um conjunto de instruções de programa para pelo menos um componente de hardware de um sub-sistema de gráfico, em que o pelo menos um componente de hardware inclui um shader procedural, e em que o conjunto de instruções de programa o pelo menos um componente de hardware a executar uma função especializada, a dita função especializada inclui um dentre (A) inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente de hardware, e (B) fornecer como saida dados do pelo menos um componente de hardware de gráfico para um alvo de memória intermediária; meios para transmitir, através de um componente do sistema de computação (100) , um segundo conjunto de instruções de programa para o pelo menos um componente do hardware do sistema de computação (100) para programar o pelo menos um componente de hardware a executar uma segunda função especializada que inclui pelo menos um dentre (A) meios para reutilizar os dados de pelo menos um alvo de memória intermediária como uma entrada para o pelo menos um componente de hardware, (B) inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente de hardware, e (C) fornecer como saida dados do pelo menos um componente de hardware para um alvo de memória intermediária; e meios para armazenar e recircular, através de um componente do sistema de computação (100), os dados de múltiplos do pelo menos um dos alvos de memória intermediária para executar uma terceira função especializada, em que os dados dos múltiplos do pelo menos um alvo intermediário (MRTl, MRT2, MRT3, MRT4) são reutilizados para executar a terceira função especializada diferente das primeira e segunda funções especializadas, em que a resolução de cada alvo de memória intermediária é ajustada de modo variável.
20. Dispositivo de co-processamento para uso em conjunto com alvos de memória intermediária, caracterizado pelo fato de que compreende: meios para acessar um programa de gráfico que, quando operado, excede uma contagem máxima de instrução de hardware de gráficos, em que o programa de gráfico processa gráficos tridimensionais com uma pluralidade de superfícies, e em que elementos de cor da pluralidade de superfícies são limitados a superfícies individuais separadamente; meios para separar o programa de gráfico em conjuntos de instruções de programa em que cada conjunto de instruções de programa não excede a contagem máxima de instrução de hardware de gráfico; meios para receber um conjunto de instruções de programa para pelo menos um componente do dispositivo de co-processamento, em que o pelo menos um componente inclui um shader procedural, e em que o conjunto de instruções de programa o pelo menos um componente a executar uma função especializada, a dita função especializada incluindo um dentre (A) inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente e (B) fornecer como saída dados do pelo menos um componente para um alvo de memória intermediária; meios para receber um segundo conjunto de instruções de programa para pelo menos um componente do dispositivo de co-processamento programar o pelo menos um componente de hardware a executar uma segunda função especializada, a dita segunda função especializada incluindo pelo menos um dentre (A) meios para reutilizar os dados de pelo menos um alvo de memória intermediária como uma entrada para o pelo menos um componente, (B) inserir dados de pelo menos um alvo de memória intermediária para o pelo menos um componente, e (C) fornecer como saida dados do pelo menos um componente para um alvo de memória intermediária; e meios armazenar e recircular os dados de múltiplos do pelo menos um dos alvos de memória intermediária para executar uma terceira função especializada, em que os dados de múltiplos do pelo menos um dos alvos de memória intermediária são reutilizados para executar a terceira função especializada diferente das primeira e segunda funções especializadas, em que a resolução de cada alvo de memória intermediária é ajustada de modo variável.
BRPI0301122A 2002-07-16 2003-04-09 métodos para proporcionar e utilizar alvos de memória intermediária em um sistema de computação, sistema de computação, dispositivo de co-processamento e sistema para utilizar alvos de memória intermediária. BRPI0301122B1 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/196,864 US7564460B2 (en) 2001-07-16 2002-07-16 Systems and methods for providing intermediate targets in a graphics system

Publications (2)

Publication Number Publication Date
BR0301122A BR0301122A (pt) 2004-08-17
BRPI0301122B1 true BRPI0301122B1 (pt) 2015-12-01

Family

ID=22727078

Family Applications (1)

Application Number Title Priority Date Filing Date
BRPI0301122A BRPI0301122B1 (pt) 2002-07-16 2003-04-09 métodos para proporcionar e utilizar alvos de memória intermediária em um sistema de computação, sistema de computação, dispositivo de co-processamento e sistema para utilizar alvos de memória intermediária.

Country Status (15)

Country Link
US (3) US7564460B2 (pt)
EP (2) EP1383080B1 (pt)
JP (2) JP4583720B2 (pt)
KR (2) KR100969448B1 (pt)
CN (1) CN100507832C (pt)
AU (1) AU2003203499B2 (pt)
BR (1) BRPI0301122B1 (pt)
CA (2) CA2772030C (pt)
MX (1) MXPA03004601A (pt)
MY (1) MY142776A (pt)
NO (2) NO328438B1 (pt)
PL (1) PL360754A1 (pt)
RU (1) RU2337402C2 (pt)
TW (2) TWI340927B (pt)
ZA (1) ZA200302809B (pt)

Families Citing this family (103)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6828975B2 (en) 2001-03-01 2004-12-07 Microsoft Corporation Method and system for managing graphics objects in a graphics display system
US7564460B2 (en) 2001-07-16 2009-07-21 Microsoft Corporation Systems and methods for providing intermediate targets in a graphics system
US6825843B2 (en) * 2002-07-18 2004-11-30 Nvidia Corporation Method and apparatus for loop and branch instructions in a programmable graphics pipeline
US6809732B2 (en) * 2002-07-18 2004-10-26 Nvidia Corporation Method and apparatus for generation of programmable shader configuration information from state-based control information and program instructions
US6975321B1 (en) * 2003-05-05 2005-12-13 Nvidia Corporation System and method for generating multiple outputs in a single shader processing pass in a hardware graphics pipeline
US7681112B1 (en) 2003-05-30 2010-03-16 Adobe Systems Incorporated Embedded reuse meta information
US8274517B2 (en) * 2003-11-14 2012-09-25 Microsoft Corporation Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques
US7248265B2 (en) 2004-04-16 2007-07-24 Apple Inc. System and method for processing graphics operations with graphics processing unit
US7231632B2 (en) 2004-04-16 2007-06-12 Apple Computer, Inc. System for reducing the number of programs necessary to render an image
US8134561B2 (en) 2004-04-16 2012-03-13 Apple Inc. System for optimizing graphics operations
US8704837B2 (en) * 2004-04-16 2014-04-22 Apple Inc. High-level program interface for graphics operations
US7636489B2 (en) 2004-04-16 2009-12-22 Apple Inc. Blur computation algorithm
US7847800B2 (en) 2004-04-16 2010-12-07 Apple Inc. System for emulating graphics operations
US7978205B1 (en) 2004-05-03 2011-07-12 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7570267B2 (en) * 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US8427490B1 (en) 2004-05-14 2013-04-23 Nvidia Corporation Validating a graphics pipeline using pre-determined schedules
US8130237B2 (en) 2004-06-24 2012-03-06 Apple Inc. Resolution independent user interface design
US7397964B2 (en) 2004-06-24 2008-07-08 Apple Inc. Gaussian blur approximation suitable for GPU
US8068103B2 (en) 2004-06-24 2011-11-29 Apple Inc. User-interface design
US7490295B2 (en) 2004-06-25 2009-02-10 Apple Inc. Layer for accessing user interface elements
US7652678B2 (en) 2004-06-25 2010-01-26 Apple Inc. Partial display updates in a windowing system using a programmable graphics processing unit
US7761800B2 (en) 2004-06-25 2010-07-20 Apple Inc. Unified interest layer for user interface
US8239749B2 (en) 2004-06-25 2012-08-07 Apple Inc. Procedurally expressing graphic objects for web pages
US8302020B2 (en) 2004-06-25 2012-10-30 Apple Inc. Widget authoring and editing environment
US8566732B2 (en) 2004-06-25 2013-10-22 Apple Inc. Synchronization of widgets and dashboards
US8453065B2 (en) 2004-06-25 2013-05-28 Apple Inc. Preview and installation of user interface elements in a display environment
US7730026B2 (en) 2004-07-01 2010-06-01 Apple Inc. Method and system using reusable state information for synchronization and maintenance of data
US8044951B1 (en) 2004-07-02 2011-10-25 Nvidia Corporation Integer-based functionality in a graphics shading language
US7958498B1 (en) 2004-07-02 2011-06-07 Nvidia Corporation Methods and systems for processing a geometry shader program developed in a high-level shading language
US7746347B1 (en) * 2004-07-02 2010-06-29 Nvidia Corporation Methods and systems for processing a geometry shader program developed in a high-level shading language
US8624906B2 (en) * 2004-09-29 2014-01-07 Nvidia Corporation Method and system for non stalling pipeline instruction fetching from memory
DE102004051567A1 (de) * 2004-10-22 2006-05-04 Siemens Ag Verfahren zur schnellen Bildverarbeitung zweidimensionaler Bilder
US8736623B1 (en) 2004-11-15 2014-05-27 Nvidia Corporation Programmable DMA engine for implementing memory transfers and video processing for a video processor
US7227551B2 (en) 2004-12-23 2007-06-05 Apple Inc. Manipulating text and graphic appearance
US8140975B2 (en) 2005-01-07 2012-03-20 Apple Inc. Slide show navigation
US8004515B1 (en) * 2005-03-15 2011-08-23 Nvidia Corporation Stereoscopic vertex shader override
US7852353B1 (en) 2005-03-31 2010-12-14 Apple Inc. Encoding a transparency (alpha) channel in a video bitstream
GB2425030A (en) * 2005-04-09 2006-10-11 Tenomichi Ltd Managed network render targets for routing graphical information
US8452090B1 (en) 2005-04-25 2013-05-28 Apple Inc. Bayer reconstruction of images using a GPU
US7289127B1 (en) 2005-04-25 2007-10-30 Apple, Inc. Multi-conic gradient generation
US8543931B2 (en) 2005-06-07 2013-09-24 Apple Inc. Preview including theme based installation of user interface elements in a display environment
US8495015B2 (en) 2005-06-21 2013-07-23 Apple Inc. Peer-to-peer syncing in a decentralized environment
US7523146B2 (en) 2005-06-21 2009-04-21 Apple Inc. Apparatus and method for peer-to-peer N-way synchronization in a decentralized environment
DE102005031642B4 (de) * 2005-07-06 2008-05-29 Siemens Ag Mobiler Defibrillator
US8793576B2 (en) 2005-10-14 2014-07-29 Apple Inc. System and method for computing a desktop picture
US9092170B1 (en) 2005-10-18 2015-07-28 Nvidia Corporation Method and system for implementing fragment operation processing across a graphics bus interconnect
US7793169B2 (en) * 2005-10-19 2010-09-07 Telefonaktiebolaget Lm Ericsson (Publ) Intelligent table-driven interleaving
US9104294B2 (en) 2005-10-27 2015-08-11 Apple Inc. Linked widgets
US7954064B2 (en) 2005-10-27 2011-05-31 Apple Inc. Multiple dashboards
US7752556B2 (en) 2005-10-27 2010-07-06 Apple Inc. Workflow widgets
US7743336B2 (en) 2005-10-27 2010-06-22 Apple Inc. Widget security
US8543824B2 (en) 2005-10-27 2013-09-24 Apple Inc. Safe distribution and use of content
US7483037B2 (en) 2005-10-27 2009-01-27 Apple, Inc. Resampling chroma video using a programmable graphics processing unit to provide improved color rendering
US7707514B2 (en) 2005-11-18 2010-04-27 Apple Inc. Management of user interface elements in a display environment
KR100696198B1 (ko) * 2005-12-23 2007-03-20 엠텍비젼 주식회사 프로그래밍 가능한 쉐이더 기반의 그래픽 연산을 지원하는임베디드 시스템
CN100395778C (zh) * 2006-03-15 2008-06-18 威盛电子股份有限公司 绘图系统以及绘图控制方法
US20070268298A1 (en) * 2006-05-22 2007-11-22 Alben Jonah M Delayed frame buffer merging with compression
TWI498850B (zh) * 2006-05-22 2015-09-01 Nvidia Corp 訊框緩衝區歸併的方法、電腦可讀取記憶體、與電腦系統
US8154554B1 (en) 2006-07-28 2012-04-10 Nvidia Corporation Unified assembly instruction set for graphics processing
US8869027B2 (en) 2006-08-04 2014-10-21 Apple Inc. Management and generation of dashboards
US7860826B2 (en) 2006-08-04 2010-12-28 Apple Inc. Method and system for using global equivalency sets to identify data during peer-to-peer synchronization
US8232991B1 (en) 2006-11-03 2012-07-31 Nvidia Corporation Z-test result reconciliation with multiple partitions
US7760767B2 (en) 2007-01-05 2010-07-20 Apple Inc. Wide area peer-to-peer synching in a decentralized environment
US7657769B2 (en) 2007-01-08 2010-02-02 Marcy M Scott N-way synchronization of data
KR101349171B1 (ko) * 2007-01-17 2014-01-09 삼성전자주식회사 3차원 그래픽 가속기 및 그것의 픽셀 분배 방법
US8954871B2 (en) 2007-07-18 2015-02-10 Apple Inc. User-centric widgets and dashboards
US8683126B2 (en) 2007-07-30 2014-03-25 Nvidia Corporation Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
US8667415B2 (en) 2007-08-06 2014-03-04 Apple Inc. Web widgets
US8698819B1 (en) 2007-08-15 2014-04-15 Nvidia Corporation Software assisted shader merging
US8411096B1 (en) 2007-08-15 2013-04-02 Nvidia Corporation Shader program instruction fetch
US9024957B1 (en) 2007-08-15 2015-05-05 Nvidia Corporation Address independent shader program loading
US8659601B1 (en) * 2007-08-15 2014-02-25 Nvidia Corporation Program sequencer for generating indeterminant length shader programs for a graphics processor
US8156467B2 (en) 2007-08-27 2012-04-10 Adobe Systems Incorporated Reusing components in a running application
US8176466B2 (en) 2007-10-01 2012-05-08 Adobe Systems Incorporated System and method for generating an application fragment
US9064333B2 (en) 2007-12-17 2015-06-23 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US8780123B2 (en) 2007-12-17 2014-07-15 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US9619304B2 (en) 2008-02-05 2017-04-11 Adobe Systems Incorporated Automatic connections between application components
US8681861B2 (en) 2008-05-01 2014-03-25 Nvidia Corporation Multistandard hardware video encoder
US8923385B2 (en) 2008-05-01 2014-12-30 Nvidia Corporation Rewind-enabled hardware encoder
US8581912B2 (en) 2008-06-27 2013-11-12 Microsoft Corporation Dynamic subroutine linkage optimizing shader performance
US8656293B1 (en) 2008-07-29 2014-02-18 Adobe Systems Incorporated Configuring mobile devices
US8489851B2 (en) 2008-12-11 2013-07-16 Nvidia Corporation Processing of read requests in a memory controller using pre-fetch mechanism
US8289341B2 (en) * 2009-06-29 2012-10-16 Intel Corporation Texture sampling
US8922555B2 (en) * 2009-10-07 2014-12-30 Nvidia Corporation Pixel shader output map
US9530189B2 (en) 2009-12-31 2016-12-27 Nvidia Corporation Alternate reduction ratios and threshold mechanisms for framebuffer compression
US8340416B2 (en) * 2010-06-25 2012-12-25 Microsoft Corporation Techniques for robust color transfer
KR101926570B1 (ko) 2011-09-14 2018-12-10 삼성전자주식회사 포스트 프레그먼트 쉐이더를 사용하는 그래픽 처리 방법 및 장치
US9591309B2 (en) 2012-12-31 2017-03-07 Nvidia Corporation Progressive lossy memory compression
US9607407B2 (en) 2012-12-31 2017-03-28 Nvidia Corporation Variable-width differential memory compression
US10043234B2 (en) 2012-12-31 2018-08-07 Nvidia Corporation System and method for frame buffer decompression and/or compression
TWI517137B (zh) 2013-06-05 2016-01-11 晨星半導體股份有限公司 將影像寫入記憶體的方法及其裝置
CN104252414B (zh) * 2013-06-25 2018-03-27 晨星半导体股份有限公司 将影像写入存储器的方法及其装置
WO2015009294A2 (en) * 2013-07-17 2015-01-22 Spinella Ip Holdings, Inc. System and method for histogram computation using a graphics processing unit
US9832388B2 (en) 2014-08-04 2017-11-28 Nvidia Corporation Deinterleaving interleaved high dynamic range image by using YUV interpolation
EP3012737A1 (en) * 2014-10-24 2016-04-27 Thomson Licensing Devices and methods for generating elementary geometries
DE112014002477T5 (de) * 2014-11-21 2016-09-29 Intel Corporation Vorrichtung und Verfahren für eine effiziente Grafikverarbeitung in einer virtuellen Ausführungsumgebung
CN105719229B (zh) * 2014-12-19 2020-03-03 谷歌有限责任公司 一种基于指令流截取的应用程序透明化的分辨率控制
US10108321B2 (en) * 2015-08-31 2018-10-23 Microsoft Technology Licensing, Llc Interface for defining user directed partial graph execution
CN105678679B (zh) * 2015-12-31 2019-02-12 公安部第三研究所 大规模图片集合快速预览的系统及方法
JP2019204348A (ja) 2018-05-24 2019-11-28 キヤノン株式会社 情報処理装置及びその制御方法、並びにプログラム
KR20200145665A (ko) * 2019-06-19 2020-12-30 삼성전자주식회사 최적화된 픽셀 셰이더 속성 관리
US20210272347A1 (en) * 2020-02-28 2021-09-02 Advanced Micro Devices, Inc. Fully utilized hardware in a multi-tenancy graphics processing unit
CN114115873A (zh) * 2021-11-18 2022-03-01 网易(杭州)网络有限公司 着色器数据处理方法、装置、设备及存储介质

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5392391A (en) * 1991-10-18 1995-02-21 Lsi Logic Corporation High performance graphics applications controller
TW219989B (en) 1992-05-29 1994-02-01 Ind Tech Res Inst A screen refreshing method which is independent of resolution
US5388206A (en) * 1992-11-13 1995-02-07 The University Of North Carolina Architecture and apparatus for image generation
US5422657A (en) 1993-09-13 1995-06-06 Industrial Technology Research Institute Graphics memory architecture for multimode display system
TW299406B (en) 1993-10-29 1997-03-01 Ind Tech Res Inst Display memory structure of multi-mode display system
US6067098A (en) * 1994-11-16 2000-05-23 Interactive Silicon, Inc. Video/graphics controller which performs pointer-based display list video refresh operation
WO1996031844A1 (fr) * 1995-04-05 1996-10-10 Hitachi, Ltd. Systeme graphique
US5793374A (en) * 1995-07-28 1998-08-11 Microsoft Corporation Specialized shaders for shading objects in computer generated images
US5793371A (en) 1995-08-04 1998-08-11 Sun Microsystems, Inc. Method and apparatus for geometric compression of three-dimensional graphics data
US6496190B1 (en) * 1997-07-02 2002-12-17 Mental Images Gmbh & Co Kg. System and method for generating and using systems of cooperating and encapsulated shaders and shader DAGs for use in a computer graphics system
US5969728A (en) * 1997-07-14 1999-10-19 Cirrus Logic, Inc. System and method of synchronizing multiple buffers for display
US6353460B1 (en) * 1997-09-30 2002-03-05 Matsushita Electric Industrial Co., Ltd. Television receiver, video signal processing device, image processing device and image processing method
US6208273B1 (en) * 1999-01-29 2001-03-27 Interactive Silicon, Inc. System and method for performing scalable embedded parallel data compression
US6421053B1 (en) * 1999-05-24 2002-07-16 International Business Machines Corporation Block rendering method for a graphics subsystem
TW444183B (en) 1999-06-28 2001-07-01 Integrated Technology Express Device and method for image rotation
JP3350655B2 (ja) 2000-01-25 2002-11-25 株式会社ナムコ ゲームシステム及び情報記憶媒体
US6819325B2 (en) * 2000-03-07 2004-11-16 Microsoft Corporation API communications for vertex and pixel shaders
US7159041B2 (en) * 2000-03-07 2007-01-02 Microsoft Corporation Method and system for defining and controlling algorithmic elements in a graphics display system
US6862730B1 (en) * 2000-04-26 2005-03-01 Lucent Technologies Inc. Register allocation in code translation between processors
US7034828B1 (en) 2000-08-23 2006-04-25 Nintendo Co., Ltd. Recirculating shade tree blender for a graphics system
US7564460B2 (en) 2001-07-16 2009-07-21 Microsoft Corporation Systems and methods for providing intermediate targets in a graphics system

Also Published As

Publication number Publication date
CA2772030C (en) 2014-09-16
CN1469240A (zh) 2004-01-21
KR20100029230A (ko) 2010-03-16
EP3156965A1 (en) 2017-04-19
MXPA03004601A (es) 2004-02-03
NO20031556D0 (no) 2003-04-07
EP1383080B1 (en) 2016-12-07
AU2003203499A1 (en) 2004-02-05
US20030020741A1 (en) 2003-01-30
AU2003203499B2 (en) 2009-07-30
US8063909B2 (en) 2011-11-22
US7564460B2 (en) 2009-07-21
NO20100178L (no) 2004-01-19
JP4922367B2 (ja) 2012-04-25
TWI361395B (en) 2012-04-01
JP4583720B2 (ja) 2010-11-17
JP2009277258A (ja) 2009-11-26
JP2004054891A (ja) 2004-02-19
EP1383080A1 (en) 2004-01-21
BR0301122A (pt) 2004-08-17
PL360754A1 (en) 2004-01-26
US20120113118A1 (en) 2012-05-10
CA2424650A1 (en) 2004-01-16
CN100507832C (zh) 2009-07-01
MY142776A (en) 2010-12-31
US8379035B2 (en) 2013-02-19
CA2424650C (en) 2013-02-19
CA2772030A1 (en) 2004-01-16
KR20040007242A (ko) 2004-01-24
NO331263B1 (no) 2011-11-14
RU2337402C2 (ru) 2008-10-27
TWI340927B (en) 2011-04-21
ZA200302809B (en) 2003-10-14
KR100969448B1 (ko) 2010-07-14
US20090256849A1 (en) 2009-10-15
NO328438B1 (no) 2010-02-22
TW200405219A (en) 2004-04-01
TW201112162A (en) 2011-04-01
KR100995157B1 (ko) 2010-11-17

Similar Documents

Publication Publication Date Title
BRPI0301122B1 (pt) métodos para proporcionar e utilizar alvos de memória intermediária em um sistema de computação, sistema de computação, dispositivo de co-processamento e sistema para utilizar alvos de memória intermediária.
US7570267B2 (en) Systems and methods for providing an enhanced graphics pipeline
US7978205B1 (en) Systems and methods for providing an enhanced graphics pipeline
US8319784B2 (en) Fast reconfiguration of graphics pipeline state
US7692660B2 (en) Guided performance optimization for graphics pipeline state management
BRPI0300983B1 (pt) método para proporcionar amostragem de textura controlável e dispositivo de co-processamento
US20050285873A1 (en) Applying multiple texture maps to objects in three-dimensional imaging processes
US7133052B1 (en) Morph map based simulated real-time rendering
US20040169671A1 (en) Effects framework pipeline integration with programmable shader
Hebert et al. MARTI—A Multiprocessor Architecture for Ray Tracing Images
US20040263526A1 (en) Line stipple pattern emulation through texture mapping
Simpson Accelerating Graphics Rendering on Risc-V GPUS

Legal Events

Date Code Title Description
B07A Application suspended after technical examination (opinion) [chapter 7.1 patent gazette]
B25A Requested transfer of rights approved

Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC (US)

Free format text: TRANSFERIDO DE: MICROSOFT CORPORATION

B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 10 (DEZ) ANOS CONTADOS A PARTIR DE 01/12/2015, OBSERVADAS AS CONDICOES LEGAIS.

B21F Lapse acc. art. 78, item iv - on non-payment of the annual fees in time

Free format text: REFERENTE A 16A ANUIDADE.

B24J Lapse because of non-payment of annual fees (definitively: art 78 iv lpi, resolution 113/2013 art. 12)

Free format text: EM VIRTUDE DA EXTINCAO PUBLICADA NA RPI 2509 DE 05-02-2019 E CONSIDERANDO AUSENCIA DE MANIFESTACAO DENTRO DOS PRAZOS LEGAIS, INFORMO QUE CABE SER MANTIDA A EXTINCAO DA PATENTE E SEUS CERTIFICADOS, CONFORME O DISPOSTO NO ARTIGO 12, DA RESOLUCAO 113/2013.