BR112019012641A2 - renderização foveada em arquiteturas em bloco - Google Patents

renderização foveada em arquiteturas em bloco Download PDF

Info

Publication number
BR112019012641A2
BR112019012641A2 BR112019012641-4A BR112019012641A BR112019012641A2 BR 112019012641 A2 BR112019012641 A2 BR 112019012641A2 BR 112019012641 A BR112019012641 A BR 112019012641A BR 112019012641 A2 BR112019012641 A2 BR 112019012641A2
Authority
BR
Brazil
Prior art keywords
resolution
block
image
image content
gpu
Prior art date
Application number
BR112019012641-4A
Other languages
English (en)
Other versions
BR112019012641A8 (pt
BR112019012641B1 (pt
Inventor
Rigel Garcia Garcia David
Franklin Ribble Maurice
Jonathon Saleh Skyler
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of BR112019012641A2 publication Critical patent/BR112019012641A2/pt
Publication of BR112019012641A8 publication Critical patent/BR112019012641A8/pt
Publication of BR112019012641B1 publication Critical patent/BR112019012641B1/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/387Composing, repositioning or otherwise geometrically modifying originals
    • H04N1/3876Recombination of partial images to recreate the original image
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/387Composing, repositioning or otherwise geometrically modifying originals
    • H04N1/393Enlarging or reducing
    • H04N1/3935Enlarging or reducing with modification of image resolution, i.e. determining the values of picture elements at new relative positions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20021Dividing image into blocks, subimages or windows
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/36Level of detail

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Computing Systems (AREA)
  • Geometry (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Engineering & Computer Science (AREA)

Abstract

a revelação descreve os exemplos para renderização de foveação. uma unidade de processamento de gráficos (gpu) pode renderizar o conteúdo da imagem para cada bloco em tamanhos diferentes como parte da passagem de renderização após uma passagem de binagem na qual a gpu determinou à quais vértices de bloco dos primitivos pertencem. a gpu pode aumentar a resolução do conteúdo da imagem renderizado com base no tamanho em que a gpu renderizou o conteúdo da imagem e exibir o conteúdo da imagem com resolução aumentada para exibição posterior.

Description

RENDERIZAÇÃO FOVEADA EM ARQUITETURAS EM BLOCO
CAMPO TÉCNICO [001] Esta revelação se refere ao processamento de gráficos. ANTECEDENTES [002] Dispositivos de computação frequentemente utilizam uma unidade de processamento de gráfico (GPU) para acelerar a renderização de dados gráficos para exibição. Esses dispositivos de computação podem incluir, por exemplo, estações de trabalho de computador, telefones móveis, como os chamados smartphones, sistemas integrados, computadores pessoais, computadores tablet e consoles de videogame. As GPUs normalmente executam um pipeline de processamento gráfico que inclui uma pluralidade de estágios de processamento que operam juntos para executar comandos de processamento gráfico. Uma unidade de processamento central (CPU) hospedeira pode controlar a operação da GPU emitindo um ou mais comandos de processamento de gráficos para a GPU. As CPUs modernas geralmente são capazes de executar simultaneamente vários aplicativos, cada um dos quais pode precisar utilizar a GPU durante a execução.
SUMÁRIO [003] Esta revelação é direcionada para renderização foveada de conteúdo gráfico. Uma unidade de processamento de gráficos (GPU) pode renderizar o conteúdo de imagem de um bloco de uma superfície de imagem para um tamanho que é selecionado com base na resolução do conteúdo da imagem nesse bloco, e não no tamanho do bloco. A GPU pode repetir isso para um ou mais blocos do quadro da
Petição 870190056518, de 18/06/2019, pág. 5/97
2/75 imagem e, em seguida, aumentar a resolução do conteúdo da imagem de um ou mais blocos para o tamanho dos blocos. Desta forma, a GPU é capaz de atingir diferentes resoluções em diferentes porções do quadro da imagem para renderização de foveação.
[004] Em um exemplo, a revelação descreve um método de renderização de foveação, o método compreendendo determinar que um primeiro bloco de uma superfície de imagem deve incluir conteúdo de imagem tendo uma primeira resolução, em que a primeira resolução é inferior a uma segunda resolução para outros blocos da superfície da imagem; renderizar o conteúdo da imagem para o primeiro bloco com um tamanho menor do que o tamanho do primeiro bloco e com base na primeira resolução do conteúdo da imagem no primeiro bloco; aumentar a resolução do conteúdo da imagem no primeiro bloco para gerar conteúdo de imagem com resolução aumentada; e produzir o conteúdo da imagem com resolução aumentada.
[005] Em um exemplo, a revelação descreve um método de renderização de foveação, o dispositivo compreendendo uma memória do sistema, e uma unidade de processamento de gráficos (GPU) compreendendo pelo menos um circuito programável ou de função fixa, em que a GPU é configurada para determinar que um primeiro bloco de uma superfície de imagem deve incluir conteúdo de imagem tendo uma primeira resolução, em que a primeira resolução é inferior a uma segunda resolução para outros blocos da superfície da imagem, renderizar o conteúdo da imagem para o primeiro bloco com um tamanho menor do que o tamanho do primeiro bloco e com base na primeira resolução do conteúdo
Petição 870190056518, de 18/06/2019, pág. 6/97
3/75 da imagem no primeiro bloco, aumentar a resolução do conteúdo da imagem no primeiro bloco para gerar conteúdo de imagem com resolução aumentada e produzir o conteúdo de imagem de resolução aumentada para armazenamento na memória do sistema.
[00 6] Em um exemplo, a revelação descreve um dispositivo para renderização de foveação, o dispositivo compreendendo meios para determinar que um primeiro bloco de uma superfície de imagem deve incluir conteúdo de imagem tendo uma primeira resolução, em que a primeira resolução é inferior a uma segunda resolução para outros blocos da superfície da imagem, meios para renderizar o conteúdo da imagem para o primeiro bloco com um tamanho menor do que o tamanho do primeiro bloco e com base na primeira resolução do conteúdo da imagem no primeiro bloco, meios para aumentar a resolução do conteúdo da imagem no primeiro bloco para gerar conteúdo de imagem com resolução aumentada, e meios para produzir o conteúdo da imagem com resolução aumentada.
[007] Em um exemplo, a revelação descreve uma midia de armazenamento legivel por computador que armazena instruções que, quando executadas, fazem com que um ou mais processadores de um dispositivo para renderização de foveação determine que um primeiro bloco de uma superfície de imagem deve incluir conteúdo de imagem tendo uma primeira resolução, em que a primeira resolução é inferior a uma segunda resolução para outros blocos da superfície da imagem, renderize o conteúdo da imagem para o primeiro bloco com um tamanho menor do que o tamanho do primeiro bloco e com base na primeira resolução do conteúdo da
Petição 870190056518, de 18/06/2019, pág. 7/97
4/75 imagem no primeiro bloco, aumente a resolução do conteúdo da imagem no primeiro bloco para gerar conteúdo de imagem com resolução aumentada e produza o conteúdo da imagem com resolução aumentada.
[008] Os detalhes de um ou mais exemplos da revelação são apresentados nos desenhos de acompanhamento e na descrição abaixo. Outras características, objetos e vantagens da revelação serão evidentes a partir da descrição e desenhos, e a partir das reivindicações.
BREVE DESCRIÇÃO DOS DESENHOS [00 9] A FIG. 1 é um diagrama de blocos que ilustra um dispositivo de computação exemplar que pode ser usado para implementar as técnicas desta revelação.
[0010] A FIG. 2 é um diagrama de blocos que ilustra uma CPU, uma GPU e uma memória do dispositivo de computação da FIG. 1 em maior detalhe.
[0011] A FIG. 3 é um diagrama de blocos que ilustra uma GPU e uma memória do dispositivo de computação da FIG. 1 em maior detalhe.
[0012] A FIG. 4 é um diagrama pictórico ilustrando um exemplo de renderização de foveação.
[0013] A FIG. 5 é um fluxograma que ilustra um exemplo de método de renderização de foveação.
DESCRIÇÃO DETALHADA [0014] A renderização foveada é uma técnica que visa reduzir a carga de trabalho de processamento de fragmentos, largura de banda e outras cargas de trabalho de renderização reduzindo a resolução média de um buffer de quadro enquanto mantém uma alta qualidade de imagem deixando o ponto focal de uma renderização em resolução
Petição 870190056518, de 18/06/2019, pág. 8/97
5/75 total. Por exemplo, na renderização foveada, diferentes partes do quadro da imagem estão em resoluções diferentes. Isso faz com que certas porções pareçam mais desfocadas do que outras porções.
[0015] A renderização foveada tem o beneficio da eficiência da carga de trabalho, sobreposição reduzida, redução de energia e melhor experiência do espectador. A geração de conteúdo de imagem de resolução mais baixa geralmente requer menos processamento do que o conteúdo de imagem de resolução mais alta e, portanto, a fusão tende a reduzir a quantidade total de processamento. Além disso, o criador do conteúdo da imagem pode desejar que o espectador se concentre em certas porções da imagem (por exemplo, primeiro plano versus plano de fundo) ou pode haver porções de menor interesse para o espectador. Ao tornar algumas porções da imagem desfocadas e outras porções nitidas, o espectador pode tender a desviar a atenção para as porções mais nitidas. Assim, a foveação pode ser uma ferramenta para guiar o espectador a visualizar certas porções da imagem.
[0016] Uma unidade de processamento gráfico (GPU) pode ser configurada para executar a renderização de foveação. Muitas arquiteturas de processamento gráfico usam um esquema de processamento de duas passagens. Na primeira passagem, referida como passagem de binagem, a GPU divide um quadro de imagem em uma pluralidade de compartimentos (também chamados de blocos). A GPU determina quais primitivos (por exemplo, triângulos) pertencem a quais blocos na passagem de binagem. Na próxima passagem, chamada de passagem de renderização, a GPU renderiza os primitivos
Petição 870190056518, de 18/06/2019, pág. 9/97
6/75 em uma base bloco a bloco (por exemplo, primitivos de renderização em uma base por compartimento).
[0017] Nos exemplos descritos nesta revelação, um aplicativo (por exemplo, um videogame) executando em uma unidade de processamento central (CPU) pode determinar resoluções de imagem das diferentes porções do quadro de imagem para renderização de foveação. Ao renderizar cada bloco, a GPU pode determinar primeiro a resolução da imagem da porção capturada por esse bloco. Em seguida, em vez de renderizar a porção da imagem desse bloco para o mesmo tamanho do bloco (por exemplo, para que a porção da imagem cubra o bloco inteiro), a GPU pode renderizar o conteúdo da imagem em um tamanho menor (por exemplo, menor que o tamanho do bloco) . Em seguida, para armazenar os dados renderizados em um buffer de quadro, a GPU pode aumentar a resolução do conteúdo da imagem renderizado. A GPU pode repetir isso para cada bloco.
[0018] Em alguns exemplos, a GPU pode aumentar a resolução do conteúdo da imagem renderizada como parte das operações de pós-processamento. As operações de pósprocessamento referem-se às operações executadas em um quadro após esse quadro ter sido gerado. Por exemplo, adicionar embaçamento ao quadro, converter o quadro em preto-e-branco e semelhantes são exemplos de operações de pós-processamento. Outro exemplo de operações de pósprocessamento é uma passagem de parada no tempo. Em uma passagem de parada no tempo, a GPU pode gerar quadros adicionais modificando o quadro recém-criado, modificando a localização de objetos no quadro. Em alguns exemplos, as operações de pós-processamento podem se aplicar a cada
Petição 870190056518, de 18/06/2019, pág. 10/97
7/75 pixel no quadro gerado, mas as operações em cada pixel não são necessárias em todos os exemplos.
[0019] Um processador de exibição, em vez da GPU, pode executar o aumento da resolução em alguns exemplos. Por exemplo, a GPU pode armazenar o conteúdo da imagem renderizado no tamanho menor (por exemplo, menor que o tamanho do bloco). O processador de exibição pode então ampliar o conteúdo da imagem do bloco como parte das operações do processador de exibição.
[0020] Como um exemplo para ajudar na compreensão de como a GPU processa o conteúdo da imagem em um tamanho menor e, em seguida, aumenta a resolução, suponha que o quadro da imagem inclua nove blocos (ou compartimentos) organizados em uma matriz 3x3 de blocos. O conteúdo da imagem dos três blocos de topo é da resolução 1/16111, em relação a uma resolução total. O conteúdo da imagem dos três blocos inferiores e os dois blocos à esquerda e à direita do bloco central têm uma resolução de 1/4 * 11 em relação a uma resolução total. O conteúdo da imagem do bloco intermediário é de resolução total.
[0021] Neste exemplo, para o conteúdo da imagem nos três primeiros blocos, a GPU pode renderizar o conteúdo da imagem no tamanho 1/16111 como aquele do bloco. Em seguida, a GPU pode aumentar a resolução do conteúdo da imagem em 16x e armazenar o conteúdo da imagem resultante no buffer de quadros. Com aumento da resolução, o conteúdo da imagem pode aparecer embaçado porque a resolução é a mesma em relação ao conteúdo de imagem de tamanho menor (por exemplo, um pixel na imagem de 1/16111 é representado por 16 pixels após o aumento da resolução) . Um filtro de
Petição 870190056518, de 18/06/2019, pág. 11/97
8/75 interpelação pode ser usado para suavizar opcionalmente dados de pixel como parte ou após o aumento da resolução. A GPU pode executar operações semelhantes com os três blocos inferiores, e aquelas à esquerda e à direita do bloco central, mas com aumento da resolução por um fator de 4. Nesse caso, após o aumento da resolução, os três blocos inferiores e os do lado esquerdo e direito do bloco central aparecerão mais nítidos do que os do topo, porque esses blocos terão quatro vezes a resolução. Para o bloco central, a GPU pode renderizar o conteúdo da imagem em resolução total, de modo que o conteúdo da imagem tenha o mesmo tamanho do bloco. A GPU pode então combinar todo o conteúdo da imagem para formar o quadro da imagem para exibição com as diferentes resoluções.
[0022] A FIG. 1 é um diagrama de blocos que ilustra um dispositivo de computação exemplar 2 que pode ser usado para implementar as técnicas desta revelação. O dispositivo de computação 2 pode compreender uma câmara, um computador (por exemplo, computador pessoal, um computador de mesa, um computador portátil, um computador tablet e/ou uma estação de trabalho), uma plataforma ou console de videojogos, um dispositivo móvel como um dispositivo de comunicação sem fios (por exemplo, um telefone móvel, um telefone celular, um telefone via satélite e/ou um aparelho de telefone móvel), um telefone fixo, um telefone via Internet, um dispositivo portátil, como um dispositivo portátil de videogame ou um assistente pessoal digital (PDA) , um reprodutor de música pessoal, um reprodutor de vídeo, um dispositivo de exibição, uma televisão, um decodificador, um receptor de broadcast, um servidor, um
Petição 870190056518, de 18/06/2019, pág. 12/97
9/75 dispositivo de rede intermediário, um computador mainframe ou qualquer outro tipo de dispositivo que processe e/ou exiba dados gráficos.
[0023] Como ilustrado no exemplo da FIG. 1, o dispositivo de computação 2 inclui uma interface de entrada do usuário 4, uma CPU 6, um controlador de memória 8, uma memória de sistema 10, uma unidade de processamento gráfico (GPU) 12, uma memória local 14 da GPU 12, um processador de exibição 16, um monitor 18 e barramento 20. A interface de entrada de usuário 4, a CPU 6, o controlador de memória 8, a GPU 12 e a interface de exibição 16 podem se comunicar entre si usando o barramento 20. O barramento 20 pode ser uma variedade de estruturas de barramento, como um barramento de terceira geração (por exemplo, um barramento de Hiper Transporte ou um barramento InfiniBand), um barramento de segunda geração (por exemplo, um barramento de Porta de Gráficos Avançada, um barramento Expresso de Interconexão de Componentes Periféricos (PCI) ou um barramento de interface extensível avançada (AXI)) ou outro tipo de interconexão de barramento ou dispositivo. Deve-se observar que a configuração especifica de barramentos e interfaces de comunicação entre os diferentes componentes mostrados na FIG. 1 é meramente exemplificativo, e outras configurações de dispositivos de computação e/ou outros sistemas de processamento gráfico com componentes iguais ou diferentes podem ser usados para implementar as técnicas desta revelação.
[0024] A CPU 6 pode compreender um processador de uso geral ou processador de propósito especial que controla a operação do dispositivo de computação 2. Um
Petição 870190056518, de 18/06/2019, pág. 13/97
10/75 usuário pode fornecer entrada para o dispositivo de computação 2 para fazer com que a CPU 6 execute um ou mais aplicativos de software. Os aplicativos de software que executam na CPU 6 podem incluir, por exemplo, um sistema operacional, um aplicativo de processador de texto, um aplicativo de e-mail, um aplicativo de planilha, um aplicativo de reprodutor de mídia, um aplicativo de edição de mídia, um aplicativo de videogame, um aplicativo de interface de usuário gráfica, um aplicativo de teleconferência ou outro programa. O usuário pode fornecer entrada para dispositivo de computação 2 através de um ou mais dispositivos de entrada (não mostrados) como um teclado, um mouse, um microfone, um elemento sensível ao toque ou outro dispositivo de entrada é acoplado ao dispositivo de computação 2 através da interface de entrada de usuário 4.
[0025] Os aplicativos de software são executados na CPU 6, que pode incluir um ou mais instruções de processamento de gráficos que instruem a CPU 6 a renderizar os dados gráficos para a tela 18. Em alguns exemplos, as instruções do software podem obedecer a uma interface de programação de aplicativo de gráficos (API), como, por exemplo, uma API de Open Graphics Library (OpenGL®), um API de Open Graphics Library Embedded Systems (OpenGL ES) , uma API de Direct3D, uma API de X3D, uma API de RenderMan, uma API de WebGL, ou qualquer outra API de gráficos padrão públicas ou de propriedade. A fim de processar as instruções de processamento de gráficos, a CPU 6 pode emitir um ou mais comandos para processamento de gráficos para a GPU 12 para fazer com que a GPU 12 realize
Petição 870190056518, de 18/06/2019, pág. 14/97
11/75 alguma ou toda a renderização dos dados gráficos. Em alguns exemplos, os dados gráficos a serem renderizados podem incluir uma lista de primitivos de gráficos, por exemplo, pontos, linhas, triângulos, quadriláteros, tiras de triângulo, etc.
[0026] O controlador de memória 8 facilita a transferência de dados que entram e saem da memória do sistema 10. Por exemplo, o controlador de memória 8 pode receber comandos de leitura e escrita de memória e prestar assistência a esses comandos em relação à memória 10 para fornecer serviços de memória para os componentes no dispositivo de computação 2. O controlador de memória 8 é acoplado de forma comunicativa à memória do sistema 10. Embora o controlador de memória 8 esteja ilustrado no dispositivo de computação do exemplo 2 da FIG. 1 como sendo um módulo de processamento separado da CPU 6 e da memória de sistema 10, em outros exemplos, algumas ou todas as funcionalidades do controlador de memória 8 podem ser implementadas em uma ou ambas as CPUs 6 e memória do sistema 10.
[0027] A memória do sistema 10 pode armazenar módulos de programa e/ou instruções que são acessíveis para execução pela CPU 6 e/ou dados para uso pelos programas executados na CPU 6. Por exemplo, a memória do sistema 10 pode armazenar aplicativos de usuário e dados gráficos associados aos aplicativos. A memória do sistema 10 pode, adicionalmente, armazenar informações para uso e/ou geradas por outros componentes do dispositivo de computação 2. Por exemplo, a memória de sistema 10 pode atuar como uma memória de dispositivo para GPU 12 e pode armazenar dados a
Petição 870190056518, de 18/06/2019, pág. 15/97
12/75 serem operados pela GPU 12, bem como dados resultantes de operações realizadas pela GPU 12. Por exemplo, a memória do sistema 10 pode armazenar qualquer combinação de buffers de textura, buffers de profundidade, buffers de estêncil, buffers de vértice, buffers de quadro ou similares. Além disso, a memória do sistema 10 pode armazenar fluxos de comandos para processamento pela GPU 12. Memória de sistema 10 pode incluir uma ou mais memórias voláteis ou não voláteis ou dispositivos de armazenamento, como, por exemplo, memória de acesso aleatório (RAM), RAM estática (SRAM), RAM dinâmica (DRAM), memória somente de leitura (ROM) , ROM apagável programável (EPROM), ROM programável apagável eletricamente (EEPROM), memória flash, rnidia de dados magnética ou mídia de armazenamento ótico.
[0028] A GPU 12 pode ser configurada para executar operações de gráficos para renderizar um ou mais primitivos gráficas para a tela 18. Assim, quando um dos aplicativos de software em execução na CPU 6 requer o processamento de gráficos, a CPU 6 pode fornecer comandos gráficos e dados gráficos para a GPU 12 para renderizar para a tela 18. Os comandos gráficos podem incluir, por exemplo, comandos de desenho como draw call, comandos de programação de estado de GPU, comandos de transferência de memória, comandos de computação de propósito geral, comandos de execução de núcleo, etc. Em alguns exemplos, a CPU 6 pode fornecer os dados de comandos e gráficos para a GPU 12, escrevendo os dados de comandos e gráficos para a memória 10, que podem ser acessados pela GPU 12. Em alguns exemplos, a GPU 12 pode ainda ser configurada para realizar computação de propósito geral para aplicações em execução
Petição 870190056518, de 18/06/2019, pág. 16/97
13/75 na CPU 6.
[0029] A GPU 12 pode, em alguns casos, ser construída com uma estrutura altamente paralela que fornece processamento mais eficiente de operações vetoriais do que a CPU 6. Por exemplo, a GPU 12 pode incluir uma pluralidade de elementos de processamento que são configurados para operar em vários vértices ou pixels em paralelo. A natureza altamente paralela da GPU 12 pode, em alguns casos, permitir que a GPU 12 desenhe imagens gráficas (por exemplo, GUIs e cenas gráficas bidimensionais (2D) e/ou tridimensionais (3D)) na tela 18 mais rapidamente do que o desenho as cenas diretamente para a tela 18 usando a CPU 6. Além disso, a natureza altamente paralela da GPU 12 pode permitir que a GPU 12 processe determinados tipos de vetor e operações de matriz para aplicativos de computação de propósito geral mais rapidamente do que a CPU 6.
[0030] A GPU 12 pode, em alguns casos, ser integrada em uma placa-mãe do dispositivo de computação 2. Em outros casos, a GPU 12 pode estar presente em uma placa gráfica que é instalada em uma porta na placa-mãe do dispositivo de computação 2 ou pode ser incorporada de outra forma dentro de um dispositivo periférico configurado para interagir com o dispositivo de computação 2. Em casos adicionais, a GPU 12 pode estar situada no mesmo microchip que a CPU 6 formando um sistema em um chip (SoC) . A GPU 12 pode incluir um ou mais processadores, como um ou mais microprocessadores, circuitos integrados de aplicação específica (ASICs), arranjos de porta programáveis em campo (FPGA), processadores de sinal digital (DSPs), ou outros circuitos integrados ou circuitos lógicos discretos
Petição 870190056518, de 18/06/2019, pág. 17/97
14/75 equivalentes .
[0031] A GPU 12 pode ser diretamente acoplada a memória local da GPU 14. Dessa forma, a GPU 12 pode ler dados de e escrever dados na memória local da GPU 14 sem necessariamente usar o barramento 20. Em outras palavras, a GPU 12 pode processar dados localmente usando armazenamento local, em vez da memória fora do chip. Isso permite que a GPU 12 opere de maneira mais eficiente, eliminando a necessidade de a GPU 12 ler e gravar dados através do barramento 20, o que pode experimentar o tráfego de barramento pesado. Em alguns casos, no entanto, a GPU 12 pode não incluir um cache separado, mas, em vez disso, pode utilizar a memória do sistema 10 através do barramento 20. A memória local da GPU 14 pode incluir uma ou mais memórias voláteis ou não voláteis ou dispositivos de armazenamento, como, por exemplo, memória de acesso aleatório (RAM) , RAM estática (SRAM), RAM dinâmica (DRAM), ROM apagável programável (EPROM), ROM programável apagável eletricamente (EEPROM), memória flash, midia de dados magnética ou midia de armazenamento ótico.
[0032] A CPU 6 e/ou a GPU 12 podem armazenar dados de imagem renderizada em um buffer de quadro que é alocado dentro da memória do sistema 10. O processador de exibição 16 pode recuperar os dados do buffer de quadros e configurar a exibição 18 para exibir a imagem representada pelos dados da imagem renderizada. Em alguns exemplos, o processador de exibição 16 pode incluir um conversor digital-analógico (DAC) configurado para converter os valores digitais recuperados do buffer de quadros em um sinal analógico consumi vel pela tela 18. Em outros
Petição 870190056518, de 18/06/2019, pág. 18/97
15/75 exemplos, o processador de exibição 16 pode passar os valores digitais diretamente para a tela 18 para processamento. A tela 18 pode incluir um monitor, uma televisão, um dispositivo de projeção, uma tela de cristal liquido (LCD), um painel de plasma, um diodo emissor de luz (LED) , uma tela de tubo de raios catódicos (CRT) , papel eletrônico, uma tela de superfície condutora emissora de elétrons (SED), uma tela de televisão a laser, uma tela de nanocristal ou outro tipo de unidade de exibição. A tela 18 pode ser integrada no dispositivo de computação 2. Por exemplo, a tela 18 pode ser uma tela de um telefone móvel ou de um computador tablet. Alternativamente, a tela 18 pode ser um dispositivo independente acoplado ao dispositivo de computação 2 através de um link de comunicação com ou sem fio. Por exemplo, a tela 18 pode ser um monitor de computador ou um monitor de tela plana conectado a um computador pessoal por meio de um cabo ou link sem fio.
[0033] Em alguns exemplos, a GPU 12 pode gerar conteúdo de imagem em diferentes resoluções de imagem, no que é referido como renderização foveada. Conforme descrito em mais detalhes, a GPU 12 pode primeiro renderizar o conteúdo da imagem com uma resolução de pixel inferior a uma resolução completa e, em seguida, aumentar a resolução do conteúdo da imagem para gerar conteúdo de imagem de resolução aumentada. A resolução da imagem do conteúdo da imagem submetida ao aumento de resolução pode ser menor que a resolução da imagem de uma porção que a GPU 12 processou na resolução total de pixels.
[0034] A resolução de pixels e resolução de
Petição 870190056518, de 18/06/2019, pág. 19/97
16/75 imagem não devem ser confundidas. A resolução de pixels refere-se a vários pixels renderizados para uma porção da superfície da imagem antes do aumento da resolução. 0 conteúdo de imagem com uma resolução de pixel mais elevada significa que existem mais valores de pixel gerados independentemente para pixels no conteúdo de imagem de resolução de pixel mais elevada do que os valores de pixel gerados independentemente para pixels no conteúdo de imagem de resolução de pixel inferior. Por exemplo, um sombreador de pixel pode ser executado em uma base por pixel para renderizar cada pixel da porção. 0 aumento da resolução pode ocorrer após o sombreador de pixel gerar valores de pixel. No aumento da resolução, os valores de pixel de um pixel com resolução aumentada são gerados com base nos valores de pixel de outro pixel.
[0035] O conteúdo da imagem submetida a aumento da resolução resultante tem uma resolução de imagem associada. A resolução da imagem é indicativa de quão nitido ou embaçado aparece o conteúdo final da imagem. No aumento da resolução, os valores de pixels para pixels não são gerados independentemente e, em vez disso, os valores finais de pixel de pixels vizinhos são usados para copiar, interpelar ou fazer a média para gerar o valor de pixel de um pixel que faz parte do conteúdo da imagem submetida ao aumento de resolução. Por exemplo, uma maneira de aumentar a amostragem por um fator de quatro é copiar os valores de pixel de um pixel três vezes e gerar valores de pixel de pixels que estão à direita, na parte inferior e na parte inferior direita de um pixel atual no conteúdo da imagem que passou pelo aumento de resolução.
Petição 870190056518, de 18/06/2019, pág. 20/97
17/75 [0036] Assim, o aumento da resolução pode aumentar o número de pixels em uma determinada área, mas a imagem pode não aparecer mais nitida ou mais clara porque nenhum novo conteúdo de imagem gerado independentemente é adicionado. Portanto, o conteúdo da imagem nesta porção com resolução aumentada pode aparecer embaçado devido ao aumento da resolução e, portanto, a resolução da imagem nessa porção com resolução aumentada pode ser menor que a resolução da imagem em outras porções. Conforme descrito, a resolução da imagem de uma porção é uma medida do detalhe que a porção da imagem contém. Se a GPU 12 adicionar pixels adicionais (por exemplo, por aumento da resolução), mas não houver nenhum aumento nos detalhes, a resolução da imagem diminuirá.
[0037] A resolução da imagem pode ser inversamente correlacionada com a quantidade de aumento da resolução. Quanto maior aumento da resolução que a GPU 12 executa menor será a resolução da imagem. Por exemplo, a resolução da imagem do conteúdo da imagem de uma porção que a GPU 12 aumentou em 16x é menor que a resolução da imagem do conteúdo da imagem de uma porção que a GPU 12 aumentou a resolução em 2x ou não precisou aumentar a resolução.
[0038] Pode haver várias razões pelas quais a GPU 12 pode gerar conteúdo de imagem em diferentes resoluções de imagem. Como um exemplo, a renderização de conteúdo de imagem em resoluções de pixel mais baixas geralmente requer menos energia do que renderizar o conteúdo da imagem em resoluções de pixels mais altas, porque há menos pixels para processar no conteúdo de imagem de resolução de pixel mais baixo. Por exemplo, a GPU 12
Petição 870190056518, de 18/06/2019, pág. 21/97
18/75 consome energia toda vez que um sombreador de pixel é executado. Para um conteúdo de imagem de resolução de pixel mais baixo, há menos execuções do sombreador de pixel, pois há menos pixels do que para um conteúdo de imagem com resolução de pixel mais alta. 0 aumento da resolução tende a exigir menos energia do que gerar valores de pixel independentes (por exemplo, porque há menos operações). A geração de valores de pixel independentes pode exigir a execução de instâncias de sombreadores de pixel que consomem muito tempo e energia, em comparação com a média ou cópia de pixels vizinhos como parte do aumento da resolução. Portanto, gerar conteúdo de imagem com uma resolução de pixel menor em relação à resolução total de pixels e aumentar a resolução para gerar conteúdo de imagem com uma resolução de imagem menor em relação a uma resolução de imagem completa consome menos energia do que gerar conteúdo de imagem na resolução total da imagem.
[0039] Como outro exemplo, a geração de conteúdo de imagem em diferentes resoluções de imagem pode ser usada para chamar a atenção do espectador para certas porções. O conteúdo da imagem em resoluções de imagem mais altas aparece mais nitido do que o conteúdo da imagem em resoluções de imagem mais baixas, e o espectador tende a focar automaticamente na porção ou porções de resolução de imagem mais altas. Fazendo com que a GPU 12 renderize o conteúdo da imagem em diferentes resoluções de pixels, que são então aumentadas para gerar conteúdo de imagem em diferentes resoluções de imagem, os provedores de conteúdo podem garantir que o espectador esteja focado em áreas especificas, que podem ser de maior interesse que outras
Petição 870190056518, de 18/06/2019, pág. 22/97
19/75 áreas, resultando em uma melhor experiência de visualização.
[0040] Portanto, em alguns casos, a GPU 12 pode executar renderização foveada para reduzir o consumo de energia devido ao processamento ou poucos pixels ao gerar conteúdo de imagem em alta resolução para porções onde o espectador deve estar focando. Pode haver razões adicionais para renderização foveada, e as técnicas exemplares não devem ser consideradas limitadas a essas razões especificas para renderização foveada.
[0041] As técnicas exemplares descrevem maneiras de executar renderização foveada, como em exemplos onde a GPU 12 executa um esquema de processamento de duas passagens para renderização de gráficos. Uma primeira passagem é referida como passagem de binagem, na qual a GPU 12 determina quais primitivos pertencem a qual compartimento (também chamado de bloco) e quais primitivos são visiveis (por exemplo, gera informações de visibilidade). Em uma segunda passagem, chamada de passagem de renderização, a GPU 12 renderiza cada bloco (por exemplo, compartimento) sequencialmente com base na determinação de quais primitivos pertencem a qual bloco e a visibilidade dos primitivos.
[0042] Essas arquiteturas de processamento de gráficos de passagem dupla (às vezes referidas como arquiteturas de binagem baseadas em fluxo) podem ser úteis por várias razões. Como um exemplo, estágios de processamento adicionais como sombreadores de domínio, sombreadores de tesselação e/ou de geometria podem ser adicionados à GPU 12, e há sobreposição eficiente de
Petição 870190056518, de 18/06/2019, pág. 23/97
20/75 binagem e renderização devido a geometria separada por tempo e processamento de rasterização (por exemplo, a GPU 12 pode renderizar uma superfície de imagem enquanto executa a binagem na próxima superfície).
[0043] Nas técnicas de exemplo descritas nesta revelação, a GPU 12 pode executar a passagem de binagem e, em seguida, durante a passagem de renderização, a GPU 12 pode renderizar conteúdo de imagem para cada um dos blocos com base na resolução de imagem do conteúdo da imagem naquele bloco. Por exemplo, a CPU 6 pode definir as resoluções de imagem para diferentes porções de uma superfície de imagem que a GPU 12 deve renderizar. Ao renderizar um bloco, a GPU 12 pode determinar a resolução da imagem do conteúdo da imagem para esse bloco com base na resolução da imagem para as diferentes porções, conforme definido pela CPU 6. A GPU 12 pode então renderizar o conteúdo da imagem que pertence a esse bloco com base na resolução da imagem do conteúdo da imagem para esse bloco.
[0044] Por exemplo, o tamanho do bloco de cada bloco pode ser NxN. Se a resolução da imagem do conteúdo da imagem em um bloco for de um quarto da resolução em relação a uma resolução total, a GPU 12 pode renderizar o conteúdo da imagem com uma resolução de pixels de N/2xN/2 no bloco NxN (por exemplo, renderizar o conteúdo da imagem com tamanho N/2xN/2 de número de pixels). Portanto, haverá um quarto do número de pixels no conteúdo da imagem renderizado pela GPU 12 em comparação com o número de pixels no bloco. A GPU 12 pode então repetir essas etapas para cada bloco (por exemplo, renderizar o conteúdo da imagem nesse bloco com base na resolução da imagem do
Petição 870190056518, de 18/06/2019, pág. 24/97
21/75 conteúdo da imagem nesse bloco).
[0045] A GPU 12 pode aumentar a resolução o conteúdo da imagem em cada bloco para o tamanho do bloco, e saida do conteúdo da imagem com resolução aumentada resultante para a memória do sistema 10. Por exemplo, a GPU 12 pode produzir o conteúdo de imagem renderizado para um bloco para a memória local 14 para armazenamento, e pode de modo similar armazenar o conteúdo da imagem para cada bloco para a memória local 14. Neste exemplo, devido às diferentes resoluções de pixel, o tamanho do conteúdo da imagem para um bloco pode ser diferente do tamanho do bloco, e o tamanho do conteúdo da imagem para os diferentes blocos pode ser diferente. Durante a gravação do conteúdo da imagem da memória local 14 para a memória do sistema 10, a GPU 12 pode aumentar a resolução do conteúdo da imagem para os blocos, para que o conteúdo da imagem com resolução aumentada seja o tamanho do bloco.
[0046] Para realizar o aumento da resolução, a GPU 12 pode copiar, interpolar ou fazer a média do valor de pixel de um ou mais pixels para pixels do conteúdo da imagem com resolução aumentada. Por exemplo, se o conteúdo da imagem for N/2xN/2, então, para aumentar a amostragem, a GPU 12 pode copiar o valor de pixel de um pixel para os três pixels vizinhos (por exemplo, os pixels à direita, inferiores e inferiores à direita), que essencialmente converte um pixel em quatro pixels. A GPU 12 pode executar alguma filtragem adicional, após o aumento da resolução, mas essa filtragem é opcional.
[0047] Em alguns exemplos, a GPU 12 pode executar o aumento da resolução como parte das operações de
Petição 870190056518, de 18/06/2019, pág. 25/97
22/75 pós-processamento, em vez de como parte da gravação do conteúdo da imagem na memória do sistema 10. Por exemplo, depois que a GPU 12 gera o conteúdo da imagem de um ou mais blocos, como parte do pós-processamento, a GPU 12 pode aplicar as operações de pós-processamento (por exemplo, embaçamento, conversão em preto e branco, parada no tempo etc.) e como parte das operações de pós-processamento, a GPU 12 pode aumentar a resolução do conteúdo da imagem de um ou mais blocos. Como outro exemplo, a GPU 12 pode gerar o conteúdo da imagem para cada bloco, e depois de gerar o conteúdo da imagem para cada bloco do quadro, a GPU 12 pode ser ampliada como parte das operações de pós-processamento. Em alguns exemplos, a GPU 12 pode armazenar o conteúdo da imagem sem submeter a aumento da resolução, e o processador de exibição 16 pode fazer uma amostragem como parte da escrita para a tela 18.
[0048] A GPU 12 pode determinar gue um conjunto de blocos de uma superfície de imagem deve incluir conteúdo de imagem com uma resolução de imagem inferior a uma resolução de imagem para outro conteúdo de imagem da superfície da imagem (por exemplo, menos que uma resolução total). A GPU 12 pode renderizar o conteúdo da imagem para o conjunto de blocos em um tamanho que é menor do que o tamanho de cada um dos blocos e com base na resolução da imagem do conteúdo da imagem no conjunto de blocos. Por exemplo, a GPU 12 pode determinar que a resolução da imagem para um primeiro bloco é 1/16 da resolução total e renderizar conteúdo de imagem para o primeiro bloco com uma resolução de pixels de N/4xN/4 (por exemplo, tamanho de N/4xN/4), onde NxN é o tamanho do bloco e, portanto,
Petição 870190056518, de 18/06/2019, pág. 26/97
23/75
N/4xN/4 é menor que NxN. A GPU 12 pode aumentar a resolução do conteúdo da imagem no conjunto de blocos para gerar um conteúdo de imagem com resolução aumentada com o mesmo tamanho que o tamanho de cada um dos blocos e, como exemplo, produzir o conteúdo da imagem com resolução aumentada à memória do sistema 10, como um exemplo.
[0049] Pode haver várias maneiras em que a GPU 12 determina a resolução da imagem de diferentes porções da superfície da imagem. Como um exemplo, a CPU 6 pode definir as resoluções de pixel para cada porção, porque quando as porções são ampliadas, a resolução da imagem resultante será a resolução da imagem para essas porções. Neste exemplo, as resoluções de pixel e as resoluções de imagem podem ser as mesmas (por exemplo, ter uma resolução de pixel de N/2xN/2 para um bloco é efetivamente o mesmo que definir a resolução de imagem como um quarto da resolução da imagem) . Como outro exemplo, a CPU 6 pode definir as resoluções de imagem para as porções da superfície da imagem. A CPU 6 pode definir uma forma (por exemplo, retângulo, triângulo, oval ou algum outro poligono) e suas coordenadas, e pode definir a resolução da imagem para a porção em termos absolutos (por exemplo, número de pixels que devem ser renderizados para essa porção antes do aumento da resolução) ou termos relativos (por exemplo, algum fator de uma resolução de imagem completa) . Como exemplo, a CPU 6 pode definir bandas de resoluções (por exemplo, bandas com diferentes níveis de foveação). Para o centro da superfície da imagem, a CPU 6 pode definir um circulo sem foveação (por exemplo, resolução total da imagem), para uma banda circular (por exemplo, anel) ao
Petição 870190056518, de 18/06/2019, pág. 27/97
24/75 redor do círculo, a CPU 6 pode definir um quarto da resolução e assim por diante, como uma forma de definir diferentes resoluções (por exemplo, quantidade de foveação) para diferentes porções da superfície da imagem.
[0050] A CPU 6 pode produzir informações sobre a forma e localização da porção com a resolução da imagem específica. A GPU 12 pode determinar a resolução da imagem para o conteúdo da imagem em um bloco, com base nas informações da forma e localização das diferentes porções da superfície da imagem e a localização do bloco na superfície da imagem.
[0051] Em alguns casos, em vez de a CPU 6 definir o tamanho e a forma de uma porção de imagem e uma resolução de imagem específica para essa porção, a GPU 12 pode ser configurada para definir o tamanho e a forma de uma porção de imagem e sua resolução de imagem. Por exemplo, a GPU 12 pode ser configurada para definir um círculo com um raio R no centro da superfície da imagem como tendo uma primeira resolução de imagem, um anel com largura W0 em torno do círculo como tendo uma segunda resolução de imagem, uma largura de anel W1 o anel com largura W0 como tendo uma terceira resolução de imagem e assim por diante. Outras formas possíveis de definir a resolução da imagem são possíveis e as técnicas de exemplo não devem ser consideradas limitadas a esses exemplos.
[0052] O tamanho e/ou a forma de uma porção da imagem tendo uma resolução de imagem específica podem não ser os mesmos que o tamanho e/ou a forma de um bloco. Por exemplo, suponha que a CPU 6 defina uma porção da imagem como um oval que cabe parcialmente em um bloco. Neste
Petição 870190056518, de 18/06/2019, pág. 28/97
25/75 exemplo, a CPU 6 pode definir a porção da imagem oval dentro do bloco como tendo uma primeira resolução que é menor do que uma segunda resolução para a porção de imagem restante dentro do bloco.
[0053] Em um ou mais exemplos, a GPU 12 pode renderizar o conteúdo da imagem de modo que o conteúdo da imagem em um bloco tenha a mesma resolução de imagem (por exemplo, todo o conteúdo da imagem em um bloco tem a mesma resolução de imagem) . Embora a CPU 6 possa ter definido duas resoluções diferentes para o conteúdo da imagem no mesmo bloco (por exemplo, primeira resolução e segunda resolução) , a GPU 12 pode renderizar o conteúdo da imagem de modo que a resolução do pixel do conteúdo da imagem nesse bloco seja uniforme. Assim, neste exemplo, a GPU 12 pode determinar se o bloco deve ser renderizado na primeira resolução, na segunda resolução ou em outra resolução que seja uniforme para o bloco.
[0054] Nos casos em que a porção da imagem com uma resolução de imagem especifica não abrange o bloco inteiro, a GPU 12 pode utilizar vários fatores para determinar a resolução na qual renderizar o conteúdo da imagem desse bloco. Como um exemplo, a GPU 12 pode determinar a porção do conteúdo da imagem que engloba a maioria ou a pluralidade do bloco, determinar a resolução da imagem para essa porção e renderizar o conteúdo da imagem do bloco em uma resolução de pixels de modo que quando o conteúdo da imagem é com resolução aumentada a resolução da imagem do conteúdo da imagem é igual à resolução da imagem determinada. Como outro exemplo, a GPU 12 pode determinar a porção do conteúdo da imagem no bloco
Petição 870190056518, de 18/06/2019, pág. 29/97
26/75 tendo a resolução mais alta, determinar a resolução da imagem para essa porção e renderizar o conteúdo da imagem do bloco em uma resolução de pixels de modo que quando o conteúdo da imagem é com resolução aumentada a resolução da imagem do conteúdo da imagem é igual à resolução da imagem determinada. Como outro exemplo, a GPU 12 pode determinar uma média ou média ponderada (ex., porções maiores são ponderadas de modo mais pesado) das diferentes resoluções de imagem das diferentes porções da imagem dentro do bloco para determinar uma resolução de imagem média, e renderizar o conteúdo da imagem do bloco em uma resolução de pixels de modo que quando o conteúdo da imagem é com resolução aumentada a resolução da imagem do conteúdo da imagem é igual à resolução da imagem média determinada. Pode haver outras maneiras em que a GPU 12 determina a resolução da imagem para um bloco, e as técnicas não devem ser consideradas limitadas aos exemplos acima.
[0055] Em um ou mais dos exemplos acima, as resoluções da imagem para certas porções da imagem podem ser diferentes da resolução da imagem definida pela CPU 6. Por exemplo, no exemplo acima, para um bloco havia um conteúdo de imagem com uma primeira resolução de imagem (por exemplo, oval de conteúdo de imagem) que é menor que o conteúdo de imagem com uma segunda resolução de imagem (por exemplo, as porções restantes do bloco). Se a GPU 12 ou CPU 6 determinar que o conteúdo da imagem para a placa deve ter uma resolução de imagem igual à segunda resolução da imagem, embora a CPU 6 tenha definido a oval do conteúdo da imagem como tendo a primeira resolução de imagem, a resolução real da imagem gerada para o oval do conteúdo da
Petição 870190056518, de 18/06/2019, pág. 30/97
27/75 imagem pode ser igual à segunda resolução da imagem. Por outro lado, se a GPU 12 ou CPU 6 determinar que o conteúdo da imagem para a placa deve ter uma resolução de imagem igual à primeira resolução da imagem, embora a CPU 6 tenha definido as outras porções do bloco excluindo o oval do conteúdo da imagem como tendo a segunda resolução de imagem, a resolução real da imagem gerada para as porções do bloco excluindo o oval do conteúdo da imagem pode ser igual à primeira resolução da imagem.
[0056] Para gerar conteúdo de imagem com uma resolução de imagem especifica, a GPU 12 pode primeiro renderizar o conteúdo da imagem com uma resolução de pixel mais baixa e, em seguida, ampliar o conteúdo da imagem (ou o processador de exibição 16 pode realizar o aumento da resolução). Uma maneira de renderizar o conteúdo da imagem em uma resolução de pixel menor é renderizar o conteúdo da imagem em um tamanho menor que o tamanho do bloco. Um exemplo de como a GPU 12 renderiza o conteúdo da imagem em um tamanho menor que o tamanho de um bloco é definir a janela de visão para a qual a GPU 12 deve renderizar para ser do tamanho menor. Por exemplo, se a GPU 12 é renderizada para um tamanho N/2xN/2, onde NxN é o tamanho do bloco, então a GPU 12 pode definir a janela de visão como (x, y) para ( (x + N/2) ) , (y + N/2)), em que x é a coordenada x para o canto superior esquerdo do bloco e y é a coordenada y para o canto superior esquerdo do bloco. Em alguns exemplos, a CPU 6 pode definir a janela de visão, em vez da GPU 12. Como outro exemplo, um aplicativo em execução na CPU 6 pode definir a janela de visão sem qualquer alteração no tamanho (por exemplo, definir a
Petição 870190056518, de 18/06/2019, pág. 31/97
28/75 janela de visão como o tamanho do bloco), e um controlador de gráficos em execução na CPU 6 ou um controlador da GPU 12 pode em seguida, modificar o comando que define a janela de visão para redimensionar a janela de visão para o menor tamanho. Outras técnicas possíveis para fazer com que a GPU 12 renderize o conteúdo da imagem para um tamanho menor que o tamanho do bloco são possíveis, e as técnicas não devem ser consideradas limitadas aos exemplos acima.
[0057] Por conseguinte, as técnicas exemplares fornecem uma maneira para GPU 12 renderizar conteúdo de imagem foveado de modo que diferentes porções de uma superfície da imagem estão em diferentes resoluções de imagem. Por exemplo, em vez de renderizar o conteúdo da imagem para encaixar em um bloco (por exemplo, ser do mesmo tamanho de um bloco) , a GPU 12 pode renderizar o conteúdo de imagem do bloco para um tamanho menor que o bloco, onde o tamanho para o qual a GPU 12 renderiza baseia-se na resolução da imagem do conteúdo da imagem nesse bloco e no tamanho do bloco. Se o tamanho do bloco for NxN e a resolução da imagem for metade da resolução total, a GPU 12 poderá renderizar o conteúdo da imagem para esse bloco em (NxN) (1/2) (ou seja, N/2xN ou NxN/2). Neste exemplo, a resolução de pixel é NxN/2 ou N/2xN. Novamente, a resolução de pixels define o número de pixels que são renderizados em uma determinada área e a resolução da imagem define a quantidade de detalhes no conteúdo da imagem. A GPU 12 pode aumentar a resolução do conteúdo da imagem renderizado para o tamanho menor, de modo que o conteúdo da imagem com resolução aumentada resultante seja do mesmo tamanho que o do bloco. A GPU 12 pode repetir essas operações para cada
Petição 870190056518, de 18/06/2019, pág. 32/97
29/75 um dos blocos.
[0058] Em alguns exemplos, o aumento da resolução não adiciona qualquer novo conteúdo de imagem adicional à superfície da imagem, mas é feito copiando, interpelando ou calculando a média dos valores de pixel com base nos valores de pixel dos pixels vizinhos. A quantidade de aumento da resolução necessária pode ser diretamente correlacionada com o quão embaçada ou nítida a porção aparece. Por exemplo, uma porção do conteúdo da imagem que tem a resolução aumentada 16x aparecerá mais desfocada do que uma porção do conteúdo da imagem que tem a resolução aumentada 4x. Ao renderizar o conteúdo de imagem de um bloco para um tamanho menor que o tamanho do bloco e, em seguida, aumentar a resolução do tamanho do bloco, o resultado será um conteúdo de imagem com diferentes resoluções de imagem em diferentes porções da superfície da imagem.
[0059] A FIG. 2 é um diagrama de blocos que ilustra a CPU 6, GPU 12 e memória 10 do dispositivo de computação 2 da FIG. 1 em maior detalhe. Conforme mostrado na FIG. 2, a CPU 6 é acoplada de forma comunicativa à GPU 12 e à memória 10, e a GPU 12 é acoplada de forma comunicativa à CPU 6 e à memória 10. A GPU 12 pode, em alguns exemplos, ser integrada sobre uma placa-mãe com a CPU 6. Em exemplos adicionais, a GPU 12 pode ser implementada em uma placa gráfica que é instalada em uma porta de uma placa-mãe que inclua a CPU 6. Em outros exemplos, a GPU 12 pode ser incorporada em um dispositivo periférico configurado para interoperar com a CPU 6. Em exemplos adicionais, a GPU 12 pode estar situada no mesmo
Petição 870190056518, de 18/06/2019, pág. 33/97
30/75 microchip que a CPU 6 formando um sistema em um chip (SoC). A CPU 6 é configurada para executar o aplicativo 22, uma API de gráficos 30, um controlador de GPU 32 e um sistema operacional 34.
[0060] A GPU 12 inclui um controlador 36, núcleo sombreador 38, uma ou mais unidades de função fixa 40, e circuito de aumento de resolução 42. Para facilidade, a memória local 14 é também ilustrada como sendo uma parte da GPU 12, mas também pode ser externa. Embora ilustrados como componentes separados, em alguns exemplos, o circuito de aumento de resolução 42 pode fazer parte de unidades de função fixa 40. O circuito de aumento de resolução 42 pode aumentar a resolução do conteúdo da imagem armazenado na memória local 14 para um bloco e produzir o conteúdo de imagem com resolução aumentada para a memória 10.
[0061] Além disso, em alguns exemplos, o circuito de aumento da resolução 42 pode ser parte do processador de exibição 16. Para facilitar a descrição, o circuito de aumento da resolução 42 é ilustrado como parte da GPU 12. Nos exemplos em que o circuito de aumento da resolução 42 faz parte do processador de exibição 16, o circuito de aumento da resolução 42 pode operar de uma maneira descrita abaixo.
[0062] O aplicativo de software 22 pode incluir pelo menos algumas de uma ou mais instruções que fazem com que o conteúdo gráfico seja exibido ou uma ou mais instruções que fazem com que uma tarefa não gráfica (por exemplo, uma tarefa de computação de propósito geral) seja executada na GPU 12. O aplicação de software 22 pode emitir instruções para a API de gráficos 30. A API de
Petição 870190056518, de 18/06/2019, pág. 34/97
31/75 gráficos 30 pode ser um serviço de tempo de funcionamento que traduz as instruções recebidas do aplicativo de software 22 em um formato que é consumivel pelo controlador da GPU 32. Em alguns exemplos, a API de gráficos 30 e o controlador da GPU 32 podem fazer parte do mesmo serviço de software.
[0063] O controlador da GPU 32 recebe as instruções do aplicativo de software 22, através da API de gráficos 30, e controla a operação da GPU 12 para atender às instruções. Por exemplo, o controlador da GPU 32 pode formular um ou mais fluxos de comandos, colocar os fluxos de comando na memória 10 e instruir a GPU 12 a executar fluxos de comandos. O controlador da GPU 32 pode colocar os fluxos de comando na memória 10 e se comunicar com a GPU 12 através do sistema operacional 34 (por exemplo, através de uma ou mais chamadas de sistema).
[0064] O controlador 36 é configurado para recuperar os comandos armazenados nos fluxos de comando e despachar os comandos para execução no núcleo do sombreador 38 e uma ou mais unidades de função fixa 40. O controlador 3 6 pode despachar comandos de um fluxo de comando para execução em uma ou mais unidades de função fixa 40 ou um subconjunto de núcleo de sombreador 38 e uma ou mais unidades de função fixa 40. O controlador 36 pode ser um hardware da GPU 12, pode ser um software ou firmware em execução na GPU 12, ou uma combinação de ambos.
[0065] O núcleo de sombreador 38 inclui circuitos programáveis (por exemplo, núcleos de processamento nos quais o software é executado). Uma ou mais unidades de função fixa 40 incluem circuitos de função
Petição 870190056518, de 18/06/2019, pág. 35/97
32/75 fixa configurados para executar operações limitadas com flexibilidade funcional minima. 0 núcleo de sombreador 38 e uma ou mais unidades de função fixa 40 formam, em conjunto, uma tubulação de gráficos configurada para executar o processamento de gráficos.
[0066] O núcleo do sombreador 38 pode ser configurado para executar um ou mais programas de sombreamento que são baixados na GPU 12 a partir da CPU 6. Um programa de sombreador, em alguns exemplos, pode ser uma versão compilada de um programa escrito em uma linguagem de sombreamento de alto nivel (por exemplo, uma linguagem de sombreamento OpenGL (GLSL), uma Linguagem de Sombreamento de Alto Nivel (HLSL), uma linguagem de sombreamento C para gráficos (Cg ), etc.) . Em alguns exemplos, o núcleo de sombreador 38 pode incluir uma pluralidade de unidades de processamento que são configuradas para operar em paralelo (por exemplo, um pipeline SIMD). O núcleo de sombreador 38 pode ter uma memória de programa que armazena instruções de programa de sombreador e um registro de estado de execução (por exemplo, um registro de contador de programa) que indica a instrução corrente na memória de programa sendo executada ou a próxima instrução a ser buscada. Exemplos de programas de sombreamento que executam no núcleo de sombreador 38 incluem, por exemplo, sombreadores de vértice, sombreadores de pixel (também conhecidos como sombreadores de fragmento), sombreadores de geometria, sombreadores de casco, sombreadores de dominio, sombreadores de computação e/ou sombreadores unificados.
[00 67] As unidades de função fixa 40 podem incluir hardware que é cabeado para executar determinadas
Petição 870190056518, de 18/06/2019, pág. 36/97
33/75 funções. Embora o hardware de função fixa possa ser configurável, por meio de um ou mais sinais de controle, por exemplo, para executar diferentes funções, o hardware de função fixa normalmente não inclui uma memória de programa que seja capaz de receber programas compilados pelo usuário. Em alguns exemplos, uma ou mais unidades de função fixa 40 podem incluir, por exemplo, unidades de processamento que realizam operações de rastreamento (por exemplo, teste de profundidade, teste de tesoura, mistura alfa, etc.).
[00 68] O controlador da GPU 32 da CPU 6 pode ser configurado para gravar os fluxos de comando na memória 10, e o controlador 36 da GPU 12 pode ser configurado para ler um ou mais comandos de fluxos de comando da memória 10. Em alguns exemplos, um ou ambos os fluxos de comando podem ser armazenados como um buffer de anel na memória 10. Um buffer de anel pode ser um buffer com um esquema de endereçamento circular em que a CPU 6 e a GPU 12 mantêm variáveis de estado sincronizadas associadas à gravação de dados e leitura de dados do buffer de anel. Por exemplo, se o primeiro fluxo de comando for um buffer de anel, cada CPU 6 e GPU 12 pode armazenar um ponteiro de gravação indicando o próximo endereço a ser gravado no buffer de anel e um ponteiro de leitura indicando o próximo endereço a ser lido no buffer de anel.
[0069] Quando a CPU 6 grava um novo comando no buffer de anel, a CPU 6 pode atualizar o ponteiro de escrita na CPU 6 e instruir a GPU 12 a atualizar o ponteiro de escrita na GPU 12. De modo similar, quando a CPU 12 lê um novo comando do buffer de anel, a GPU 12 pode atualizar
Petição 870190056518, de 18/06/2019, pág. 37/97
34/75 o ponteiro de leitura na GPU 12 e instruir a CPU 12 a atualizar o ponteiro de leitura na CPU 6. Outros mecanismos de sincronização são possíveis. Quando os ponteiros de leitura e/ou gravação atingem um endereço mais alto no intervalo de endereços alocados para o buffer de anel, os ponteiros de leitura e/ou de gravação podem ser agrupados no endereço mais baixo para implementar um esquema de endereçamento circular.
[0070] Exemplo de operação de um controlador de GPU exemplar 32 e um controlador de GPU exemplar 3 6 serão agora descritos em relação à FIG. 2. O controlador de GPU 32 recebe uma ou mais instruções da aplicativo de software 22 que especificam operações gráficas e/ou operações de computação de propósito geral a serem executadas pela GPU 12. O controlador da GPU 32 coloca o fluxo de comando de saida na memória 10, que é acessível pelo controlador de GPU 36. O controlador de GPU 32 notifica o controlador de GPU 36 de que o fluxo de comando correspondente à aplicação de software 22 está disponível para processamento. Por exemplo, o controlador da GPU 32 pode gravar em um registro da GPU (por exemplo, um registro de hardware da GPU verificado pela GPU 12 e/ou um registro mapeado na memória da GPU verificado pela GPU 12) um ou mais valores indicando que o fluxo de comando está pronto para execução.
[0071] Após a notificação de que o fluxo de comando está pronto para execução, o controlador 36 da GPU 12 pode determinar se os recursos estão atualmente disponíveis na GPU 12 para começar a executar o fluxo de comando. Se os recursos estiverem disponíveis, o
Petição 870190056518, de 18/06/2019, pág. 38/97
35/75 controlador 36 começará a distribuir os comandos no fluxo de comandos.
[0072] Como parte do processamento de gráficos, a CPU 6 pode descarregar certas tarefas de processamento de gráficos para a GPU 12. Por exemplo, o aplicativo 22 pode gerar dados de atributos para atributos de uma pluralidade de vértices de primitivos que se interconectam para formar um objeto gráfico. O aplicativo 22 pode armazenar os dados do atributo em um buffer de vértice na memória 10. O controlador de GPU 32 pode instruir o controlador 36 a recuperar os dados de atributo para os atributos dos vértices para processamento, para gerar dados gráficos para exibição.
[0073] Nos exemplos descritos nesta revelação, o aplicativo 22 gera informações de resolução de imagem que o controlador da GPU 32 deve transmitir à GPU 12. As informações de resolução de imagem definem a resolução de imagem para diferentes porções da superfície de imagem que a GPU 12 deve gerar.
[0074] Como exemplo, o aplicativo 22 pode definir bandas de resoluções de imagem. Para conteúdo de imagem em uma banda especifica, a GPU 12 pode renderizar o conteúdo da imagem com base na banda à qual o conteúdo da imagem pertence. Por exemplo, a GPU 12 pode determinar uma banda à qual os vértices de uma primitiva pertencem e renderizar a primitiva com base na resolução da imagem para a banda à qual os vértices da primitiva pertencem. Para porções de interesse elevado, o aplicativo 22 pode definir uma resolução de imagem relativamente alta e, para porções de interesse baixo, o aplicativo 22 pode definir uma
Petição 870190056518, de 18/06/2019, pág. 39/97
36/75 resolução de imagem relativamente baixa.
[0075] Como outro exemplo, o aplicativo 22 pode definir a resolução da imagem para cada um dos vértices como parte dos dados do atributo armazenados no buffer de vértice. Neste exemplo, para vértices de primitivos que estão localizados em porções com áreas de interesse mais altas (por exemplo, onde o espectador deve estar visualizando), o aplicativo 22 pode definir essas áreas como tendo resolução de imagem relativamente alta e outras porções com áreas de interesse menores como tendo resolução de imagem relativamente baixa.
[0076] A definição da resolução da imagem pode ser uma razão em relação a uma resolução de imagem completa. Por exemplo, a definição da resolução da imagem pode ser 1/4 da resolução, 1/16 da resolução, etc. A definição da resolução da imagem como uma razão (por exemplo, 1/4, 1/16, etc.) pode ser sinônima com a definição de uma resolução de pixels como uma razão.
[0077] Por exemplo, a resolução total de pixels refere-se ao número de pixels na tela 18. Se a tela 18 tiver 2048 pixels de largura e 1536 pixels de largura, e a GPU 12 renderizar uma superfície de imagem com 2048 pixels por 1536 pixels, a superfície da imagem estará com resolução total de pixels. Se, no entanto, a GPU 12 renderizar a superfície da imagem com 128 pixels por 96 pixels, a GPU 12 renderiza a superfície da imagem com uma resolução de 1/256 pixels (por exemplo, 2048/16x1536/16). Se a GPU 12, em seguida, aumentar a resolução da superfície da imagem com a resolução de 1/256 pixels por um fator de 256x, então a imagem com resolução aumentada resultante
Petição 870190056518, de 18/06/2019, pág. 40/97
37/75 incluirá 2048x1536 pixels, mas a resolução da imagem será 1/256 a resolução da imagem completa. Como comparação, a superfície da imagem com a resolução de 1/256 pixels que é aumentada de tamanho parecerá mais desfocada do que a superfície da imagem com a resolução total de pixels. Isso ocorre porque há menos detalhes no conteúdo da imagem com resolução aumentada, pois o aumento da resolução gera valores de pixel para pixels com base nos valores de pixel já existentes, em vez de gerar novos valores de pixel independentes.
[0078] Embora a descrição acima da resolução da imagem e a resolução do pixel seja descrita com relação à superfície da imagem completa, o mesmo conceito se aplica a uma porção da superfície da imagem. Por exemplo, se o conteúdo da imagem deve ser renderizado em um bloco NxN e as informações de resolução da imagem do aplicativo 22 indicarem que a resolução da imagem para o conteúdo da imagem no bloco NxN é de resolução de um quarto, renderizando assim o conteúdo da imagem para um tamanho N/2xN/2 e, em seguida, o aumento da resolução por um fator de quatro resulta no conteúdo da imagem para esse bloco com resolução de quarto de imagem.
[0079] Em exemplos onde o aplicativo 22 define a resolução da imagem em uma base de vértice, o aplicativo 22 pode definir a resolução da imagem para cada primitiva como dados de atributos adicionais para vértices daquela primitiva. Como existe uma pluralidade de primitivas na superfície da imagem, haverá uma pluralidade de porções da imagem com diferentes resoluções de imagem. Por exemplo, o aplicativo 22 pode definir que um primeiro grupo de
Petição 870190056518, de 18/06/2019, pág. 41/97
38/75 primitivos deve estar em uma primeira resolução de imagem, um segundo grupo de primitivos deve estar em uma segunda resolução de imagem, e assim por diante, incluindo um grupo de primitivos que devem estar em uma resolução de imagem completa.
[0080] Cada um dos grupos de primitivos com as diferentes resoluções de imagem pode formar formatos respectivos (por exemplo, ovais). Por conseguinte, o aplicativo 22 em alguns exemplos pode definir resoluções de imagem diferentes para diferentes porções da superfície da imagem, em que cada porção é de um formato poligonal específico (por exemplo, oval, retângulo, etc.). Pode haver várias outras maneiras para o aplicativo 22 definir as porções de imagem tendo as diferentes resoluções de imagem (por exemplo, incluindo bandas de resoluções de imagem) , e o uso de atributos de vértice de vértices para a informação de resolução de imagem é um exemplo.
[0081] Como descrito acima, a GPU 12 pode ser configurada para gerar conteúdo de imagem em duas passagens: passagem de binagem e passagem de renderização. Na passagem de binagem, o controlador 32 e/ou o controlador 36 da GPU podem definir um tamanho de um bloco (também referido como um compartimento) , em que cada bloco é de tamanho NxN (por exemplo, número de pixels NxN). Os blocos não precisam ser quadrados ou todas serem do mesmo tamanho. Para facilitar a descrição, o seguinte é descrito em relação aos blocos quadrados com o mesmo tamanho.
[0082] O controlador 36 pode então fazer com que o núcleo de sombreador 38 e unidades de função fixa 40 executem operações respectivas para determinar quais
Petição 870190056518, de 18/06/2019, pág. 42/97
39/75 primitivas pertencem a qual bloco e quais vértices são visíveis. Na passagem de renderização, o controlador 36 pode fazer com que o núcleo de sombreamento 38 e unidades de função fixa 40 executem operações respectivas por bloco para renderizar o conteúdo da imagem em uma base bloco a bloco. A GPU 12 armazena o conteúdo da imagem resultante na memória 10 para recuperação e exibição.
[0083] Parte do processamento gráfico inclui o processamento de vértices que é geralmente realizado pela GPU 12 executando um sombreador de vértice no núcleo do sombreador 38. Por exemplo, o sombreador de vértice pode executar conversão de coordenadas, iluminação, sombreamento e outros processos nos dados de atributo dos atributos de cada vértice. O aplicativo 22 pode ser ligada a um sombreador de vértice, e o aplicativo 22 pode emitir o comando através do controlador de GPU 32 que instrui o controlador 36 a recuperar código de objeto para um sombreador de vértice para execução no núcleo de sombreador 38 .
[0084] A GPU 12 pode executar o sombreador de vértice como parte da passagem de binagem. O sombreador de vértice pode receber coordenadas de vértice para as primitivas, conforme definido pelo aplicativo 22, e gerar coordenadas de vértice para primitivas que fazem parte da área de visualização. Um circuito de binagem, que pode fazer parte de unidades de função fixa 40, pode determinar a quais blocos cada uma das primitivas pertence. Por exemplo, o circuito de binagem pode receber informação indicativa do tamanho da tela 18 (por exemplo, número de pixels na horizontal da tela 18 por número de pixels na
Petição 870190056518, de 18/06/2019, pág. 43/97
40/75 vertical da tela 18) . Com base no tamanho da tela 18, o circuito de binagem pode converter as coordenadas fornecidas pelo sombreador de vértice em coordenadas na tela 18. O tamanho da tela 18 pode ser armazenado na memória local 14 ou na memória 10.
[0085] Além disso, o circuito de compartimentação pode dividir a superfície da imagem em uma pluralidade de blocos. A superfície da imagem pode ser do tamanho da tela 18. O controlador de GPU 32 pode definir o número de blocos que o circuito de compartimentação divide a superfície da imagem. Com base no número de blocos e no tamanho da tela 18, o circuito de compartimentação pode determinar o tamanho de cada bloco e a posição de cada bloco na superfície da imagem. Por exemplo, se o tamanho da tela 18 é de 100 pixels por 100 pixels, e o controlador de GPU 32 define que a superfície da imagem deve ser dividida em 100 blocos, então o circuito de compartimentação pode
determinar que existem 100, 10 pixels por 10 blocos de
pixels s dispostos contiguamente.
[0086] Com base no tamanho de cada bloco, a
posição de cada bloco na superfície da imagem, e as
coordenadas dos vértices na tela 18 , O circuito de
compartimentação pode determinar quais vértices pertencem a qual bloco. Por exemplo, mantendo o exemplo de 100, 10 pixels por 10 blocos de pixels, se o circuito de compartimentação determinar que as coordenadas x e y para um vértice são 25 e 35, respectivamente, então o circuito de compartimentação pode determinar que este vértice está localizado no lado (2, 3) (ou seja, segundo bloco direito e terceiro bloco inferior). Neste exemplo, 25/10 indica que o
Petição 870190056518, de 18/06/2019, pág. 44/97
41/75 bloco está localizado no segundo bloco da direita e 35/10 indica que o bloco está localizado no terceiro bloco a partir do topo.
[0087] Em alguns exemplos, dois vértices emitidos pelo sombreador de vértice podem estar localizados na mesma coordenada x, y, mas em uma coordenada z diferente. A coordenada z indica a profundidade. Um circuito de teste de profundidade pode receber informações de coordenadas do circuito de compartimentação cujos vértices pertencem a quais blocos. Para vértices tendo a mesma coordenada x, y, o circuito de teste de profundidade pode determinar qual vértice é ocluido por qual vértice baseado nas respectivas coordenadas z. Se um vértice ou primitivo for ocluido, esse vértice ou primitivo pode ser descartado do processamento adicional. Por exemplo, o circuito de teste de profundidade pode não fornecer dados de atributos para vértices ou primitivos que estão ocluidos na memória 10. A ordem de operação do circuito de compartimentação e do circuito de teste de profundidade é fornecida como exemplo e a ordem de operação pode ser invertida. O circuito de teste de profundidade pode primeiro determinar se os vértices ou primitivos estão ocluidos e remover esses vértices do processamento posterior, e o circuito de compartimentação pode então determinar a quais vértices de blocos pertencem.
[0088] Em ambos os exemplos (por exemplo, compartimentação e, em seguida, teste de profundidade ou teste de profundidade e, em seguida, compartimentação), o resultado pode ser uma informação indicando a quais blocos as primitivos pertencem. Além disso, os vértices restantes
Petição 870190056518, de 18/06/2019, pág. 45/97
42/75 (por exemplo, aqueles não descartados) podem ser vértices que contribuem para a superfície da imagem final. Essas operações podem concluir a passagem de binagem. Assim, no final da passagem de binagem, há informações de visibilidade de quais vértices pertencem a quais blocos (por exemplo, quais vértices que contribuem para o conteúdo na superfície da imagem pertencem a quais blocos).
[0089] A GPU 12 pode armazenar as informações de quais vértices pertencem a qual bloco na memória 10, possivelmente como dados de atributos adicionais. Por exemplo, cada bloco pode estar associado a uma posição em um valor digital (por exemplo, o primeiro bloco é associado ao último bit no valor digital, o segundo bloco é associado ao segundo ao último bit no valor digital e assim por diante). Para cada vértice, o circuito de compartimentação pode determinar um valor digital que indica o bloco ao qual esse vértice pertence. Um digital para o bit, que está associado a um bloco particular, no valor digital de um vértice significa que o respectivo vértice pertence àquele bloco. Por exemplo, suponha nove blocos, o que significa que, para cada vértice que pertence ao primeiro bloco, o circuito de compartimentação pode armazenar o seguinte valor digital como dados de atributos adicionais para esse vértice: 000000001. Neste exemplo, o primeiro bloco é associado ao último bit no valor digital e, portanto, esse bit é digital (por exemplo, binário) e o restante é um zero digital para os vértices que pertencem ao primeiro bloco. Se o vértice pertencer ao terceiro bloco, o circuito de compartimentação pode armazenar o seguinte valor digital como dados de atributos adicionais para esse vértice:
Petição 870190056518, de 18/06/2019, pág. 46/97
43/75
000000100 (por exemplo, o terceiro a partir do último bit digital é digital, porque o terceiro a partir do último bit digital é associado ao terceiro bloco).
[0090] Em seguida para a passagem de renderização, a GPU 12 pode renderizar as primitivas formadas pelos vértices em cada um dos blocos. A GPU 12 pode realizar essa renderização em uma base lado a lado. Por exemplo, a GPU 12 pode renderizar o conteúdo da imagem do primeiro bloco, depois o segundo bloco e assim por diante. Na conclusão da escrita do conteúdo da imagem do primeiro bloco, a GPU 12 pode armazenar o conteúdo da imagem na memória local 14 e repetir estas operações até que não haja mais blocos a serem renderizados. Conforme descrito em mais detalhe, o circuito de aumento da resolução 42 aumenta a resolução do conteúdo da imagem em um ou mais dos blocos como parte da saída do conteúdo da imagem para a memória 10. Em alguns outros exemplos, a GPU 12 pode aumentar a resolução e produzir o conteúdo da imagem para a memória 10 após a renderização de cada bloco, em vez da renderização de todos os blocos.
[0091] Para renderizar o conteúdo da imagem, a GPU 12 determina os valores de pixel (por exemplo, cor e opacidade) para cada um dos pixels em cada um dos blocos. Uma maneira pela qual a GPU 12 renderiza os pixels em cada um dos blocos é definindo a área dentro do bloco na qual o conteúdo da imagem deve ser renderizado. Se a GPU 12 renderizar o conteúdo da imagem em cada um dos blocos ao tamanho do bloco, a GPU 12 poderá renderizar o conteúdo da imagem para uma resolução de pixels totais.
[0092] No entanto, de acordo com as técnicas
Petição 870190056518, de 18/06/2019, pág. 47/97
44/75 descritas nesta revelação, em vez de renderizar o conteúdo de imagem de um bloco ao tamanho do bloco, a GPU 12 pode renderizar o conteúdo da imagem para um tamanho menor do que o bloco. 0 tamanho para o qual a GPU 12 renderiza o conteúdo da imagem de um bloco pode ser baseado na resolução da imagem dos vértices no bloco.
[0093] Como descrito acima, o aplicativo 22 pode definir as bandas de resolução. Na conclusão das operações do sombreador de vértice, a GPU 12 pode determinar a quais vértices de banda no bloco pertencem. As bandas de resolução às quais os vértices pertencem podem definir a resolução da imagem para o conteúdo da imagem naquele bloco.
[0094] Em alguns exemplos, o aplicativo 22 pode definir a resolução da imagem para os vértices. Durante as operações realizadas pelo sombreador de vértice, o sombreador de vértice pode manter a definição da resolução da imagem dos vértices atribuídos aos vértices. Então, durante a renderização, para todos os pixels que pertencem à primitiva definida por seus vértices, a GPU 12 pode renderizar essas primitivas para um tamanho proporcional ao tamanho do bloco com base na resolução de imagem definida.
[0095] Por exemplo, se a maioria ou a pluralidade de vértices dentro de um primeiro bloco cair na banda com resolução de quarto de imagem ou forem definidos como tendo resolução de quarto de imagem, e o tamanho do bloco for NxN, então GPU 12 pode renderizar o conteúdo da imagem do primeiro bloco para um tamanho que é o quarto do tamanho do bloco (por exemplo, N/2xN/2). Neste exemplo, o
Petição 870190056518, de 18/06/2019, pág. 48/97
45/75 tamanho no qual a GPU 12 renderiza o conteúdo da imagem do primeiro bloco é N/2xN/2, que é proporcional ao tamanho do bloco (por exemplo, proporcional ao NxN) e com base na resolução de imagem definida (por exemplo, quarto de resolução). Neste exemplo, a GPU 12 pode multiplicar o tamanho do bloco pela razão da resolução da imagem (por exemplo, NxN multiplicado por quarto é N/2xN/2).
[00 96] Um exemplo de como GPU 12 pode renderizar o conteúdo da imagem do primeiro bloco para N/2xN/2 é com base em uma janela e visão definida. Por exemplo, como parte da renderização do conteúdo da imagem, a GPU 12 recebe um comando que define a janela de visão na qual a GPU 12 deve renderizar o conteúdo da imagem. Para resolução total de pixel/imagem, o comando da janela de visão (por exemplo, um comando de janela de visão gl do OpenGL) pode definir a janela de visão para a qual o GPU 12 renderiza o conteúdo da imagem como o tamanho do bloco (por exemplo, NxN) . No entanto, para um tamanho menor que o tamanho do bloco com base na resolução da imagem, o comando da janela e visão pode definir a janela e visão como N/2xN/2.
[0097] Em alguns exemplos, como o aplicativo 22 pode não ser configurado para determinar a qual bloco várias primitivas serão renderizadas, o aplicativo 22 pode não ser configurado para emitir o comando de janela e visão que define a janela e visão desse bloco para um tamanho menor que esse bloco. Portanto, o aplicativo 22 pode emitir o comando de janela de visão sem instruir a GPU 12 a renderizar o conteúdo da imagem para um tamanho menor.
[0098] O controlador de GPU 32 pode capturar o
Petição 870190056518, de 18/06/2019, pág. 49/97
46/75 comando de janela de visão emitido pelo aplicativo 22 e modificar o comando de janela de visão para definir a janela de visão para um tamanho menor que é proporcional ao tamanho do bloco e à resolução de imagem definida. Por exemplo, como descrito acima, o controlador de GPU 32 pode ser encarregado de gerar os comandos que o aplicativo 22 emite para o GPU 12 que o GPU 12 executa. 0 aplicativo 22 pode definir o comando janela de visão e o controlador GPU 32 pode receber o comando janela de visão e modificar o comando de janela de visão para definir a janela de visão como a janela de visão real para a qual a GPU 12 renderizará o conteúdo da imagem (por exemplo, modificar a janela de visão de NxN para N/2xN/2).
[0099] Com base na janela de visão definida para um bloco, a GPU 12 pode renderizar o conteúdo da imagem desse bloco para a área definida pela janela de visão desse bloco. Por exemplo, a GPU 12 pode rasterizar as primitivas e definir os pixels nas primitivas com base no tamanho da janela de visão definida. Para cada pixel dentro da primitiva, a GPU 12 pode executar um sombreador de pixel que determina os valores de pixel para os respectivos pixels. O sombreador de pixel pode gerar os valores de pixel resultantes para pixels dentro da janela de visão para a memória local 14.
[00100] A GPU 12 pode repetir essas operações para cada um dos blocos. Por conseguinte, a memória local 14 pode armazenar o conteúdo da imagem para cada bloco. No entanto, o tamanho do conteúdo da imagem para qualquer bloco não precisa necessariamente ser do mesmo tamanho que o bloco e pode ser menor que o tamanho do bloco. Por
Petição 870190056518, de 18/06/2019, pág. 50/97
47/75 exemplo, se a resolução da imagem para o primeiro bloco for quarto (por exemplo, como o aplicativo 22 define a faixa de resolução de imagem que está no primeiro bloco como resolução de quarto de imagem), o tamanho do conteúdo da imagem pode ser um quarto do tamanho do primeiro bloco. Se a resolução da imagem para o segundo bloco for um décimo sexto, então o tamanho do conteúdo da imagem para o bloco pode ser um décimo sexto do tamanho do segundo bloco e assim por diante. Isso pode concluir a passagem de renderização.
[00101] Para alguns blocos, pode ser possível que a GPU 12 tenha renderizado o conteúdo da imagem para o tamanho desses blocos. O aplicativo 22 pode ter definido alguns vértices para ter resolução de imagem completa, porque esses vértices são para primitivos onde o observador deveria estar focando. Portanto, a GPU 12 pode renderizar alguns blocos para resolução total de pixels (por exemplo, para um tamanho igual ao tamanho do bloco), pois o conteúdo da imagem nesses blocos deve ter resolução total da imagem e pode renderizar alguns blocos para menos de resolução total de pixels (por exemplo, para um tamanho menor que o tamanho do bloco) porque o conteúdo da imagem nesses blocos deve ter resolução de imagem menor que a do tamanho total (por exemplo, metade, um quarto, um oitavo, um sexto e décimo sexto da resolução de imagem e assim por diante).
[00102] O circuito de aumento da resolução 42 pode ser configurado para produzir o conteúdo de imagem respectivo de cada um dos blocos para a memória 10. No entanto, como parte da saída do conteúdo da imagem para cada bloco, o circuito de aumento da resolução 42 pode
Petição 870190056518, de 18/06/2019, pág. 51/97
48/75 fazer um aumento da resolução do conteúdo da imagem para um ou mais blocos. Por exemplo, se a GPU 12 renderizou o conteúdo da imagem para uma resolução de primeiro bloco para um quarto de pixel, o circuito de aumento da resolução 42 pode ler valores de pixel para um primeiro pixel no conteúdo de imagem renderizada da memória local 14 e armazenar os valores de pixel para o primeiro pixel um quatro de vezes para representar os valores de pixel para um quatro de pixels na superfície da imagem. Então o circuito de aumento da resolução 42 pode ler valores de pixel para um segundo pixel no conteúdo da imagem renderizada da memória local 14, e armazenar os valores de pixel para o segundo pixel um quatro de vezes para representar os valores de pixel para os próximos quatro pixels na superfície da imagem, e assim adiante.
[00103] Deste modo, o circuito de aumento da resolução 42 pode fazer um aumento da resolução do conteúdo da imagem em um bloco para gerar conteúdo de imagem com aumento da resolução. O circuito de aumento da resolução 42 pode fazer um aumento da resolução do conteúdo da imagem com base no tamanho do conteúdo da imagem renderizada para o bloco e no tamanho do bloco. O circuito de aumento da resolução 42 pode produzir o conteúdo de imagem com aumento da resolução para a memória 10 para armazenamento, e para o processador de exibição 16 para recuperar e exibir na tela 18 .
[00104] No exemplo acima, circuito de aumento da resolução 42 aumenta a resolução como parte da saída do conteúdo da imagem para a memória 10. No entanto, em alguns exemplos, o circuito de aumento da resolução 42 pode fazer
Petição 870190056518, de 18/06/2019, pág. 52/97
49/75 um aumento da resolução do conteúdo da imagem de um bloco, armazenar o conteúdo de imagem sob amostragem na memória local 14 e, em seguida, enviar o conteúdo da imagem sob alta resolução para a memória 10. Além disso, em alguns exemplos, o circuito de aumento da resolução 42 pode não esperar até que o conteúdo da imagem para todos os blocos seja renderizado antes de fazer o aumento da resolução e sairem para a memória 10. Nestes exemplos, depois da GPU 12 renderizar o conteúdo da imagem de um primeiro bloco, o circuito de aumento da resolução 42 pode fazer aumento da resolução e produzir o conteúdo da imagem submetida a aumento da resolução para o primeiro bloco antes da renderização da GPU 12 ou em paralelo com a GPU 12 renderizando o conteúdo da imagem para um segundo bloco.
[00105] A FIG. 3 é um diagrama de blocos que ilustra uma GPU e uma memória do dispositivo de computação da FIG. 1 ainda em maior detalhe. Para realizar operações gráficas, a GPU 12 pode implementar um pipeline de processamento gráfico. O pipeline de processamento gráfico inclui funções executadas conforme definidas pelo software ou firmware executado na GPU 12 e desempenhando funções por unidades de função fixa que são hardware fixo configurado para executar funções muito especificas. O software ou firmware em execução na GPU 12 pode ser chamado de sombreadores e os sombreadores podem ser executados em um ou mais núcleos de sombreadores da GPU 12. Os sombreadores fornecem aos usuários flexibilidade funcional porque o usuário pode projetar os sombreadores para realizar as tarefas desejadas de qualquer maneira concebível. As unidades de função fixa, no entanto, são conectadas à
Petição 870190056518, de 18/06/2019, pág. 53/97
50/75 maneira pela qual as unidades de função fixa executam tarefas. Consequentemente, as unidades de função fixa podem não fornecer muita flexibilidade funcional.
[00106] Neste exemplo, a GPU 12 pode incluir um ou mais do controlador 36, circuito montador de entrada 44, circuito de passagem de binagem 48 e circuito de passagem de renderização 58. O circuito de passagem de binagem 48 inclui o sombreador de vértice 50, que é ilustrado em linhas tracejadas para indicar que o sombreador de vértice 50 executa no núcleo de sombreador 38 (FIG. 2) da GPU 12. Por exemplo, os circuitos de passagem de binagem 48 incluem o núcleo de sombreador 38 no qual o sombreador de vértice 50 é executado. O circuito de passagem de binagem 48 também inclui o circuito de armazenamento 52 e o circuito de teste de profundidade 54. Os circuitos de passagem de renderização 58 incluem o circuito rasterizador 60 e o sombreador de pixel 64, que é ilustrado em linhas tracejadas para indicar que o sombreador de pixel 64 é executado no núcleo de sombreador 38. No exemplo ilustrado, a memória local 14 é ilustrada como interna à GPU 12, mas pode ser externa à GPU 12. A GPU 12 também inclui o circuito de aumento da resolução 42, que faz o aumento da resolução e saidas do conteúdo da imagem de cada um dos blocos.
[00107] O núcleo do sombreador 38 pode executar outros tipos de sombreadores, como um sombreador de casco e um sombreador de dominio que seguem o estágio do sombreador de vértice nessa ordem e são usados para bloco. Os circuitos de tesselação também podem ser incluídos em uma ou mais unidades de função fixa 40 para executar a
Petição 870190056518, de 18/06/2019, pág. 54/97
51/75 tesselação. 0 núcleo de sombreador 38 também pode executar um sombreador de geometria que recebe a saída do sombreador de domínio, se o sombreador de casco 38 executar o sombreador de domínio ou a saída de um sombreador de vértice, se nenhum sombreador de domínio for executado. 0 circuito de rasterização 60 pode receber dados gráficos gerados pelo sombreador de vértice 50 ou a partir do sombreador de geometria (quando disponível) ou do sombreador de domínio (quando disponível).
[00108] Outras configurações da pipeline gráfica são possíveis, e as técnicas descritas nesta revelação não devem ser consideradas limitadas ao exemplo específico ilustrado na FIG. 3. Por exemplo, a GPU 12 pode incluir mais estágios do que os ilustrados, e em alguns exemplos, a GPU 12 pode não incluir necessariamente todos os estágios ilustrados. Além disso, a ordenação específica das etapas é fornecida para fins de ilustração e não deve ser considerada como limitativa.
[00109] A FIG. 3 também ilustra os vários buffers na memória 10 usados para armazenar dados gráficos intermediários à medida que os dados gráficos são gerados através da pipeline gráfica da GPU 12. Como ilustrado, a memória 10 inclui o buffer de vértice 46, o buffer de fluxo 56, o buffer de pixels 62 e o buffer de quadros 66. Esses buffers podem fazer parte do mesmo buffer maior ou podem ser buffers separados.
[00110] O aplicativo 22 pode fazer com que a CPU 6 (por exemplo, através do controlador da GPU 32) produza dados de vértice (por exemplo, dados de atributos) de vértices para o buffer de vértices 46. Em alguns
Petição 870190056518, de 18/06/2019, pág. 55/97
52/75 exemplos, os dados de atributo para os vértices podem incluir informações de resolução de imagem que indicam a resolução de imagem relativa das primitivas formadas pelos vértices. Por exemplo, para primitivas que são para partes de imagem em que o espectador deve se concentrar, o aplicativo 22 pode definir um nivel relativamente alto de resolução de imagem, incluindo resolução total. Para primitivas que são para partes de imagem em que o espectador não deve focar, o aplicativo 22 pode definir um nivel mais baixo de resolução de imagem (por exemplo, resolução de um quarto, resolução de um oitavo e assim por diante). Em alguns exemplos, o aplicativo 22 pode progressivamente definir porções de imagem com menos e menos resolução de imagem. Por exemplo, para porções de imagem imediatamente porções de imagem vizinhas com resolução total, o aplicativo 22 pode definir uma resolução de metade, para porções de imagem próximas das porções de imagem imediatamente vizinhas, o aplicativo 22 pode definir uma resolução de um quarto e assim por diante.
[00111] Pode haver outras maneiras de definir a resolução da imagem, como bandas de resoluções. Além disso, o aplicativo 22 não precisa ser a única maneira na qual a resolução da imagem é definida. Além de ou em vez do aplicativo 22, algum outro componente (por exemplo, o controlador da GPU 32 ou o controlador 36) pode definir a resolução da imagem.
[00112] O circuito montador de entrada 44 pode ler pontos de vértice de vértices a partir da memória de sistema 10, conforme definido pela CPU 6, e montar os pontos de controle para formar os vértices. Por exemplo, o
Petição 870190056518, de 18/06/2019, pág. 56/97
53/75 circuito montador de entrada 44 pode ler as coordenadas, valores de cor e outras informações desse tipo. As coordenadas, valores de cor e outras informações podem ser comumente chamadas de atributos dos vértices. Com base nos atributos dos vértices, o circuito montador de entrada 44 pode determinar o layout geral das primitivas. 0 circuito montador de entrada 44 pode ser uma unidade de função fixa.
[00113] O sombreador de vértice 50 pode receber os dados do atributo para os atributos dos vértices. O sombreador de vértice 50 pode realizar operações por vértice, como transformações, esfola, metamorfose e iluminação por vértice. Por exemplo, o aplicativo 22 pode definir as coordenadas para os vértices das primitivas que formam objetos diferentes nas chamadas coordenadas locais. As coordenadas locais são coordenadas tridimensionais (x, y, z) e definem as coordenadas no espaço local (por exemplo, em relação ao próprio objeto onde o centro do objeto está na coordenada (0, 0, 0) como um exemplo). O sombreador de vértice 50 converte as coordenadas locais para o espaço mundial através de uma matriz modelo, em que o espaço mundial inclui todos os objetos no espaço que são abrangidos pela superfície da imagem. A matriz modelo, às vezes chamada de matriz de transformação, traduz, dimensiona e/ou gira o objeto para o local em que o objeto pertence ao espaço maior do mundo. A matriz modelo pode ser definida pelo desenvolvedor do aplicativo 22.
[00114] O sombreador de vértice 50 pode multiplicar as coordenadas mundiais dos vértices com uma matriz de visão que gira a cena de modo que os objetos
Petição 870190056518, de 18/06/2019, pág. 57/97
54/75 sejam orientados para o ponto de vista do espectador. Com base no ponto de vista do observador, alguns objetos podem aparecer na frente de outros em um ponto de vista, e inverter no outro ponto de vista, e a matriz de vista orienta os objetos corretamente com base no ponto de vista do espectador. Por exemplo, um primeiro objeto parece estar na frente de um segundo objeto se o espectador estiver visualizando os objetos de um primeiro ponto de vista, mas do ponto de vista oposto, o segundo objeto aparecería na frente do primeiro objeto. A matriz de visão pode ser definida pelo desenvolvedor do aplicativo 22.
[00115] O sombreador de vértice 50 pode prender as coordenadas do espaço de exibição a um espaço de clipe por meio de uma matriz de projeção. A matriz de projeção especifica uma faixa de coordenadas que o sombreador de vértice se transforma em uma faixa de coordenadas de dispositivo (DCs) normalizadas (por exemplo, -1,0 a 1,0). O sombreador de vértice 50 recorta todas as coordenadas fora dessa faixa, porque essas primitivas não são visíveis. Se apenas uma parte de uma primitiva estiver dentro da faixa, o sombreador de vértice 50 pode prender a parte da primitiva fora da faixa e gerar primitivas que cabem dentro da faixa.
[00116] Matematicamente, sombreador de vértice 50 pode executar a seguinte operação para gerar as coordenadas de clipe:
Vclipe = Mprojeção * Mvista * Mmodelo * Vlocal, onde Mprojeção, Mvista e Mmodelo referem-se às matrizes de projeção, visão e modelo, respectivamente, e Vlocal refere-se às coordenadas locais.
Petição 870190056518, de 18/06/2019, pág. 58/97
55/75 [00117] O circuito de compartimentação 52 recebe a saida do sombreador de vértice 50 (por exemplo, vértices em coordenadas de clipe) e determina a qual bloco (por exemplo, bin) pertence um vértice. Por exemplo, a saida do sombreador de vértice 50 pode ser um par de coordenadas x e y na perspectiva do espectador e um valor de profundidade (por exemplo, a coordenada z) . O circuito de compartimentação 52 pode utilizar as coordenadas x e y para determinar a que bloco esse vértice pertence, bem como gerar guaisquer dados gráficos adicionais necessários para a renderização por circuitos de passagem de renderização 58. O circuito de compartimentação 52 pode ser uma unidade de função fixa de uma ou mais unidades de função fixa 40.
[00118] Como um exemplo, o circuito de compartimentação 52 pode determinar a qual bloco cada vértice pertence para uma superfície de imagem de resolução de pixel completa. O controlador da GPU 32 pode definir uma janela de visão, onde o tamanho da janela de visão é o tamanho da tela 18 (por exemplo, 1920 pixels por 1080 pixels) . O controlador de GPU 32 pode ser pré-programado com o tamanho da tela 18 durante a fabricação, ou o sistema operacional 34 pode fornecer o tamanho da tela 18 ao controlador de GPU 32. O controlador de GPU 32 também pode fornecer informação indicando o número de blocos, ou o número de blocos podem ser predefinidos e armazenados na memória local 14 ou registos da GPU 12. Em qualquer dos casos, o circuito de compartimentação 52 pode receber o tamanho da janela e visão e o número de blocos e determinar quais os pixels na janela e visão que pertencem a quais blocos. Em alguns exemplos, o circuito de compartimentação
Petição 870190056518, de 18/06/2019, pág. 59/97
56/75 pode receber informação indicando o tamanho de cada blocos e o número de blocos. Em tais exemplos, o circuito de compartimentação 52 não precisa necessariamente receber a janela de visão.
[00119] O sombreador de vértice 50 pode fornecer as coordenadas x e y para os pixels da perspectiva do visualizador normalizada para variar entre -1,0 e 1,0. O circuito de compartimentação 52 pode utilizar coordenadas x e y e o tamanho e número de blocos para determinar a qual bloco pertence cada um dos vértices. Como exemplo, suponha que haja 10x10 blocos, cada um com tamanho de 10x10 pixels. Neste exemplo, se um vértice tem coordenadas DC x e y de 0,6 e -0,4 respectivamente, o circuito de compartimentação 52 pode determinar que a localização deste vértice está em (80, 20) porque cada etapa de 0,1 no NDC 5 pixels neste exemplo. Como cada bloco tem 10 pixels por 10 pixels, um vértice com coordenadas x e y de 80 e 20, respectivamente, estaria no oitavo bloco da esquerda e no segundo bloco a partir do topo. O circuito de compartimentação 52 pode repetir tais operações para identificar a quais blocos cada um dos vértices pertence.
[00120] Como descrito acima, um exemplo de como o circuito de compartimentação 52 pode identificar a qual bloco pertence um vértice é baseado em um valor digital, onde cada bit no valor digital corresponde a um bloco. Para vértices que pertencem a um bloco particular, o circuito de compartimentação 52 pode ajustar o bit correspondente àquele bloco para um digital nos valores digitais para os vértices, e manter todos os outros em um zero digital. Pode haver outras maneiras de identificar a qual bloco um
Petição 870190056518, de 18/06/2019, pág. 60/97
57/75 vértice pertence.
[00121] O circuito de teste de profundidade 54 pode comparar as coordenadas z dos vértices processados pelo sombreador de vértice 50 para determinar se um vértice é visível ou não visível. O circuito de teste de profundidade 54 pode emitir os atributos processados dos vértices que são visíveis para o buffer de fluxo 56. Por exemplo, se um vértice está na frente de outro vértice, então o circuito de teste de profundidade 54 pode determinar que o vértice atrás não é visível e pode não produzir qualquer um dos dados do atributo para o vértice para o buffer de fluxo 56. Desta maneira, os circuitos de passagem de binagem 48 podem gerar um fluxo de visibilidade de informação que inclui informação indicando a qual bloco cada vértice pertence.
[00122] A ordem de operações dos circuitos de passagem de binagem 48 não precisa necessariamente ser definida. Por exemplo, o circuito de teste de profundidade 54 pode primeiro determinar se o vértice está ocluído ou não antes do circuito de compartimentação 52, determinando a que bloco o vértice pertence. Além disso, como descrito acima, em alguns exemplos, o aplicativo 22 pode ter definido a resolução da imagem para os vértices. Consequentemente, para os vértices que são visíveis, cujos dados de atributo são armazenados no buffer de fluxo 56, o buffer de fluxo 56 pode armazenar também as informações de resolução de imagem para esses vértices.
[00123] Para exemplos, onde o aplicativo 22 definiu as resoluções de imagem em bandas, o circuito de compartimentação 52 pode opcionalmente determinar a qual
Petição 870190056518, de 18/06/2019, pág. 61/97
58/75 banda de resolução um vértice pertence, comparando as coordenadas x e y dos vértices e as bandas de resolução. 0 circuito de compartimentação 52 pode armazenar como dados de atributo no buffer de fluxo 56 a informação de resolução de imagem para os vértices. No entanto, o circuito de compartimentação 52 que determina a qual banda de resolução um vértice pertence não é necessário, e outro componente pode determinar a qual banda de resolução um vértice pertence.
[00124] O circuito de rasterização 60 recebe os dados de atributos para vértices de primitivas do buffer de fluxo 56 e converte as primitivas em pixels para exibição. Por exemplo, as primitivas podem ser definidas como vetores que indicam a interconexão das primitivas, e podem ser definidas em um espaço de coordenadas que é independente da tela 18 na qual a imagem deve ser exibida. O circuito de rasterização 60 converte estes vectores nas coordenadas da tela e executa quaisquer funções adicionais, tais como a remoção de pontos dentro de primitivas que estão oclusas. O circuito de rasterização 60 pode ser uma unidade de função fixa de uma ou mais unidades de função fixa 40 e envia valores para o buffer de pixels 62.
[00125] Nos exemplos descritos nesta revelação, ao converter vetores nas coordenadas da tela, o circuito de rasterização 60 pode ser responsável pelas resoluções da imagem. Como um exemplo, o aplicativo 22 pode produzir um comando de janela de visão que define a área dentro da qual o circuito de rasterização 60 é para determinar as coordenadas de exibição. Nos exemplos em que a resolução da imagem não é levada em conta, o comando janela de visão
Petição 870190056518, de 18/06/2019, pág. 62/97
59/75 pode definir o tamanho dentro do qual o circuito de rasterização 60 é para determinar as coordenadas da tela para ser o tamanho de um bloco (por exemplo, NxN) . Por exemplo, para o primeiro bloco, o comando janela de visão definiria o tamanho como (0, 0, N, N) (por exemplo, começar de 0, 0 e terminar em N, N) , para o segundo bloco, o comando janela de visão defina o tamanho como (N, 0, N + N, N) e assim por diante.
[00126] No entanto, nos exemplos descritos
nesta revelação, em vez de definir o tamanho da janela e
visão para ser o tamanho do bloco, o tamanho da porta de
visão pode ser menor que o tamanho do bloco e com base na
resolução da imagem. Por exemplo, o controlador da GPU 32 pode modificar o comando da janela de visão definido pelo aplicativo 22.
[00127] Para todos os vértices que pertencem ao primeiro bloco, que é informação disponível no buffer de fluxo 56 como o valor digital descrito acima, o controlador de GPU 32 pode determinar a quais bandas de resolução os vértices pertencem e se existe uma pluralidade ou maioria de resoluções de imagem. Por exemplo, suponha que há cinco vértices no primeiro bloco. Para cada vértice, o controlador da GPU 32 pode determinar a resolução da imagem definida pelo aplicativo 22. O controlador da GPU 32 pode determinar se há uma resolução de imagem específica que seja a maior ou a resolução de imagem mais provável. Com base na maior ou mais provável resolução de imagem, o controlador da GPU 32 pode determinar a resolução da imagem para o primeiro bloco. Em alguns exemplos, em vez de usar uma resolução de imagem maior ou mais provável, o
Petição 870190056518, de 18/06/2019, pág. 63/97
60/75 controlador de GPU 32 pode determinar uma média ou média ponderada das resoluções de imagem para determinar a resolução da imagem para o primeiro bloco.
[00128] Além disso, nos exemplos em que os dados de atributo definem as resoluções de imagem para os vértices, o controlador 32 da GPU pode ler os dados do atributo para determinar a resolução da imagem para o bloco. Por exemplo, semelhante ao acima, o controlador de GPU 32 pode determinar se há uma resolução de imagem maior ou mais provável e atribuir essa resolução de imagem para o bloco inteiro, ou alguma média ou média ponderada como a resolução de imagem para o primeiro bloco.
[00129] O controlador da GPU 32 pode definir a janela de visão (por exemplo, modificando a janela de visão como definida pelo aplicativo 22) com base na resolução da imagem determinada e no tamanho do primeiro bloco. Por exemplo, se a resolução determinada for de um quarto de resolução, o controlador da GPU 32 poderá determinar o tamanho da janela de visão como N/2xN/2. Neste exemplo, o controlador de GPU 32 determinou uma razão entre a resolução do conteúdo da imagem no primeiro bloco e a resolução total (por exemplo, resolução de um quarto) e multiplicou a razão com o tamanho do primeiro bloco para determinar um tamanho da telar ( por exemplo, o quarto multiplicado por NxN é N/2xN/2).
[00130] No exemplo acima, o controlador da GPU 32 determinou uma resolução para o conteúdo da imagem do primeiro bloco. No entanto, a resolução da imagem para alguns dos vértices que estão no primeiro bloco pode ser diferente da resolução de imagem determinada pelo
Petição 870190056518, de 18/06/2019, pág. 64/97
61/75 controlador da GPU 32. Por exemplo, se os vértices de uma primitiva no primeiro bloco forem definidos para uma resolução de imagem de um quarto (por exemplo, com base na faixa de resolução à qual a primitiva pertencia) , mas com base na resolução da maior da imagem, o controlador 32 poderá determinar que a resolução da imagem para o primeiro bloco é resolução total. Nesse caso, embora definida para um quarto de resolução, a resolução final renderizada para os pixels na primitiva pode ser resolução total. Se, com base na resolução da maioria, o controlador de GPU 32 determinar que a resolução de imagem para o primeiro bloco é um oitavo de resolução, então, embora definida para um quarto de resolução, a resolução renderizada final para a primitiva pode ser a oitava resolução.
[00131] Embora o exemplo acima seja descrito em relação ao controlador da GPU 32, o controlador 36 pode realizar operações semelhantes ou o controlador da GPU 32 e o controlador 36 podem, em conjunto, realizar essas operações. Por exemplo, o controlador 36 pode definir a janela e visão com base na resolução de imagem determinada para o bloco e modificar o comando da janela e visão.
[00132] Assim, o controlador da GPU 32 ou o controlador 36 podem determinar que um primeiro bloco de uma superficie de imagem deve incluir conteúdo de imagem com uma primeira resolução (por exemplo, primeira resolução de imagem). A primeira resolução é inferior a uma segunda resolução para outros blocos da superfície da imagem. Por exemplo, a primeira resolução pode ser um oitavo da resolução e o conteúdo da imagem em outros blocos pode estar em resolução total ou em um quarto da resolução. O
Petição 870190056518, de 18/06/2019, pág. 65/97
62/75 controlador de GPU 32 ou controlador 36 pode definir uma janela de visualização para o primeiro bloco baseado na primeira resolução do conteúdo de imagem no primeiro bloco e no tamanho do primeiro bloco.
[00133] O sombreador de pixel 64 recebe os pixels do buffer de pixels 62, conforme exibido pelo circuito de rasterização 60, e executa o pós-processamento para atribuir valores de cores a cada um dos pixels que devem ser exibidos. Por exemplo, o sombreador de pixel 64 pode receber valores constantes armazenados na memória do sistema 10, dados de textura armazenados na memória do sistema 10 e quaisquer outros dados para gerar saídas por pixel, tais como valores de cor. O sombreador de pixel 64 também pode produzir valores de opacidade que indicam a opacidade dos pixels. O sombreador de pixel 64 pode emitir os valores de pixel resultantes para a memória local 14. Desta forma, o circuito de passagem de renderização 58 pode renderizar o conteúdo da imagem para o primeiro bloco a um tamanho que é menor do que um tamanho do primeiro bloco e com base na primeira resolução do conteúdo da imagem no primeiro bloco. Por exemplo, o circuito de rasterização 60 pode determinar as coordenadas de exibição com base no tamanho da janela de visualização, conforme definido pelo controlador da GPU 32 e/ou controlador 36, e o sombreador de pixel 64 pode determinar valores por pixel para cada um dos pixels na janela de visão.
[00134] Embora não ilustrado, em alguns exemplos, o sombreador de pixel 64 pode ser enviado para um circuito de mesclagem de saída para qualquer processamento final de pixels. Por exemplo, o circuito de mesclagem de
Petição 870190056518, de 18/06/2019, pág. 66/97
63/75
saída pode utilizar informações de profundidade para
determinar se algum dos pixels deve ser removido > da
exibição. 0 circuito de mesclagem de saída também pode
executar operações de mesclagem para gerar valores finais de pixel. Em tais exemplos, o circuito de mesclagem de saída pode produzir os valores finais de pixel para a memória local 14.
[00135] Os circuitos de passagem de renderização 58 podem repetir essas operações para cada bloco e gerar conteúdo de imagem para cada bloco. Em alguns exemplos, apenas uma única passagem de renderização pode ser necessária, onde uma passagem de renderização se refere à renderização do conteúdo da imagem em todos os blocos. Por exemplo, o aplicativo 22 pode precisar emitir apenas um comando de renderização para que o GPU 12 renderize o conteúdo da imagem para cada um dos blocos em diferentes resoluções de imagem, em vez de emitir vários comandos de renderização para que o GPU 12 renderize o conteúdo da imagem em diferentes resoluções de imagem.
[00136] O circuito aumento da resolução 42 pode recuperar o conteúdo da imagem armazenada na memória local 14, e aumentar a resolução do conteúdo da imagem com base na resolução da imagem determinada. Por exemplo, o controlador da GPU 32 ou o controlador 36 podem indicar para testar o circuito 42 a resolução da imagem para cada um dos blocos. O circuito de aumento da resolução 42 pode usar a informação de resolução de imagem para determinar quanto o aumento da resolução do conteúdo da imagem. Por exemplo, se a resolução de imagem para um primeiro bloco é um quarto, então o circuito de amostragem aumentada 42 pode
Petição 870190056518, de 18/06/2019, pág. 67/97
64/75 fazer um aumento da resolução do conteúdo da imagem por um fator de quatro. Se a resolução da imagem para um segundo bloco for resolução total, então o circuito de aumento da resolução 42 pode funcionar como uma passagem sem aumento da resolução.
[00137] Existem várias maneiras em que circuito de aumento da resolução 42 pode aumentar a resolução do conteúdo da imagem, e as técnicas não se limitam a qualquer maneira especifica em que a aumento da resolução. Como um exemplo, o circuito de aumento da resolução 42 pode copiar o mesmo valor de pixel várias vezes (por exemplo, quatro vezes para aumentar o aumento da resolução por um fator de quatro). Como outro exemplo, o circuito de aumento da resolução 42 pode interpolar valores de pixel através de uma pluralidade de pixels para gerar valores de pixel para pixels adicionais.
[00138] Em alguns exemplos, o circuito de aumento da resolução 42 pode fazer o aumento da resolução do conteúdo da imagem como parte da saida dos valores de pixel para o conteúdo da imagem para o buffer de quadro 66. Por exemplo, durante a saida do conteúdo da imagem, o circuito de aumento da resolução 42 pode fazer aumento da resolução de valores de pixel para gerar mais valores de pixel para pixels como parte da escrita dos valores de pixel para esse pixel. Em alguns exemplos, o circuito de aumento da resolução 42 pode primeiro fazer o aumento da resolução de todo o conteúdo da imagem no primeiro bloco e armazenar o conteúdo da imagem aumentado da resolução na memória local 14. O circuito de aumento da resolução 42, ou possivelmente algum outro componente, pode produzir o
Petição 870190056518, de 18/06/2019, pág. 68/97
65/75 conteúdo da imagem submetido a aumento da resolução para o buffer de quadro 66.
[00139] A FIG. 4 é um diagrama pictórico ilustrando um exemplo de renderização de foveação. No exemplo ilustrado na FIG. 4, o controlador de GPU 32 ou o controlador 36 podem dividir a superfície da imagem em nove blocos 68A-68I, cada um com o tamanho NxN. Durante a renderização dos blocos 68A-68C, o controlador da GPU 32 ou o controlador 36 podem ter determinado que a resolução da imagem para o conteúdo da imagem nos blocos 68A-68C está em uma resolução de um décimo sexto. Consequentemente, os circuitos de passagem de renderização 58 podem renderizar o conteúdo de imagem dos blocos 68A-68C para uma janela de visualização de tamanho N/4xN/4, como ilustrado na FIG. 4. Por exemplo, o conteúdo da imagem dos blocos 68A-68C é um décimo sexto do tamanho dos blocos 68A-68C.
[00140] Durante a renderização de blocos 68D, 68F e 68G-68I, o controlador da GPU 32 ou o controlador 36 podem ter determinado que a resolução da imagem para o conteúdo da imagem nos blocos 68D, 68F e 68G-68I é de um quarto de resolução. Consequentemente, os circuitos de passagem de renderização 58 podem renderizar o conteúdo de imagem dos blocos 68G-68I para uma janela de visualização de tamanho N/2xN/2, como ilustrado na FIG. 4. Por exemplo, o conteúdo da imagem dos blocos 68D, 68F e 68G-68I é um quarto do tamanho dos blocos 68D, 68F e 68G-68I. Durante a renderização do bloco 68E, o controlador da GPU 32 ou o controlador 36 podem ter determinado que a resolução da imagem para o conteúdo da imagem no bloco 68E está na resolução máxima. Consequentemente, os circuitos de
Petição 870190056518, de 18/06/2019, pág. 69/97
66/75 passagem de renderização 58 podem tornar o conteúdo de imagem do bloco 68E para uma janela e visão de tamanho NxN, como ilustrado na FIG. 4. Por exemplo, o conteúdo da imagem do bloco 68E é igual ao tamanho do bloco 68E.
[00141] Os circuitos de passagem de renderização 58 podem armazenar o conteúdo da imagem para os blocos 68A-68I na memória local 14. O circuito de aumento da resolução 42 pode recuperar o conteúdo da imagem e, respectivamente, aumentar a resolução do conteúdo da imagem dos blocos. Por exemplo, para o conteúdo da imagem nos blocos 68A-68C, o circuito de aumento da resolução 42 pode fazer um aumento da resolução do conteúdo da imagem por um fator de 16. Para o conteúdo da imagem nos blocos 68D, 68F e 68G-68I, o circuito aumento da resolução 42 pode fazer um aumento da resolução do conteúdo da imagem por um fator de quatro. Para o conteúdo da imagem no bloco 68E, o circuito aumento da resolução 42 não pode fazer o aumento da resolução do conteúdo da imagem.
[00142] O lado direito da FIG. 4 ilustra a imagem final que é armazenada no buffer de quadros 66. Neste exemplo, a superfície da imagem parece relativamente clara com maior resolução no centro da superfície da imagem, onde o espectador deve estar focalizado. Para as outras porções da superfície da imagem, onde o espectador não precisa necessariamente se concentrar ou onde não há muita diferença no conteúdo da imagem, a GPU 12 teve que executar menos instâncias do sombreador de pixel 64, e geralmente tinha menos pixels para processar o que resulta em mais rápida renderização com menor consumo de energia.
[00143] A FIG. 5 é um fluxograma que ilustra um
Petição 870190056518, de 18/06/2019, pág. 70/97
67/75 exemplo de método de renderização de foveação. No exemplo ilustrado na FIG. 5, durante uma passagem de binagem, e antes da passagem de renderização, os circuitos de passagem de binagem 48 podem gerar um fluxo de visibilidade para superfície de resolução completa incluindo informação indicando quais vértices pertencem a quais blocos (70). Por exemplo, como descrito acima, o sombreador de vértice 50 pode gerar coordenadas de clipe para os vértices que o circuito de compartimentação 52 recebe. O controlador de GPU 32 ou o controlador 36 determinam o número e o tamanho dos blocos para a superfície da imagem. O circuito de compartimentação 52 recebe as coordenadas do clipe e se baseia nas coordenadas x e y, e o número e o tamanho dos blocos determina a quais blocos os vértices das primitivas pertencem. Além disso, o circuito de teste de profundidade 54 pode determinar se um vértice ou primitiva é visivel e vértices de saida que são visiveis para o buffer de fluxo 56.
[00144] O controlador da GPU 32 ou o controlador 36 pode determinar se há mais blocos a serem renderizados (72) . Se houver mais blocos a serem renderizados (SIM de 72), o controlador da GPU 32 ou o controlador 36 podem determinar que a resolução de um primeiro bloco da superfície da imagem é uma primeira resolução (74) . Neste exemplo, a primeira resolução do primeiro bloco pode ser menor que a resolução da imagem em outros blocos. Como exemplo, o primeiro bloco pode ser o bloco 68A. Neste exemplo, a resolução de imagem para o bloco 68A é um décimo sexto, e a resolução de imagem para o bloco 68D é de um quarto.
Petição 870190056518, de 18/06/2019, pág. 71/97
68/75 [00145] Para determinar a resolução da imagem para o primeiro bloco, o controlador da GPU 32 ou o controlador 36 podem determinar resoluções para diferentes porções da superfície da imagem. Por exemplo, o aplicativo 22 pode definir bandas de resolução, e o controlador GPU 32 ou controlador 36 pode determinar a resolução para as diferentes porções da superfície da imagem com base nas bandas de resolução que o aplicativo 22 definiu (por exemplo, comparando as coordenadas x e y a superfície da imagem com as coordenadas das bandas de resolução e determine quais resoluções existem para as diferentes partes da superfície da imagem).
[00146] Para os vértices que pertencem ao primeiro bloco, o controlador de GPU 32 ou o controlador 36 pode determinar as resoluções de imagem para esses vértices com base na localização dos vértices nas bandas de resolução definidas pelo aplicativo 22. O controlador de GPU 32 ou controlador 36 pode determinar a resolução para o primeiro bloco com base em onde a maioria de onde o primeiro bloco se encontra (por exemplo, primeira banda de resolução de imagem ou segunda banda de resolução de imagem) . O controlador de GPU 32 ou controlador 3 6 pode determinar a resolução do primeiro bloco com base na banda de resolução dentro da qual o primeiro bloco se encontra.
[00147] O circuito de passagem de renderização 58 pode renderizar o conteúdo da imagem para o primeiro bloco a um tamanho que é menor do que um tamanho do primeiro bloco e com base na primeira resolução do conteúdo da imagem no primeiro bloco. Por exemplo, o controlador de GPU 32 ou o controlador 3 6 pode determinar uma janela e
Petição 870190056518, de 18/06/2019, pág. 72/97
69/75 visão para o bloco, em que o tamanho da janela e visão é menor do que o tamanho do bloco (7 6) . Para determinar o tamanho da janela e visão, o controlador de GPU 32 ou controlador 36 pode definir uma janela de visualização para o primeiro bloco baseado na primeira resolução do conteúdo de imagem no primeiro bloco e no tamanho do primeiro bloco. Por exemplo, o controlador de GPU 32 ou controlador 36 pode multiplicar uma razão entre a primeira resolução do conteúdo da imagem no primeiro bloco e uma resolução completa com o tamanho do primeiro bloco para determinar um tamanho da tela.
[00148] O circuito de passagem de renderização 58 pode renderizar o conteúdo de imagem do primeiro bloco para a memória local 14 com base no tamanho determinado da janela de visão (78) . Por exemplo, o circuito de passagem de renderização 58 pode gerar conteúdo de imagem para o primeiro bloco, mas o tamanho do conteúdo de imagem pode ser o tamanho da tela e não o tamanho do bloco. A memória local 14 pode armazenar o conteúdo da imagem para o primeiro bloco.
[00149] O controlador da GPU 32 ou o controlador 36 pode determinar se há mais blocos a serem renderizados (72) . Se houver mais blocos a serem renderizados (SIM de 72), a GPU 12 poderá repetir essas operações, mas para um bloco diferente. Por exemplo, o controlador da GPU 32 ou o controlador 36 podem determinar que um segundo bloco da superfície da imagem deve incluir conteúdo de imagem com uma segunda resolução, e circuito de passagem de renderização 58 pode renderizar o conteúdo da imagem para o segundo bloco com um tamanho menor que o
Petição 870190056518, de 18/06/2019, pág. 73/97
70/75 tamanho do segundo bloco e com base na segunda resolução do conteúdo da imagem no segundo bloco.
[00150] Se, no entanto, não houver mais blocos para renderizar (NÃO de 72), o circuito aumento da resolução 42 pode fazer aumento da resolução e enviar o conteúdo da imagem para o buffer de quadro 66 (80) . O circuito aumento da resolução 42 pode sofrer um aumento de resolução com base nas resoluções de imagem (por exemplo, se tiver uma resolução de um quarto para o conteúdo da imagem para um bloco, depois multiplique o tamanho da imagem por quatro). Em alguns exemplos, o circuito aumento da resolução 42 pode aumentar a resolução como parte da saida. Em alguns exemplos, o circuito de aumento da resolução 42 pode primeiro fazer o aumento da resolução de todo o conteúdo da imagem do bloco, armazenar o conteúdo da imagem e, então, imprimir o conteúdo da imagem no buffer de quadro 66.
[00151] O seguinte é pseudocódigo indicando como o controlador de gráficos 32 ou o controlador 36 pode determinar a resolução da imagem para um bloco:
escala flutuante (flutuante fx, flutuante fy, flutuante gx, flutuante gy, flutuante w, flutuante caixa x, flutuante caixa_a, flutuar caixa w, caixa flutuante h) { flutuante xfl = (caixa_x-fx) * gx;
flutuante xf2 = (caixa_x_caixa_w-fx) * gx; flutuante yfl = (caixa_y-fy) * gy;
flutuante yf2 = (caixa_y + caixa_h-fy) * gy; xf3=0 Recebido yf3=0 Recebido se (sinal (xfl) == sinal (xf2)) xf3 = mag_min
Petição 870190056518, de 18/06/2019, pág. 74/97
71/75 (xfl, xf2);
se (sinal (yfl) == sinal (yf2)) yf3 = mag_min (yfl, yf2);
Flutuante pix_area = max (1, xf3 * xf3 + yf3 * yf3 + w);
retorno 1./sqrt(pix_area); } [00152] As técnicas de exemplo acima podem fornecer várias vantagens para renderização de foveação. Em algumas outras técnicas, um aplicativo (como o aplicativo 22) pode criar buffers de quadros separados para cada região que deseja renderizar em diferentes resoluções. O aplicativo pode determinar diferentes matrizes de projeção para cada buffer de quadro e gerar buffers de comando para cada um desses buffers de quadros. O aplicativo pode instruir o controlador de GPU 32 a blit (por exemplo, combinar em um) os diferentes buffers de quadro em um único buffer de quadro. A GPU 12 pode então executar a categorização de cada um dos buffers de quadro e renderizar todas as primitivas para os blocos desses buffers de quadro. A GPU 12 pode produzir cada bloco dos buffers de quadro menores para a memória 10, e então o GPU 12 lê os dados de cada buffer de quadros menor (ou o processador de exibição 16 lê de volta os dados de cada buffer de quadro menor) da memória 10 e blits para sua área no buffer de quadro maior.
[00153] No entanto, nas técnicas acima, o aplicativo 22 pode precisar gerar apenas comandos uma vez, e não para cada buffer de quadros, como foi necessário nas outras técnicas, o que pode economizar 3x de carga de
Petição 870190056518, de 18/06/2019, pág. 75/97
72/75 trabalho para a CPU 6. Além disso, a GPU 12 pode precisar apenas executar o uma vez e não depender de matrizes de projeção diferentes, o que pode economizar 3x em termos de carga de trabalho de processamento primitivo e de vértices em comparação com outras técnicas em que são necessários vários buffers de quadro diferentes (por exemplo, várias imagens diferentes são renderizadas , leia de volta da memória do sistema 10 e, em seguida, combinados juntos). Além disso, nas técnicas acima, a GPU 12 não precisa gravar imagens diferentes na memória do sistema 10 e, em seguida, lê-las novamente para combinar, o que pode economizar energia e largura de banda de memória.
[00154] O acima descreve um exemplo de como realizar a renderização foveada. Contudo, as técnicas descritas nesta divulgação não são tão limitadas.
[00155] Como outra técnica de fusão de exemplo, CPU 6 e GPU 12 podem usar técnicas similares como aquelas descritas acima para determinar a quais tiles pertencem os primitivos (por exemplo, executar passagem de binagem semelhante a acima) . Após a execução de uma passagem de binagem, a GPU 12 pode armazenar o conteúdo da imagem de toda a superfície nas menores resoluções das resoluções definidas pelo aplicativo 22. A GPU 12 pode aumentar a resolução da imagem inteira para uma resolução intermediária (por exemplo, passar da resolução 1/16111 para a resolução 1/4 * 11) . Neste caso, a resolução de pixels para toda a superfície da imagem é de 1/4 * 11 pixels, mas a resolução da imagem é 1/16.
[00156] Para as porções da superfície da imagem que precisam ser renderizadas em resolução de imagem de 1/4
Petição 870190056518, de 18/06/2019, pág. 76/97
73/75 * 11, a CPU 6 pode definir uma região de clipe e a GPU 12 pode render apenas a porção dentro da região do clipe com resolução de 1/4 pixel. A GPU 12 pode, então, ampliar a resolução da superfície da imagem inteira resultante.
[00157] Neste caso, haverá algumas porções com resolução de imagem de I/Ió , e outras porções com resolução de imagem 1/4, mas a imagem inteira estará em resolução de pixel completa. A CPU 6 pode determinar se há alguma porção que deva ser uma resolução de imagem completa e clipa essas regiões. A GPU 12 pode renderizar o conteúdo da imagem da região de clipe na resolução total de pixels. Portanto, no final, haverá algumas porções com resolução de imagem 1/16111, outras porções com resolução de imagem 1/4 e outras porções com resolução de imagem completa. Dessa forma, a GPU 12 pode fornecer outro exemplo de renderização de foveação.
[00158] As técnicas descritas nesta revelação podem ser implementadas, pelo menos em parte, em hardware, software, firmware ou qualquer combinação deles. Por exemplo, vários aspectos das técnicas descritas podem ser implementados dentro de um ou mais processadores, incluindo um ou mais microprocessadores, processadores de sinais digitais (DSPs), circuitos integrados específicos para aplicações (ASICs), matrizes de portas programáveis de campo (FPGAs) ou qualquer outro circuitos lógicos integrados ou discretos equivalentes, bem como quaisquer combinações de tais componentes. O termo processador ou circuito de processamento pode geralmente referir-se a qualquer dos circuitos lógicos precedentes, isoladamente ou em combinação com outros circuitos lógicos, ou qualquer
Petição 870190056518, de 18/06/2019, pág. 77/97
74/75 outro circuito equivalente tal como hardware discreto que realiza processamento.
[00159] Tal hardware, software e firmware podem ser implementados dentro do mesmo dispositivo ou dentro de dispositivos separados para suportar as várias operações e funções descritas nesta revelação. Além disso, qualquer uma das unidades, módulos ou componentes descritos pode ser implementada em conjunto ou separadamente como dispositivos lógicos discretos mas interoperáveis. A representação de diferentes recursos como módulos ou unidades destina-se a destacar aspectos funcionais diferentes e não implica necessariamente que tais módulos ou unidades devam ser realizados por componentes de hardware ou software separados. Em vez disso, a funcionalidade associada a um ou mais módulos ou unidades pode ser executada por hardware, firmware e/ou componentes de software separados ou integrada em componentes de hardware ou software comuns ou separados.
[00160] As técnicas descritas nesta divulgação também podem ser armazenadas, incorporadas ou codificadas em um meio legivel por computador, como um meio de armazenamento legivel por computador que armazena instruções. As instruções incorporadas ou codificadas em um meio legivel por computador podem fazer com que um ou mais processadores executem as técnicas descritas aqui, por exemplo, quando as instruções são executadas por um ou mais processadores. Meios de armazenamento legiveis por computador podem incluir memória de acesso aleatório (RAM), memória somente leitura (ROM) , memória somente leitura programável (PROM), memória somente de leitura programável
Petição 870190056518, de 18/06/2019, pág. 78/97
75/75 apagável (EPROM), memória somente leitura programável apagável eletronicamente (EEPROM), memória flash um disco rigido, um CD-ROM, um disquete, uma fita, midia magnética, midia óptica ou outra midia de armazenamento legivel por computador que seja tangivel.
[00161] Vários aspectos e exemplos foram descritos. No entanto, podem ser feitas modificações na estrutura ou técnicas desta divulgação sem se afastar do escopo das reivindicações seguintes.

Claims (9)

1. Um. método de renderização de foveação, o método compreendendo:
determinar que um primeiro bloco de uma superfície de imagem deve incluir conteúdo de imagem tendo uma primeira resolução, em que a primeira resolução é inferior a uma segunda, resolução para, outros blocos da. superfície da imagem;
renderizar o conteúdo da imagem para o primeiro bloco com um. tamanho menor do que o tamanho do primeiro bloco e com base na primeira resolução do conteúdo da imagem no primeiro bloco;
aumentar a resolução do conteúdo da imagem no primeiro bloco para gerar conteúdo de imagem com resolução aumentada; e produzir o conteúdo da imagem cora resolução aumentaaa.
2. 0 método, de acordo com a reivindicação 1, compreendendo ainda:
definir uma janela de visão para o primeiro bloco com base na primeira resolução do conteúdo da imagem no primeiro bloco e no tamanho do primeiro bloco, em que renderizar o conteúdo da imagem para o primeiro bloco no tamanho que é menor que o tamanho do primeiro bloco compreende renderizar o conteúdo da imagem com base na janela de visão definida para o primeiro bloco.
3. 0 método, de acordo com a reivindicação 2, sendo que definir a janela, de visão compreende:
multiplicar uma razão entre a primeira resolução do conteúdo da imagem no primeiro bloco e uma resolução
Petição 870190056518, de 18/06/2019, pág. 80/97
2/9 completa do conteúdo da imagem pelo tamanho do primeiro bloco para determinar o tamanho da janela de visão.
4. 0 método, de acordo com a reivindicação 1, compreendendo ainda:
determinar resoluções para diferentes porções da superfície da imagem; e durante uma passagem de binagem, e antes da renderização, determinar quais vértices de primitivos da superfície da imagem pertencera ao primeiro em que determinar que o primeiro bloco da superfície da imagem deve incluir conteúdo de imagem tendo a primeira resolução compreende determinar que o primeiro bloco da superfície da imagem deve incluir conteúdo de imagem tendo a primeira resolução baseada na determinação das resoluções para diferentes porções da superfície da imagem e a determinação de quais vértices da superfície da imagem pertencem ao primeiro bloco.
5. 0 método, de acordo com a reivindicação 4, compreendendo ainda:
receber informação indicativa das resoluções para porções da superfície da imagem, em que determinar resoluções para diferentes porções da superfície da imagem compreende determinar as resoluções para diferentes porções da superfície da imagem com base na informação recebida.
6. 0 método, acordo com a reivindic ação 1, em que au.p lentar a resoluç '3.0 1 do conteúdo da imagem compreende aumenta .r a resolução o OHIO parte da produção do c :onteúdo da imagem CO1TL cL SOlUÇaO auiTi.1 encadet.
Petição 870190056518, de 18/06/2019, pág. 81/97
3/9
7. 0 método, de acordo com a reivindicação 1, em que o conteúdo da imagem com resolução aumentada compreende um primeiro conteúdo de imagem com resolução aumentada, o método compreendendo ainda:
determinar que um segundo bloco da superfície da imagem, deve incluir conteúdo de imagem com a segunda resolução;
renderizar o conteúdo da imagem para o segundo bloco em um tamanho que é menor do que o tamanho do segundo bloco e com base na segunda resolução do conteúdo da imagem no segundo bloco;
aumentar a resolução do conteúdo da imagem no segundo bloco para gerar um segundo conteúdo de imagem com resolução aumentada; e produzir o segundo conteúdo da imagem. com resolução aumentada.
8. 0 método, de acordo com a reivindicação 7, em que aumentar a resolução do conteúdo da imagem no primeiro bloco e produzir o primeiro conteúdo de imagem com resolução aumentada compreende aumentar a resolução do conteúdo da imagem no primeiro bloco e produzir o primeiro conteúdo de imagem com resolução aumentada depois de renderizar o conteúdo da imagem para o segundo bloco.
9. 0 método, de acordo com a reivindicação 1, compreendendo ainda exibir o conteúdo· de imagem com r e s o 1 u ç ã o a um e n t a ci a .
10. Um. dispositivo para renderização de foveaçâo, o dispositivo compreendendo:
uma memória do sistema; e uma unidade de processamento de gráficos (GPU)
Petição 870190056518, de 18/06/2019, pág. 82/97
4/9 compreendendo pelo menos um circuito programável ou de função fixa, em que a GPU é configurada para:
determinar que um primeiro bloco de uma superfície de imagem deve incluir conteúdo de imagem tendo uma primeira resolução, em que a primeira resolução é inferior a uma segunda resolução para outros blocos da superfície da imagem;
renderizar o conteúdo da imagem para o primeiro bloco com um tamanho menor do que o tamanho do primeiro bloco e com base na primeira resolução do conteúdo da imagem no primeiro bloco;
aumentar a resolução do conteúdo da imagem no primeiro bloco para gerar conteúdo de imagem com resolução aumentada; e produzir o conteúdo de imagem de resolução aumentada para armazenamento na memória do sistema.
11. 0 dispositivo, de acordo com a reivindicação
10, compreendendo ainda um proce ssador configur; ado para de r mir uma janexa de visão p ) cl .1? 8. O primeiro bloco com base na primeira resolução do coi nteúdc * da imagem no primeiro
bloco e no tamanho do primeiro bloco, em que renderizar o conteúdo da imagem para o primeiro bloco no tamanho que é menor que o tamanho do primeiro bloco, a GPU é configurada para, renderizar o conteúdo da imagem com base na janela de visão definida para o primeiro bloco.
12. 0 dispositivo, de acordo com a reivindicação 11, em que para definir a. janela de visão, o processador é configurado para multiplicar uma razão entre a primeira resolução do conteúdo da imagem no primeiro bloco e uma
Petição 870190056518, de 18/06/2019, pág. 83/97
5/9 resolução completa do conteúdo da imagem pelo tamanho do primeiro bloco para determinar o tamanho da janela de
13. 0 dispositivo, de acordo com a reivindicação
10, que compreende adicionalmente um processador configurado para determinar as resoluções de diferentes porções da. superfície da imagem, em que a
GPU é configurada p3.I?cl i durante a passagem de binagem, e antes da renderização, determinar quais vértices de primitivos da superfície da imagem pertencem, ao primeiro bloco, em que para determinar que o primeiro bloco da superfície da imagem deve incluir conteúdo de imagem com a primeira, resolução, a GPU é configurada para determinar que o primeiro bloco da superfície da imagem deve incluir conteúdo de imagem tendo a primeira resolução baseada na determinação de resoluções para diferentes porções da superfície da imagem e a determinação de quais vértices da. superfície da imagem pertencem ao primeiro bloco.
14. O dispositivo, de acordo com a reivindicação 13, em que a GPU é configurada para receber a informação indicativa das resoluções para porções da superfície da imagem, em que para determinar resoluções para, diferentes porções da superfície da imagem, a GPU é configurada para determinar as resoluções para diferentes porções da superfície da imagem com base na. informação recebida.
15. O dispositivo, de acordo com a reivindicação 10, em que para aumentar a resolução, a GPU é configurada para aumentar a. resolução do conteúdo da imagem como parte
Petição 870190056518, de 18/06/2019, pág. 84/97
6/9 da produção do conteúdo da imagem com a resolução aumentada.
16. 0 dispositivo, de acordo com a reivindicação 10, em que o conteúdo da imagem com resolução aumentada compreende um primeiro conteúdo de imagem, e em que a GPU é configurada para.:
determinar que um segundo bloco da superfície da imagem deve incluir conteúdo de imagem com a segunda resolução;
render!zar o conteúdo da imagem para o segundo bloco em um tamanho que é menor do que o tamanho do segundo bloco e com base na segunda resolução do conteúdo da imagem no segundo bloco;
aumentar a resolução do conteúdo da imagem no segundo bloco para gerar um segundo conteúdo de imagem com resolução aumentada; e produzir o segundo conteúdo da imagem com resolução aumentada.
17. O dispositivo, de acordo com a reivindicação 16, em que para aumentar a resolução do· conteúdo da imagem no primeiro bloco e produzir o primeiro conteúdo de imagem com resolução aumentada, a GPU é configurada para aumentar a resolução do conteúdo da imagem no primeiro bloco e produzir o prim.ei.ro conteúdo de imagem com resolução aumentada depois de renderizar o conteúdo da imagem para o segundo bloco.
18. 0 dispositivo, de acordo com a reivindicação 10, que compreende adicionalmente um processador de exibição configurado para produzir o conteúdo de imagem com resolução aumentada para um monitor.
Petição 870190056518, de 18/06/2019, pág. 85/97
7/9
19. Um dispositivo para renderização de foveação, o dispositivo compreendendo:
meios para determinar que um primeiro bioco de uma superfície de imagem deve incluir conteúdo de imagem tendo uma primeira resolução, em que a primeira resolução é inferior a uma segunda resolução para outros blocos da superfície da imagem;
meios para renderizar o conteúdo da imagem para o primeiro bloco com um tamanho menor do que o tamanho do primeiro bloco e com. base na primeira resolução do conteúdo da imagem no prim.ei.ro bloco;
meios para aumentar a resolução do conteúdo da imagem no primeiro bloco para gerar conteúdo de imagem com resolução aumentada; e meios para produzir o conteúdo da. imagem com resolução aumentada.
20. 0 dispositivo, de acordo com a reivindicação 19, compreendendo ainda:
meios para definir uma janela de visão para, o primeiro bloco com base na primeira resolução do conteúdo da imagem no primeiro bloco e no tamanho do primeiro bloco, em que os meios para renderizar o conteúdo da imagem para o primeiro bloco no tamanho que é menor que o tamanho do primeiro bloco compreende meios para renderizar o conteúdo da imagem com base na janela de visão definida para o primeiro bloco.
21. 0 dispositivo, de acordo com a reivindicação 19, compreendendo ainda:
meios para determinar resoluções para diferentes porções da superfície da imagem; e
Petição 870190056518, de 18/06/2019, pág. 86/97
8/9 meios para, durante a passagem de binagem, e antes da renderização, determinar quais vértices de primitivos da superfície da imagem pertencem ao primeiro bloco, em que os meios para determinar que o primeiro bloco da superfície da imagem deve incluir conteúdo de imagem com a primeira resolução compreende meios para determinar que o primeiro bloco da superfície da imagem deve incluir conteúdo de imagem tendo a primeira resolução baseada na determinação de resoluções para diferentes porções da superfície da imagem e a determinação de quais vértices da superfície da imagem pertencem ao primeiro bloco.
22. 0 dispositivo, de acordo com a reivindicação 19, em que os meios para produzir compreendem os meios para aumentar a resolução.
23. Uma mídia de armazenamento legível por computador que armazena instruções que, quando executadas, fazem com que um. ou mais processadores de um dispositivo para renderização de foveação:
determinar que um primeiro bloco de uma superfície de imagem deve incluir conteúdo de imagem tendo uma primeira resolução, em que a primeira resolução é inferior a uma. segunda resolução para outros blocos da superfície da imagem;
renderizar o conteúdo da imagem para o primeiro bloco com um tamanho menor do que o tamanho do primeiro bloco e com base na primeira, resolução do conteúdo da imagem no primeiro bloco;
aumentar a resolução do conteúdo da imagem no
Petição 870190056518, de 18/06/2019, pág. 87/97
9/9 primeiro bloco para gerar conteúdo de imagem com resolução aumentada; e produzir o conteúdo da. imagem com resolução aumentada.
24. A mídia de armazenamento legível por computador, de acordo com a reivindicação 23, compreendendo ainda instruções que fazem com que os um ou mais processadores:
definam uma janela de visão para o primeiro bloco com base na primeira resolução do conteúdo da imagem no primeiro bloco e no tamanho do primeiro bloco, em que as instruções que fazem com que os um ou mais processadores renderizem o conteúdo da imagem para o primeiro bloco no tamanho que é menor que o tamanho do primeiro bloco, compreendem instruções que fazem, com. que os um ou mais processadores renderizem o conteúdo da imagem com base na janela de visão definida para o primeiro bloco.
BR112019012641-4A 2016-12-23 2017-10-23 Método e dispositivo para renderização foveation, e memória legível por computador BR112019012641B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/390,333 US11222397B2 (en) 2016-12-23 2016-12-23 Foveated rendering in tiled architectures
US15/390,333 2016-12-23
PCT/US2017/057915 WO2018118203A1 (en) 2016-12-23 2017-10-23 Foveated rendering in tiled architectures

Publications (3)

Publication Number Publication Date
BR112019012641A2 true BR112019012641A2 (pt) 2019-11-19
BR112019012641A8 BR112019012641A8 (pt) 2023-04-04
BR112019012641B1 BR112019012641B1 (pt) 2024-02-15

Family

ID=60268488

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112019012641-4A BR112019012641B1 (pt) 2016-12-23 2017-10-23 Método e dispositivo para renderização foveation, e memória legível por computador

Country Status (7)

Country Link
US (1) US11222397B2 (pt)
EP (1) EP3559914B1 (pt)
KR (1) KR102475212B1 (pt)
CN (1) CN110036413B (pt)
AU (1) AU2017382489A1 (pt)
BR (1) BR112019012641B1 (pt)
WO (1) WO2018118203A1 (pt)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10535114B2 (en) * 2015-08-18 2020-01-14 Nvidia Corporation Controlling multi-pass rendering sequences in a cache tiling architecture
GB2553744B (en) 2016-04-29 2018-09-05 Advanced Risc Mach Ltd Graphics processing systems
GB2572625B (en) 2018-04-05 2020-06-17 Imagination Tech Ltd Ordering in tessellation operations
GB2573543B (en) * 2018-05-09 2021-10-27 Advanced Risc Mach Ltd Graphics Processing
US10937126B2 (en) * 2018-05-17 2021-03-02 Intel Corporation Tile-based multiple resolution rendering of images
EP3598391B1 (en) * 2018-07-16 2023-09-06 Huawei Technologies Co., Ltd. Variable resolution rendering
US10796478B2 (en) 2018-09-26 2020-10-06 Qualcomm Incorporated Dynamic rendering for foveated rendering
MX2021007874A (es) 2018-12-27 2021-10-26 Huawei Tech Co Ltd Un codificador de video, un decodificador de video y métodos correspondientes.
MX2021007926A (es) * 2018-12-28 2021-10-22 Huawei Tech Co Ltd Un codificador de video, un decodificador de video y metodos correspondientes.
CN112015929B (zh) 2019-05-30 2024-07-05 阿里云计算有限公司 栅格数据访问方法、装置、电子设备及计算机存储介质
KR102582407B1 (ko) * 2019-07-28 2023-09-26 구글 엘엘씨 포비에이티드 메시들로 몰입형 비디오 콘텐츠를 렌더링하기 위한 방법들, 시스템들, 및 매체들
CN110677692B (zh) * 2019-09-27 2022-12-06 腾讯科技(深圳)有限公司 视频解码方法及装置、视频编码方法及装置
US11030783B1 (en) 2020-01-21 2021-06-08 Arm Limited Hidden surface removal in graphics processing systems
US11049216B1 (en) * 2020-01-21 2021-06-29 Arm Limited Graphics processing systems
US11600002B2 (en) * 2020-06-03 2023-03-07 Qualcomm Incorporated Bin filtering
CN113726950B (zh) * 2021-06-10 2022-08-02 荣耀终端有限公司 一种图像处理方法和电子设备
US11893654B2 (en) 2021-07-12 2024-02-06 Qualcomm Incorporated Optimization of depth and shadow pass rendering in tile based architectures
CN116263982B (zh) * 2022-04-20 2023-10-20 象帝先计算技术(重庆)有限公司 图形处理器、系统、方法、电子装置及设备

Family Cites Families (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5682441A (en) 1995-11-08 1997-10-28 Storm Technology, Inc. Method and format for storing and selectively retrieving image data
US6643666B1 (en) * 1998-02-26 2003-11-04 James J. Kernz Apparatus and method for accessing a coin image compilation
US6366899B1 (en) * 1998-02-26 2002-04-02 James J. Kernz Apparatus and method for accessing a coin image compilation
US7075535B2 (en) * 2003-03-05 2006-07-11 Sand Codex System and method for exact rendering in a zooming user interface
AU2005269256B2 (en) 2004-08-03 2008-08-07 Silverbrook Research Pty Ltd Head mounted display with wave front modulator
US20060075034A1 (en) 2004-09-24 2006-04-06 Harri Lakkala Method and apparatus for creating and storing personal information relating to earth shaking events
US9384619B2 (en) 2006-07-31 2016-07-05 Ricoh Co., Ltd. Searching media content for objects specified using identifiers
US7933632B2 (en) * 2005-09-16 2011-04-26 Microsoft Corporation Tile space user interface for mobile devices
US8619083B2 (en) 2009-01-06 2013-12-31 Microsoft Corporation Multi-layer image composition with intermediate blending resolutions
US8385669B2 (en) * 2009-03-04 2013-02-26 Microsoft Corporation Scalable mutable tiled multi-resolution texture atlases
US20100229115A1 (en) 2009-03-05 2010-09-09 Microsoft Corporation Zoomable user interface data generation
US20110087737A1 (en) 2009-10-14 2011-04-14 Cbs Interactive, Inc. Systems and methods for living user reviews
AU2010313045B2 (en) 2009-10-26 2013-08-29 Sony Interactive Entertainment Inc. Image file generation device, image processing device, image file generation method, image processing method, and data structure for image files
US20110173570A1 (en) * 2010-01-13 2011-07-14 Microsoft Corporation Data feeds with peripherally presented interesting content
US8957920B2 (en) * 2010-06-25 2015-02-17 Microsoft Corporation Alternative semantics for zoom operations in a zoomable scene
US8549425B2 (en) * 2010-12-02 2013-10-01 Sony Corporation Visual treatment for a user interface in a content integration framework
US9690099B2 (en) 2010-12-17 2017-06-27 Microsoft Technology Licensing, Llc Optimized focal area for augmented reality displays
EP2721816A4 (en) 2011-06-16 2015-03-18 Freescale Semiconductor Inc METHOD AND DEVICE FOR ENCODING AND DECODING AN IMAGE
US20130016128A1 (en) * 2011-07-13 2013-01-17 Apple Inc. Tiled Zoom of Multiple Digital Image Portions
JP5792607B2 (ja) * 2011-12-09 2015-10-14 株式会社ソニー・コンピュータエンタテインメント 画像処理装置および画像処理方法
US10242481B2 (en) * 2012-03-15 2019-03-26 Qualcomm Incorporated Visibility-based state updates in graphical processing units
CN102750725B (zh) * 2012-06-05 2016-04-06 南京安讯网络服务有限公司 基于图形处理器加速的地形渲染方法
US9727991B2 (en) * 2013-03-01 2017-08-08 Microsoft Technology Licensing, Llc Foveated image rendering
US20140267616A1 (en) 2013-03-15 2014-09-18 Scott A. Krig Variable resolution depth representation
US9830714B2 (en) 2014-06-27 2017-11-28 Samsung Electronics Co., Ltd. Graphics processing with advection to reconstruct missing sample data points
KR102327144B1 (ko) * 2014-11-26 2021-11-16 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법
US20160212423A1 (en) 2015-01-16 2016-07-21 Microsoft Technology Licensing, Llc Filtering to mitigate artifacts when changing chroma sampling rates
CN104679509B (zh) * 2015-02-06 2019-11-15 腾讯科技(深圳)有限公司 一种渲染图形的方法和装置
US10152764B2 (en) * 2015-03-24 2018-12-11 Intel Corporation Hardware based free lists for multi-rate shader
US10037620B2 (en) * 2015-05-29 2018-07-31 Nvidia Corporation Piecewise linear irregular rasterization
US10210844B2 (en) * 2015-06-29 2019-02-19 Microsoft Technology Licensing, Llc Holographic near-eye display
AU2016296579B2 (en) 2015-07-17 2021-07-01 Magic Leap, Inc. Virtual/augmented reality system having dynamic region resolution
US9807416B2 (en) 2015-09-21 2017-10-31 Google Inc. Low-latency two-pass video coding
KR102454893B1 (ko) * 2015-09-30 2022-10-14 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치의 동작 방법
US10726619B2 (en) * 2015-10-29 2020-07-28 Sony Interactive Entertainment Inc. Foveated geometry tessellation
US11010956B2 (en) * 2015-12-09 2021-05-18 Imagination Technologies Limited Foveated rendering
US10643296B2 (en) * 2016-01-12 2020-05-05 Qualcomm Incorporated Systems and methods for rendering multiple levels of detail
US10157448B2 (en) * 2016-02-12 2018-12-18 Qualcomm Incorporated Foveated video rendering
CN105676470B (zh) * 2016-03-24 2018-04-10 清华大学 一种三维场景的视觉上的空间分辨率增强方法及系统
US10169846B2 (en) * 2016-03-31 2019-01-01 Sony Interactive Entertainment Inc. Selective peripheral vision filtering in a foveated rendering system
US10192528B2 (en) * 2016-03-31 2019-01-29 Sony Interactive Entertainment Inc. Real-time user adaptive foveated rendering
US10401952B2 (en) * 2016-03-31 2019-09-03 Sony Interactive Entertainment Inc. Reducing rendering computation and power consumption by detecting saccades and blinks
US10255714B2 (en) * 2016-08-24 2019-04-09 Disney Enterprises, Inc. System and method of gaze predictive rendering of a focal area of an animation
US20180082464A1 (en) * 2016-09-16 2018-03-22 Tomas G. Akenine-Moller Apparatus and method for an efficient 3d graphics pipeline
US10379611B2 (en) * 2016-09-16 2019-08-13 Intel Corporation Virtual reality/augmented reality apparatus and method
US10147166B2 (en) * 2016-09-23 2018-12-04 Apple Inc. Methods and systems for spatially localized image editing
US20180137602A1 (en) * 2016-11-14 2018-05-17 Google Inc. Low resolution rgb rendering for efficient transmission
US10262387B2 (en) * 2016-11-14 2019-04-16 Google Llc Early sub-pixel rendering
US10453271B2 (en) * 2016-12-07 2019-10-22 Microsoft Technology Licensing, Llc Automated thumbnail object generation based on thumbnail anchor points
US10298840B2 (en) 2017-01-31 2019-05-21 Microsoft Technology Licensing, Llc Foveated camera for video augmented reality and head mounted display
US10565964B2 (en) 2017-04-24 2020-02-18 Intel Corporation Display bandwidth reduction with multiple resolutions
CN110770796B (zh) 2017-06-05 2024-03-15 谷歌有限责任公司 平稳变化的中央凹型渲染
US10504272B2 (en) 2017-06-13 2019-12-10 Intel Corporation Apparatus and method for optimizing time/space warp for virtual reality using dynamic tiling and dirty tile marking
US10580151B2 (en) 2017-12-05 2020-03-03 Qualcomm Incorporated Tile-based low-resolution depth storage

Also Published As

Publication number Publication date
US11222397B2 (en) 2022-01-11
BR112019012641A8 (pt) 2023-04-04
CN110036413A (zh) 2019-07-19
WO2018118203A1 (en) 2018-06-28
KR20190100194A (ko) 2019-08-28
US20180182066A1 (en) 2018-06-28
AU2017382489A1 (en) 2019-05-23
EP3559914B1 (en) 2023-10-18
KR102475212B1 (ko) 2022-12-06
EP3559914C0 (en) 2023-10-18
EP3559914A1 (en) 2019-10-30
CN110036413B (zh) 2023-06-02
BR112019012641B1 (pt) 2024-02-15

Similar Documents

Publication Publication Date Title
BR112019012641A2 (pt) renderização foveada em arquiteturas em bloco
US10885607B2 (en) Storage for foveated rendering
CN110383337B (zh) 可变速率着色
CN106296565B (zh) 图形管线方法和设备
TWI616846B (zh) 利用以空間及/或時間方式改變取樣圖案之增強型消鋸齒的一種圖形子系統、電腦實施方法及電腦裝置
KR102338831B1 (ko) 구성가능한 변환 파라미터들을 갖는 다중 공간 렌더링
US20130127858A1 (en) Interception of Graphics API Calls for Optimization of Rendering
CN109564694B (zh) 用于基于入库的图形处理的顶点着色器
US20160048980A1 (en) Bandwidth reduction using texture lookup by adaptive shading
US10078883B2 (en) Writing graphics data from local memory to system memory
US20190035049A1 (en) Dithered variable rate shading
US9280956B2 (en) Graphics memory load mask for graphics processing
JP2018512644A (ja) 低品質タイルを使用してメモリ帯域幅を減らすためのシステムおよび方法
KR20170132758A (ko) 하이브리드 2d/3d 그래픽 렌더링
TWI786233B (zh) 關於以微磚為基礎之低解析度深度儲存之方法、器件與非暫時性電腦可讀儲存媒體
KR20210095914A (ko) 가변 레이트 셰이딩과 슈퍼 샘플 셰이딩의 통합
US8063914B1 (en) Rendering antialiased geometry to an image buffer using jittering
US20210295586A1 (en) Methods and apparatus for decoupled shading texture rendering

Legal Events

Date Code Title Description
B350 Update of information on the portal [chapter 15.35 patent gazette]
B06W Patent application suspended after preliminary examination (for patents with searches from other patent authorities) chapter 6.23 patent gazette]
B15K Others concerning applications: alteration of classification

Free format text: AS CLASSIFICACOES ANTERIORES ERAM: G06T 15/20 , G06T 15/00

Ipc: G06T 15/20 (2011.01)

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: 20 (VINTE) ANOS CONTADOS A PARTIR DE 23/10/2017, OBSERVADAS AS CONDICOES LEGAIS