MX2008015162A - Rapida reconfiguracion de estado de tuberia de graficos. - Google Patents

Rapida reconfiguracion de estado de tuberia de graficos.

Info

Publication number
MX2008015162A
MX2008015162A MX2008015162A MX2008015162A MX2008015162A MX 2008015162 A MX2008015162 A MX 2008015162A MX 2008015162 A MX2008015162 A MX 2008015162A MX 2008015162 A MX2008015162 A MX 2008015162A MX 2008015162 A MX2008015162 A MX 2008015162A
Authority
MX
Mexico
Prior art keywords
resource
slot
shader
resources
graphics
Prior art date
Application number
MX2008015162A
Other languages
English (en)
Inventor
Ramanujan Srinivasan
Relja Markovic
Samuel Glassenberg
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of MX2008015162A publication Critical patent/MX2008015162A/es

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

Se proporcionan técnicas y tecnologías para unir recursos a ranuras particulares asociadas con sombreadores en una tubería de gráficos. Las dependencias de recurso entre recursos que se utilizan por cada sombreador pueden determinarse, y, basándose en estas dependencias de recurso, pueden calcularse asociaciones de recurso/ranura comunes. Cada asociación de recurso/ranura común identifica un particular de los recursos para asociarse con una particular de la ranuras.

Description

RAPIDA RECONFIGURACION DE ESTADO DE TUBERIA DE GRAFICOS ANTECEDENTES La presentación y muestra de gráficos tridimensionales (3D) en pantalla típicamente involucra muchos cálculos y procesamientos. En un sistema de gráficos simple, tales cálculos ocurren de acuerdo con algún nivel de procesamiento cooperativo o compartido por la unidad de procesamiento central (CPU) y la unidad de procesamiento de gráficos (GPU). En un escenario ilustrativo, después que se procesan las instrucciones y ocurren algunos cálculos iniciales en la CPU, un grupo de puntos o vértices de coordenada que definen el objeto para presentarse se almacena en memoria de video para procesamiento adicional por la GPU en la tubería de gráficos. Cuando los programadores de gráficos desarrollan aplicaciones de gráficos a través de un grupo de APIs de gráficos disponibles, el programador generalmente indica un grupo de vértices para operar por un grupo de elementos algorítmicos. Estos datos se envían en la tubería de gráficos, y cada vértice se dirige a través de un grupo fijo de subunidades de GPU en la tubería de gráficos. Una de estas subunidades, llamada un mosaico, divide los datos de gráficos en polígonos simples de acuerdo con algoritmos predeterminados diseñados para cubrir eficientemente la superficie del objeto que se representa. Después de eso, una o más unidades de sombreador programable, algunas veces denominado como sombreadores o "programas de sombreador", puede operar en los datos y realizar operaciones especializadas en datos de gráficos. Los sombreadores pueden incluir, por ejemplo, sombreador(es) de vértice, sombreador(es) de geometría y sombreador(es) de píxel. Un sombreador individual puede recibir diferentes combinaciones de constantes de sombreador, y dependiendo de la combinación de constantes de sombreador particular que se proporcione, la salida generada por el sombreador variará. Estas constantes de sombreador pueden especificar, por ejemplo, cómo se combinan los píxeles, cuántos datos se leen hacia adentro y hacia afuera, y en el caso de una textura, cuántos valores se extraen de esa textura. El procedimiento de sombreado es un procedimiento intensivo y complejo de cómputo. Cuando estos sombreadores específicos operan en una tubería de gráficos, existen cuellos de botella regulares debido a las operaciones que ocurren en cada etapa. "Estado" se refiere a recursos que se interpretan por el programa de sombreador. En cualquier caso dado, la tubería de gráficos contiene una tremenda cantidad de estado dinámico (que presenta estado, sombreadores, variables constantes de sombreador, uniones de recurso/memoria, etc.). Diferentes combinaciones de estado permiten varios materiales simulados y efectos visuales. Un componente de este estado es un grupo de constantes de sombreador que necesitan unirse a la GPU antes de ejecutar un programa de sombreador. Debido a que el hardware utilizado para implementar la tubería de gráficos sólo puede estar en una configuración en cualquier caso dado, es deseable reducir el estado de configuración gastado de tiempo (por ejemplo, constantes de sombreador) y emitir comandos a la GPU. Algunos sombreadores utilizan memorias intermedias constantes (como opuesto a registros constantes) que soportan grupos o agregados de constantes de sombreador. Las memorias intermedias constantes pueden permitir a las constantes de sombreador establecerse para la GPU más rápidamente ya que los agregados de constantes de sombreador se agrupan juntos. Sin importar estos avances, será deseable manejar eficientemente estado para evitar evaluación redundante en modificación de estado de dispositivo. Por ejemplo, será deseable proporcionar técnicas para distribuir eficientemente memorias intermedias constantes (u otros recursos) utilizados en diferentes sombreadores para establecer más eficientemente estado a la GPU.
BREVE DESCRIPCION DE LA INVENCiON Se proporcionan técnicas para reconfigurar un árbol de dependencia que comprende número de recursos. El árbol de dependencia mantiene un rastro de las relaciones o dependencias entre diferentes recursos de sombreador. Cada recurso específico se une a una ranura de un objeto padre en el árbol de dependencia. De acuerdo con estas técnicas, cada una de las dependencias en el árbol de dependencias de escanea, y un costo asociado con cada reconfiguración diferente (redelinear o reconstruir los sombreadores) del árbol de dependencia se calcula. Cada reconfiguración del árbol de dependencia cambia las ranuras particulares a las que se unen ciertos recursos (CBs). La reconfiguración particular del árbol de dependencia entonces puede seleccionarse y reduce o minimiza la cantidad de reconfiguración de dispositivo para transición entre estados de nivel superior. En otras palabras, la reconfiguración particular del árbol de dependencia que minimiza el número de ranuras que necesitarán reunirse con el fin de transiciones/cambio entre sombreadores actualmente cargados entonces puede seleccionarse. En una implementación, estas técnicas puede realizarse para generación de contenido fuera de línea y almacenamiento (por ejemplo, si el grupo de sombreador es conocido por adelantado de tiempo, los sombreadores se analizan, se redelinean las dependencias, y entonces se guardan en el disco los sombreadores). En una implementación alternativa, el método se realiza dinámicamente en tiempo de funcionamiento de aplicación/tiempo de carga (por ejemplo, si el grupo de sombreador no se conoce por adelantado al tiempo). Esta breve descripción se proporciona para introducir una selección de conceptos en una forma simplificada que además se describe más adelante en la descripción detallada. Esta breve descripción no pretende identificar características clave o características esenciales del tema reclamado, ni pretende utilizarse para limitar el alcance del tema reclamado.
BREVE DESCRIPCIÓN DE LOS DIBUJOS Los sistemas y métodos para uso en optimizar desempeño de una tubería de gráficos además se describen con referencia a los dibujos anexos en donde: la Figura 1 es un diagrama de bloques que representa un ambiente de red ilustrativo que tiene una variedad de dispositivos de cómputo en donde la presente invención puede implementarse; la Figura 2 es un diagrama de bloques que representa un dispositivo de cómputo no limitante ilustrativo en donde la presente invención puede implementarse; la Figura 3 muestra un sistema de gráficos ilustrativo que incluye subunidad de gráficos que incluye una unidad de procesamiento de gráficos (GPU) y la configuración de hardware ilustrativa para la tubería de gráficos asociada; la Figura 4 es un diagrama de bloques que representa una modalidad ilustrativa, no limitante de los componentes de hardware y software de un núcleo de sombreador común; la Figura 5A ilustra un diagrama de bloques no limitante ilustrativo de un árbol de dependencia; la Figura 5B es un diagrama de bloques no limitante ilustrativo que muestra la distribución de un número de memorias intermedias constantes a un número de diferentes programas de sombreador en una tubería de gráficos no limitante ilustrativa; la Figura 6 ilustra un diagrama de flujo no limitante ilustrativo para unir óptimamente recursos a ranuras particulares asociadas con sombreadores en una tubería de gráficos; la Figura 7 ilustra un diagrama de flujo no limitante ilustrativo para calcular asociaciones de recurso/ranura comunes; la Figura 8 ilustra un diagrama de flujo no limitante ilustrativo para determinar uniones de recurso/ranura; y la Figura 9 ilustra un diagrama de flujo no limitante ilustrativo para calcular un costo para unir cada recurso a la primera ranura.
DESCRIPCION DETALLADA La siguiente descripción detallada simplemente es ilustrativa naturaleza y no pretende limitar la invención a la aplicación y usos de la invención. Como se utiliza aquí, la palabra "ilustrativo" significa "que sirve como un ejemplo, caso, o ilustración". Cualquier implementación aquí descrita como "ilustrativa" no necesariamente debe interpretarse como preferida o ventajosa en otras implementaciones. Todas las implementaciones descritas más adelante son implementaciones ilustrativas proporcionadas para permitir a los expertos en la técnica hacer o utilizar la invención y no pretende limitar el alcance de la invención que se define por las rei indicaciones. Además, no hay intención de unirse por cualquier teoría expresa o implicada presentada en los antecedentes precedentes, breve descripción de la invención o la siguiente descripción detallada.
Terminología Como se utiliza aquí, el término "sombreador" ("shader", un procedimiento de sombreado e iluminación) puede utilizarse para hacer referencia genéricamente a la subunidad de hardware de la GPU que realiza el sombreado o para hacer referencia al grupo de instrucciones o señales descargadas a la GPU que se cargan subsecuentemente en memoria, por ejemplo, almacenamiento de registro, utilizado por el sombreador (hardware) para realizar el sombreado. El término "sombreador" también puede hacer referencia a ambos que trabajan juntos. Cuando el término "subunidad" también se utiliza en conexión con el término "sombreador", el término "sombreador" debe interpretarse para hacer referencia a la subunidad de la GPU que realiza el procesamiento asociado con el sombreado. El término "programa de sombreador" generalmente puede hacer referencia a programas o procedimientos de computadora, que reciben y corren en la tubería de gráficos, que pude utilizarse para ayudar a determinar/definir las propiedades de superficie en pantalla finales de una imagen u objeto en un ambiente en pantalla 3D. Los "Sombreadores" puede realizar billones de cálculos por segundo con el fin de realizar sus tareas específicas. Como se utiliza aquí, el término "recursos" puede hacer referencia a entradas utilizadas por un programa de sombreador y puede abarcar, por ejemplo, texturas, muestras, memorias intermedias constantes, o cualquier otro recurso utilizado por programas de sombreador. Como se utiliza aquí, el término "constante de sombreador" puede hacer referencia a diferentes parámetros o variables que se alimentan en un programa de sombreador que permite al programa de sombreador producir diferentes resultados basándose en las constantes de sombreador particulares que se utilizan. Los programas de sombreador pueden recibir una escala de diferentes valores para cada constante de sombreador. Las variables de constantes de sombreador no cambian valores durante la invocación de ese sombreador.
Vista General Se proporcionan técnicas para rastrear patrones de uso de tiempo de funcionamiento de constantes de sombreador, y entonces generar datos de patrón de uso con respecto a patrones de uso de constantes de sombreador. Estos datos de patrón de uso entonces pueden alimentarse en un algoritmo de optimización para presentar eficientemente los datos para desempeño máximo dado cierta heurística. Factores considerados incluyen, por ejemplo, frecuencia de actualización de cliente de los valores, uso por ciertos sombreadores, y tamaño y número de las memorias intermedias resultantes.
Ambientes en Red y Distribuidos Ilustrativos Un experto en la técnica puede apreciar que la invención puede implementarse en conexión con cualquier computadora u otro dispositivo de cliente o servidor, que puede desplegase como parte de una red de computadora, o en un ambiente de cómputo distribuido. Con respecto a esto, la presente invención pertenece a cualquier sistema o ambiente de computadora que tiene cualquier número de memoria o unidades de almacenamiento, y cualquier número de aplicaciones y procedimientos que ocurren a través de cualquier número de unidades de almacenamiento o volúmenes, que pueden utilizarse en conexión con procedimientos para una implementacion no limitante de una tubería de gráficos, de acuerdo con la presente invención. La presente invención puede aplicar a un ambiente con computadoras de servidor y computadoras de cliente desplegadas en un ambiente de red o ambiente de cómputo distribuido, que tiene almacenamiento remoto o local. La presente invención también puede aplicarse a dispositivos de cómputo individuales, que tienen funcionalidad de lenguaje de programación, interpretación y capacidades de ejecución para generar, recibir y transmitir información en conexión con servicios remotos o locales. En un ambiente de juego, una tubería de gráficos es particularmente relevante para aquellos dispositivos de cómputo que operan en un ambiente de cómputo de red o distribuido, y de esa forma las técnicas de tubería de gráfico de acuerdo con la presente invención pueden aplicarse con mayor eficacia en aquellos ambientes.
El cómputo distribuido proporciona participación de recursos y servicios de computadora por intercambio entre dispositivos y sistemas de cómputo. Estos recursos y servicios incluyen el intercambio de información, almacenamiento de memoria cache y almacenamiento de disco para archivos. El cómputo distribuido toma ventaja de conectividad de red, permite a los clientes elevar su energía colectiva para beneficiar a la empresa completa. Con respecto a esto, una variedad de dispositivos puede tener aplicaciones, objetos o recursos que pueden implicar los procedimientos de tubería de gráficos de la invención. La Figura 1 proporciona un diagrama esquemático de un ambiente de cómputo en red o distribuido ilustrativo. El ambiente de cómputo distribuido comprende objetos de cómputo 10a, 10b, etc. y objetos o dispositivos de cómputo 110a, 110b, 110c, etc. Estos objetos pueden comprender programas, métodos, almacenamientos de datos, lógica programable, etc. Los objetos pueden comprender porciones de los mismos o diferentes dispositivos tal como PDAs, dispositivos de audio/video, reproductores de MP3, computadoras personales, etc. Cada objeto puede comunicarse con otro objeto a manera de la red de comunicaciones 14. Esta red puede comprender otros objetos de cómputo y dispositivos de cómputo que proporcionan servicios al sistema de la Figura 2A, y pueden representar múltiples redes interconectadas. De acuerdo con aspecto de la invención, cada objeto 10a, 10b, etc. o 110a, 110b, 110c, etc. puede contener un aplicación que puede hacer uso de una API, u otro objeto, software, firmware y/o hardware, para solicitar uso de los procedimientos de tubería de gráficos de acuerdo con la invención. También se puede apreciar que un objeto, tal como 110c, puede alojarse en otro dispositivo de cómputo 10a, 10b, etc. o 110a, 110b, etc. De esa forma, aunque el ambiente físico ilustrado puede mostrar los dispositivos conectados como computadoras, tal ilustración es simplemente ilustrativa y el ambiente físico alternativamente puede ilustrarse o describirse que comprende varios dispositivos digitales tal como de PDAs, televisiones, reproductores de MP3, etc., objetos de software, tal como interfases, objetos de COM y similares. Existe una variedad de sistemas, componentes, y configuraciones de red que soportan ambientes de cómputo distribuido. Por ejemplo, los sistemas de cómputo pueden conectarse juntos por sistemas por cable o inalámbricos, por redes locales o redes ampliamente distribuidas. Actualmente, muchas de las redes se acoplan a Internet, lo que proporciona una infraestructura para cómputo ampliamente distribuido y abarca muchas redes diferentes. Cualquiera de las infraestructuras puede utilizarse para comunicaciones ilustrativas hechas incidentes para una tubería de gráficos de acuerdo con la presente invención. En ambientes en red de hogares, existen al menos cuatro medios de transporte de red separados que cada uno soporta un protocolo único, tal como línea de energía, datos (tanto inalámbricos como por cable), voz (por ejemplo, teléfono) y medios de entretenimiento. La mayoría de los dispositivos de control de hogar tal como interruptores de luz y electrodomésticos pueden utilizar líneas de energía para conectividad . Los servicios de datos pueden ingresar al hogar como banda ancha (por ejemplo, módem DSL o por cable) y son accesibles dentro del hogar al utilizar conectividad inalámbrica (por ejemplo, Hogar RF u 802. 1 B) o por cable (por ejemplo, Home PNA, Cat 5, Ethernet, incluso línea de energía). El tráfico de voz puede ingresar al hogar ya sea por cable (por ejemplo, Cat 3) o inalámbrico (por ejemplo, teléfonos celulares) y puede distribuirse dentro del hogar al utilizar cableado de Cat 3. Los medios de entretenimiento, u otros datos gráficos, pueden ingresar al hogar ya sea a través de satélite o cable y típicamente se distribuye en el hogar al utilizar cable coaxial. IEEE 1394 y DVI también son interconexiones digitales para grupos dispositivos de medios. Todos estos ambientes de red y otros pueden surgir como estándares de protocolo que pueden interconectarse para formar una red, tal como intranet, que puede conectarse al mundo exterior a manera de Internet. En resumen, una variedad de fuentes separadas existe para el almacenamiento y transmisión de datos, y en consecuencia, se mueven hacia adelante, dispositivos de cómputo requerirán formas de compartir datos, tal como datos accedidos o utilizados incidentes para objetos de programa, que hacen uso de tubería de gráficos de acuerdo con la presente invención. El Internet comúnmente se refiere a la colección de redes y accesos que utilizan el grupo de protocolos TCP/IP, que son bien conocidos en la técnica de red de computadora. TCP/IP es un acrónimo para "Protocolo de Control de Transmisión/Protocolo de Internet". El Internet puede describirse como un sistema de redes de computadoras geográficamente distribuidas ¡nterconectadas por computadoras que ejecutan protocolos de red que permiten a los usuarios interactuar y compartir información en la red(es). Debido a tal participación de información distribuida, las redes remotas tal como Internet de esa forma generalmente evolucionaron en un sistema abierto para el cual los desabolladores pueden diseñar aplicaciones de software para realizar operaciones o servicios especializados, esencialmente sin restricción. De esa forma, la infraestructura de red permite a un huésped de topologías de red tal como cliente/servidor, par a par, o arquitecturas híbridas. El "cliente" es un miembro de una clase o grupo que utiliza los servicios de otra clase o grupo al cual no se relaciona. De esa forma, en cómputo, un cliente es un procedimiento, es decir, aproximadamente un grupo de instrucciones o tareas, que solicita un servicio proporcionado por otro programa. El procedimiento de cliente utiliza el servicio solicitado sin tener que "conocer" cualquiera de los detalles de trabajo sobre el otro programa o el mismo servicio. En una arquitectura de cliente/servidor, particularmente un sistema en red, un cliente usualmente es una computadora que acceda recursos de red compartidos proporcionados por otra computadora, por ejemplo, un servidor. En el ejemplo de la Figura 1, las computadoras 110a, 110b, etc. pueden pensarse como clientes y computadoras 10a, 10b, etc. pueden pensarse como el servidor en donde servidor 10a, 10b, etc. mantiene los datos que entonces se replican en las computadoras de cliente 110a, 110b, etc., aunque cualquier computadora puede considerarse un cliente, un servidor, o ambos, dependiendo de las circunstancias. Cualquiera de estos dispositivos de cómputo puede ser procesamiento de datos o solicitud de servicios o tareas que puede implicar las técnicas de programación de gráficos especificas para una implementación de la tubería de gráficos en la invención. Un servidor típicamente es un sistema de computadora remota accesible en una red remota o local, tal como Internet. El procedimiento de cliente puede ser activo en un primer sistema de computadora, y el procedimiento de servidor puede ser activo en un segundo sistema de computadora, que se comunica con otro en un medio de comunicaciones, lo que de esa forma proporciona funcionalidad distribuida y permite a múltiples clientes tomar ventaja de las capacidades de reunión de información del servidor. Cualquiera de los objetos de software utilizados que siguen las técnicas de programación de gráficos de la tubería de gráficos puede distribuirse a través de múltiples dispositivos u objetos de cómputo. Cliente(s) y servidor(es) se comunican entre sí al utilizar la funcionalidad proporcionada por capa(s) de protocolo. Por ejemplo, el Protocolos de transferencia de hipertexto (HTTP) es un protocolo común que se utiliza en conjunto con la Gran Red Mundial (World Wide Web, WWW), o "la Web". Típicamente, una dirección de red de computadora tal como una dirección de Protocolo de Internet (IP) u otra referencia tal como un Localizador de Recurso Universal (URL) puede utilizarse para identificar las computadoras de servidor o cliente entre sí. La dirección de red puede denominarse como una dirección de URL. De La comunicación puede proporcionarse en un medio de comunicaciones, por ejemplo, cliente(s) y servidor(es) pueden acoplarse entre sí a través de conexión(es) de TCP/IP para comunicación de alta capacidad. De esa forma, la Figura 1 ilustra un ambiente en red o distribuido ilustrativo, con un servidor en comunicación con computadoras de cliente a través de una red/conductor común, en donde puede emplearse la presente invención. Con mayor detalle, un número de servidores 10a, 10b, etc., se interconectan a través de una red/conductor común de comunicaciones 14, que puede ser una LAN, WAN, intranet, Internet, etc., con un número de dispositivos de cómputo de cliente o remotos 110a, 110b, 110c, 110d , 110e, etc., tal como una computadora portátil, computadora móvil, cliente delgado, aparato en red, u otro dispositivo, tal como VCR, TV, horno, luz, calentador y similares de acuerdo con la presente invención. De esa forma se contempla que la presente invención puede aplicar a cualquier dispositivo de cómputo en conexión con el cual es deseable implementar una interfase de gráficos que emplea una tubería de gráficos de la invención. En un ambiente en red en donde la red/conductor común de comunicaciones 14 es Internet, por ejemplo, los servidores 10a, 10b, etc. pueden ser servidores de web con los cuales los clientes 110a, 110b, 110c, 110 d , 110e, etc. se comunican a través de cualquier número de protocolos conocidos tal como HTTP. Los servidores 10a, 10b, etc. también pueden servir como clientes 110a, 110b, 110c, 110 d , 110e, etc., como puede ser característico de un ambiente de cómputo distribuido. Las comunicaciones pueden ser por cable o inalámbricas, en donde sea apropiado. Los dispositivos de cliente 110a, 110b, 110c, 110d , 110e, etc. pueden o no comunicarse a través de red/conductor común de comunicaciones 14, y pueden tener comunicaciones independientes asociadas con estos. Por ejemplo, en el caso de una TV o VCR, puede o no haber un aspecto en red para el control del mismo. Cada computadora de cliente 110a, 110b, 110c, 110d, 110e, etc. y computadora de servidor 10a, 10b, etc. puede equiparse con varios módulos objetos de programa de aplicación 135 y con conexiones o acceso a varios tipos de elementos u objetos de almacenamiento, a través de los cuales los archivos o corrientes de datos pueden almacenarse o a los cuales la porción(es) de archivos o corrientes de datos pueden descargarse, transmitirse, o migrar. Cualquiera de una o más computadora 10a, 10b, 110a, 110b, etc. puede ser responsable del mantenimiento y actualización de una base de datos 20 u otro elemento de almacenamiento, tal como una base de datos o memoria 20 para almacenar datos procesados de acuerdo con la invención. De esa forma, la presente invención puede utilizarse en un ambiente en red de computadora que tiene computadoras de cliente 110a, 110b, etc. que pueden acceder e interactuar con una red/conductor común de computadora 14 y computadoras de servidor 10a, 10b, etc. que puede interactuar con computadoras de cliente 110a, 110b, etc. y otros dispositivos similares, y bases de datos 20.
Dispositivo de Cómputo Ilustrativo La Figura 2 y la siguiente discusión se pretenden para proporcionar una breve descripción general de un ambiente de cómputo adecuado en conexión con el cual puede implementarse la invención. Sin embargo, se debe entender, que dispositivos móviles, portátiles y otros de cómputo y objetos de cómputo de todas clases se contemplan para uso en conexión con la presente invención, es decir, en cualquier lugar en donde una GPU existe en un ambiente de cómputo. Mientras una computadora de propósito general se describe más adelante, este es sólo ejemplo, y la presente invención puede implementarse con un cliente delgado que tiene interoperabilidad e interacción de red/conductor común. De esa forma, la presente invención puede implementarse en un ambiente de servicios alojados en red en donde se implican muy pocos o mínimos recursos de cliente, por ejemplo, un ambiente en red en donde el dispositivo de cliente sirve simplemente como una ¡nterfase para la red/conductor común, tal como un objeto colocado en un aparato. En resumen, en cualquier lugar que los datos pueden almacenarse o de los cuales los datos pueden recuperarse o transmitirse a otra computadora es un ambiente deseable, o adecuado, para operación de la técnica de optimización de gráficos de acuerdo con la invención.
Aunque no se requiere, la invención puede implementarse a través de un sistema operativo, para uso por un desarrollador de servicios para un dispositivo u objeto, y/o incluirse dentro de software de aplicación que opera en conexión con las técnicas de programación de gráficos para una tubería de gráficos en invención. El software puede describirse en el contexto general de instrucciones ejecutables por computadora, tal como módulos de programa, que se ejecutan por una o más computadoras, tal como estaciones de trabajo de cliente, servidores u otros dispositivos. Generalmente, los módulos de programa incluyen rutinas, programas, objetos, componentes, estructuras de datos y similares que realizan tareas particulares o implementan tipos de datos abstractos particulares. Típicamente, la funcionalidad de los módulos de programa puede combinarse o distribuirse como se desee en varias modalidades. Además, aquellos expertos en la técnica apreciaran que la invención puede practicarse con otras configuraciones y protocolos de sistema de computadora. Otros sistemas de cómputo bien conocidos, ambientes, y/o configuraciones que pueden ser adecuados para uso con invención incluyen, pero no se limitan a, computadoras personales (PCs), máquinas de contador automatizado, computadoras de servidor, dispositivos móviles o portátiles, sistemas de multiprocesador, sistemas a base de microprocesador, electrónica de consumidor programable, PCs de red, aparatos, luces, elementos de control ambiental, minicomputadoras, macro computadoras y similares. La invención también puede practicarse en ambientes de cómputo distribuidos en donde las tareas se realizan por dispositivos de procesamiento remoto que se enlazan a través de una red/conductor común de comunicaciones u otro medio de transmisión de datos. En un ambiente de cómputo distribuido, los módulos de programa pueden localizarse tanto en medios de almacenamiento de computadora locales y remotos que incluyen dispositivos de almacenamiento de memoria, y nodos de cliente a su vez pueden comportarse como nodos de servidor. La Figura 2 de esa forma ilustra un ejemplo de un ambiente de sistema de cómputo adecuado 100 en donde la invención puede implementarse, aunque como se aclaró anteriormente, el ambiente de sistema de cómputo 100 sólo es un ejemplo de un ambiente de cómputo adecuado y no pretende sugerir ninguna limitación al alcance de uso o funcionalidad de la invención. El ambiente de cómputo 100 tampoco debe interpretarse como teniendo ninguna dependencia o requerimiento que se relaciona con cualquiera o combinación de componentes ilustrados en el ambiente operativo ilustrativo 100. Con referencia a la Figura 2, un sistema ilustrativo para ¡mplementar la invención incluye un dispositivo de cómputo de propósito general en la forma de una computadora 110. Los componentes de computadora 110 pueden incluir, pero no se limitan a, una unidad de procesamiento 120, una memoria de sistema 130, y un conductor común de sistema 121 que acopla varios componentes de sistema que incluyen la memoria de sistema a la unidad de procesamiento 120. El conductor común de sistema 121 puede ser cualquiera de varios tipos de estructuras de conductor común que incluyen un conductor común de memoria o controlador de memoria, un conductor común periférico, y un conductor común local que utiliza cualquiera de una variedad de arquitecturas de conductor común. A manera de ejemplo, y no de limitación, tales arquitecturas incluyen conductor común de Arquitectura estándar de industria (ISA), conductor común de Arquitectura de micro canal (MCA), conductor común de ISA mejorado (EISA), conductor común local de Asociación de estándares de electrónica de video (VESA), y conductor común de Interconexión de componente periférico (PCI) (también conocido como conductor común de Mezzanine). La computadora 110 típicamente incluye una variedad de medios legibles por computadora. Los medios legibles por computadora puede ser cualquier medio disponible que pueda accederse por la computadora 110 e incluye tanto medios volátiles como no volátiles, medios removibles y no removibles. A manera de ejemplo, y no de limitación, los medios legibles por computadora pueden comprender medios de almacenamiento por computadora y medios de comunicación. Los medios de almacenamiento por computadora incluyen tanto medios volátiles como no volátiles, removibles y no removibles implementados en cualquier método o tecnología para almacenamiento de información tal con instrucciones legibles por computadora, estructuras de datos, módulos de programa u otros datos. Los medios de almacenamiento por computadora incluyen, pero no se limitan a, RAM, ROM, EEPROM, memoria flash otra tecnología de memoria, CDROM, discos versátiles digitales (DVD) u otro almacenamiento de disco óptico, casetes magnéticos, cinta magnética, almacenamiento de disco magnético u otros dispositivos de almacenamiento magnético, o cualquier otro medio que puede utilizarse para almacenar la información deseada y que pueda accederse por la computadora 110. Los medios de comunicación típicamente representan instrucciones legibles por computadora, estructuras de datos, módulos de programa u otros datos en una señal de datos modulada tal como una onda portadora u otro mecanismo de transporte e incluye cualquier medio de entrega de información. El término "señal de datos modulada" significa una señal que tiene una o más de sus características establecidas o cambiadas de tal forma para codificar información en la señal. A manera de ejemplo, y no de limitación, los medios de comunicación incluyen medios por cable tal como una red por cable o conexión por cable directa, y medios inalámbricos tal como medios acústicos, RF, infrarrojos y otros inalámbricos. Combinaciones de cualquiera de los anteriores también deben incluirse dentro del alcance de medios legibles por computadora. La memoria de sistema 130 incluye medios de almacenamiento por computadora en la forma de memoria volátil y/o no volátil tal como memoria de sólo lectura (ROM) 131 y memoria de acceso aleatorio (RAM) 132. Un sistema de entrada/salida básico 133 (BIOS), que contiene las rutinas básicas que ayudan a transferir información entre elementos dentro de la computadora 110, tal como durante la arranque, típicamente se almacena en ROM 131. La RAM 132 típicamente contiene datos y/o módulos de programa que son inmediatamente de y/o actualmente están siendo operados por la unidad de procesamiento 120. A manera de ejemplo, y no de limitación, la Figura 2 ilustra sistema operativo 134, programas de aplicación 135, otros módulos de programa 136, y datos de programa 137. La computadora 110 también puede incluir otros medios de almacenamiento por computadora removibles/no removibles, volátiles/no volátiles. A manera de ejemplo solamente, la Figura 2 ilustra una unidad de disco duro 141 que lee de o escribe a medios magnéticos no removibles, no volátiles, una unidad de disco magnético 151 que lee de o escribe a un disco magnético removible, no removible 152, y una unidad de disco óptico 155 que lee de o escribe a un disco óptico removible, no volátil 156, tal como un CD-ROM u otros medios ópticos. Otros medios de almacenamiento por computadora removibles/no removibles, volátiles/no volátiles que pueden utilizarse en el ambiente operativo ilustrativo incluyen, pero no se limitan a, casetes de cinta magnética, tarjeta de de memoria flash, discos versátiles digitales, cinta de video digital, RAM de estado sólido, ROM de estado sólido y similares. La unidad de disco duro 141 típicamente se conecta al conductor común de sistema 121 a través de una interfase de memoria no removible tal como interfase 140, y unidad de disco magnético 151 y unidad de disco óptico 155 típicamente se conectan al conductor común de sistema 121 por una interfase de memoria removible, tal como interfase 150. Las unidades y sus medios de almacenamiento por computadora asociados discutidos anteriormente e ilustrados en la Figura 2 proporcionan almacenamiento de instrucciones legibles por computadora, estructuras de datos, módulos de programa y otros datos para la computadora 110. En la Figura 2, por ejemplo, la unidad de disco duro 141 se ilustra como almacenando el sistema operativo 144, programas de aplicación 145, otros módulos de programa 146 y datos de programa 147. Se debe notar que estos componentes pueden ser los mismos que o diferentes al sistema operativo 134, programas de aplicación 135, otros módulos de programa 136 y datos de programa 137. El sistema operativo 144, programas de aplicación 145, otros módulos de programa 146 y datos de programa 147 aquí se les proporcionan números diferentes para ¡lustrar que, en un mínimo, son copias diferentes. Un usuario puede ingresar comandos e información en la computadora 110 a través de dispositivos de entrada tal como un teclado 162 y dispositivo de señalamiento 161, comúnmente denominado como un ratón, seguíbola o almohadilla sensible al tacto. Otros dispositivos de entrada (no mostrados) pueden incluir un micrófono, palanca de mandos, almohadilla de juegos, antena parabólica, escáner, o similares. Estos y otros dispositivos de entrada frecuentemente se conectan a la unidad de procesamiento 120 a través de un interfase de entrada de usuario 160 que se acopla al conductor común de sistema 121, pero puede conectarse por otra interfase y estructuras de conductor común, tal como un puerto paralelo, puerto de juegos o un conductor común en serie universal (USB). Una interfase de gráficos 182, tal como Northbridge, también puede conectarse al conductor común de sistema 121. Northbridge es un conjunto de chips que se comunican con la CPU, o unidad de procesamiento de huésped 120, y asume responsabilidad de las comunicaciones de puerto de gráficos acelerados (AGP). Una o más unidades de procesamiento de gráficos (GPUs) 184 puede comunicarse con interfase de gráficos 182. Con respecto a esto, GPUs 182 generalmente incluyen almacenamiento de memoria en chip, tal como almacenamiento de registro y GPUs 184 se comunican con una memoria de video 186, en donde las variables de aplicación de la invención pueden tener impacto. Las GPUs 184, sin embargo, son sólo un ejemplo de un co-procesador y de esa forma de puede incluirse una variedad de dispositivos de co-procesamiento en la computadora 110, y puede incluir una variedad de sombreadores de procedimiento, tal como sombreadores de píxel y vértice. Un monitor 191 u otro tipo de dispositivo de presentación también se conecta al conductor común de sistema 121 a través de una interfase, tal como una interfase de video 190, que puede a su vez comunicarse con la memoria de video 186. Además del monitor 191, las computadoras también pueden incluir otros dispositivos de salida periféricos tal como bocinas 197 e impresoras 196, que pueden conectarse a través de una interfase periférica de salida 195.
La computadora 110 puede operar en un ambiente en red o distribuido que utiliza conexiones lógicas a una o más computadoras remotas tal como una computadora remota 180. La computadora remota 180 puede ser una computadora personal, un servidor, un enrutador, una PC de red, un dispositivo par u otro nodo de red común, y típicamente incluye muchos o todos los elementos descritos anteriormente relativos a la computadora 110, aunque sólo se ilustra un dispositivo de almacenamiento de memoria 181 en la Figura 2. Las conexiones lógicas ilustradas en la Figura 2 incluyen una red de área local (LAN) 171 y una red de área ancha (WAN) 173, pero también pueden incluir otras redes/conductores comunes. Tales ambientes en red comúnmente están ubicados en hogares, oficinas, redes de computadora extendidas en empresa, intranets e Internet. Cuando se utiliza en un ambiente en red de LAN, la computadora 110 se conecta a la LAN 171 a través de una interfase de red o adaptador 170. Cuando se utiliza en un ambiente en red de WAN, la computadora 110 típicamente incluye un módem 172 u otro medio para establecer comunicaciones en la WAN 173, tal como Internet. El módem 172, que puede ser interno o externo, puede conectarse al conductor común de sistema 121 a través de la interfase de entrada de usuario 160, u otro mecanismo apropiado. En un ambiente en red, los módulos de programa ilustrados relativos a la computadora 110, o porciones de la misma, pueden almacenarse en el dispositivo de almacenamiento de memoria remota. A manera de ejemplo, y no de limitación, la Figura 2 ilustra programas de aplicación remotos 185 como residentes en un dispositivo de memoria 181. Se apreciará que las conexiones en red mostradas son ilustrativas y pueden utilizarse otros medios para establecer un enlace de comunicaciones entre las computadoras.
Estructuras o Arquitecturas de Cómputo Distribuido lustirativas Varias estructuras de cómputo distribuidas se hicieron o se están desarrollando en vista de la convergencia de cómputo personal e Internet. Los individuos y usuarios de negocio similares se proveen con interfase uniformemente interoperable y habilitada por web para aplicaciones y dispositivos de cómputo, lo que hace correr a las actividades de cómputo crecientemente orientadas a navegador web.
Por ejemplo, la plataforma de código manejado por MICROSOFT®, es decir, .NET, incluyen servidores, servicios de bloque de construcción, tal como almacenamiento de datos basado en y software de dispositivo descargable. Hablando generalmente, la plataforma de .NET proporciona (1) la capacidad de hacer la escala completa dispositivo de cómputo para trabajar juntos para tener información de usuario automáticamente actualizada y sincronizada en todos ellos, (2) capacidad interactiva aumentada para páginas web, habilitada para mayor uso de XML en lugar de HTML, (3) servicios en línea que caracterizan acceso y entrega adaptada de productos y servicios para el usuario desde un punto de partida central para el manejo de varias aplicaciones, tal como correo electrónico, por ejemplo, o software, tal como .NET de Office, (4) almacenamiento de datos centralizado, que aumenta la eficiencia y facilidad de acceso información, así como sincronización de información entre usuarios y dispositivos, (5) la capacidad de integrar varios medios de comunicaciones, tal como correo electrónico, faxes, y teléfonos, (6) para desabolladores, la capacidad de crear módulos reutilizables, con lo cual aumentar la productividad y reduce el número de errores de programación y (7) también muchos otros aspectos de plataforma cruzada e integración del lenguaje. Mientras algunas modalidades ilustrativas aquí descritas en conexión con software que reside en un dispositivo de cómputo, una o más porciones de la invención también pueden implementarse a través de un sistema operativo, interfase de programación de aplicación (API) o un objeto de "hombre en medio" un objeto de control, hardware, firmware, instrucciones u objetos de lenguaje intermedio, etc., para que los métodos pueden incluirse, soportarse o accederse a través de todos los lenguajes y servicios habilitados por código manejado, tal como código .NET, y en otras estructuras de cómputo distribuido también.
Componentes de un Sistema de Gráficos 3D Ilustrativo La Figura 3 muestra un sistema de gráficos ilustrativo 300 que incluye una su unidad de gráficos, tal como una tarjeta de video, que incluye una unidad de procesamiento de gráficos (GPU) 384' y una configuración de hardware ilustrativa para la tubería de gráficos asociada 384'-1. El Sistema de gráficos 3D ilustrativo 300 puede incluir, entre otras cosas, una Unidad de procesamiento central (CPU) 320 y una tarjeta de gráficos que incluye una Unidad de procesador de gráficos (GPU) 384' (algunas veces denominada la Unidad de procesamiento visual (VPU)) que incluye una tubería de gráficos 384'-1 (algunas veces denominada como la "tubería de presentación"). La GPU 384' puede acoplarse a la CPU 320 y RAM principal, por ejemplo, a través de AGP o conductor común Express de PCI. La CPU 320 generalmente puede ser cualquier procesador, tal como, un chip individual, núcleos múltiples de funcionamiento de procesador de núcleos múltiples (por ejemplo, procesadores), tal como un procesador de secuencia múltiple simultánea (SMT) que puede procesar o ejecutar varias secuencias (por ejemplo, una o más) al mismo tiempo. Como se utiliza aquí, el término "secuencia" se refiere a una secuencia individual de instrucciones. Como tal, secuencias múltiples simultáneas se refieren a la capacidad de un procesador individual de controlar varias secuencias al tiempo. Cada núcleo en la CPU 320 puede tener una unidad de Datos Múltiples de Instrucción Individual (SIMD) como una extensión para el grupo de instrucción de procesador. La extensión puede contener instrucciones especiales que ayudan a acelerar el entero y las aplicaciones intensivas de punto de flotación, cuando se codifica especialmente para tomar ventaja de estos grupos de instrucciones. Los cálculos involucrados en presentar gráficos 3D pueden ser matemáticamente intensivos y a su vez imponen impuestos en la CPU 320. Para aligerar la carga en la CPU 320, la GPU 384' se proporciona para ayudar a la computadora a correr más eficientemente. Antes que los gráficos se ingresen a un dispositivo de presentación de cuadricula (por ejemplo, un monitor de computadora 191), la información utilizada para generar esos gráficos va a través de la GPU '384 y su tubería de gráficos 384'-1. La GPU 384' incrementa la tubería de gráficos 384'-1 en hardware para realizar billones de cálculos de geometría por segundo. La GPU '384 es muy eficiente al manipular y presentar gráficos, y su estructura altamente paralela la hace más efectiva que las CPUs típicas para una escala de algoritmos complejos. La GPU '384 implementa un número de operaciones primitivas de gráficos en una forma que las hace correr mucho más rápido que extraerla directamente a la pantalla como en la CPU huésped 320. Elevar esta carga desde la CPU 320 significa que las CPU 320 de la computadora no tiene que trabajar tan duro para procesar datos de gráficos (por ejemplo, libera ciclos que pueden utilizarse para otros trabajos). Al eliminar la carga de la mayoría de las funciones de gráficos para la GPU '384, la CPU puede realizar incluso más cálculos con el fin de lograr un ambiente enfrascado, de tiempo real, de gráficos. La GPU '384 es responsable de acelerar la presentación de elementos gráficos (por ejemplo, un monitor de computadora). La GPU 384' procesa datos de geometría incompletos para finalmente representar esa información como píxeles en el monitor 191. La tubería de gráficos 384'- 1 recibe una representación de una escena 3D, eficientemente procesa esa representación al hacer correr la representación a través de un número de etapas de procesamiento, y presenta escenas 3D e imágenes de cuadrícula 2D en el monitor 191.
La GPU 384' puede im plementarse como uno o más microprocesadores individuales que se configuran para procesar gráficos 2D y 3D de tiempo real. La GPU 384' puede yacer en una tarjeta de gráficos separada (desde la tarjeta madre) para procesar desde los gráficos de computadora 2D y/o 3D y entonces presentar imágenes 2D o 3D. La GPU 384' puede acceder a VRAM de alto desempeño directamente en la tarjeta de gráficos. Alternativamente, la GPU 384' puede implementarse al integrarla en uno de los chips y una tarjeta madre de PC para que la GPU 384' puede utilizar la memoria principal como una memoria intermedia de marco y la CPU pueda ayudar en la presentación de marco. La GPU 384' puede utilizarse, por ejemplo, como un dispositivo de presentación de gráficos/video dedicado para una computadora personal o consola de juegos. En una presentación de gráficos 3D, la tubería de gráficos 384'-1 se refiere a las varias etapas de procesamiento (por ejemplo, la secuencia de pasos) que la GPU 384' lleva a cabo para transformar datos de imagen tridimensionales (por ejemplo, los vértices, texturas, y otros datos) desde una aplicación en una imagen real que se presenta en la pantalla bidimensional. Las propiedades proporcionadas por vértice pueden incluir, por ejemplo, coordenadas x-y-z, valores de RGB, traslucidez, textura, reflexión y otras características. Las diferentes etapas en la tubería de gráficos 384'-1 son responsables de procesar información que inicialmente se proporciona como propiedades en los puntos finales (vértices), o puntos de control de los primitivos geométricos, para generar la imagen que eventualmente se presenta. Como se utiliza aquí, el término "primitivo" puede hacer referencia a una colección de vértices que forman una entidad 3D individual. El primitivo más simple es una colección de puntos en un sistema de coordenadas 3D, que se llama una lista de punto. Los primitivos típicos en gráficos 3D son líneas y triángulos. Otros tipos de primitivos pueden incluir, por ejemplo, una línea, lista de línea, bandas de línea, un triángulo, listas de triángulo, bandas de triángulo, y ventiladores de triángulo. Frecuentemente, los primitivos 3D son polígonos. Un polígono es una Figura 3D cerrada delineada por al menos tres vértices. El polígono más simple es un triángulo. Se pueden utilizar triángulos para componer la mayoría de los polígonos ya que se garantiza que todos los vértices en un triángulo son coplanarios. Los triángulos pueden utilizarse para formar grandes polígonos y mallas complejas. Dentro de la tubería de gráficos 384'-1 de todas las etapas trabajan en paralelo. Al reconfigurar la tubería de gráficos 384'-1 se pueden lograr diferentes efectos visuales. Por ejemplo, la tubería de gráficos puede recibir la geometría para presentarse (por ejemplo, lista de triángulos), y entonces realizar las transformaciones geométricas necesarias en ella (por ejemplo, rotaciones, traslaciones etc.), calcular el color para la geometría para presentarse, y entonces presentar la geometría para presentarse.
Etapas de Tubería En general, la tubería de gráficos 384'-1 puede comprender las siguientes etapas lógicas: ensamblador de entrada (IA), sombreadores de vértice 384'-1a1 y 384'-1a2, un sombreador de geometría 384'-1a3 que tiene una salida de corriente asociada 384'-2, cuadrícula 384'-1c, un sombreador de píxel 384'-1a4, y el fusionador de salida (OM). La tubería de gráficos 384'-1 puede configurarse para optimizar el uso de recursos, balance de carga útil en la tubería de gráficos 384'-1, permitir acceso a información calculada es decir entero condescendiente con IEEE o valores de punto de flotación, y proporcionar capacidad de programación adicional. La modalidad no limitante ilustrativa de la tubería de gráficos 384'-1 emplea núcleo(s) de sombreador común dinámicamente configurable que comprende número de unidades o núcleos de procesamiento 384'-1a que puede configurarse en varias configuraciones. El núcleo de sombreador común permite optimización simplificada como unidades de hardware idénticas (para los diferentes sombreadores) proporciona balance de carga al reconf igurar, o deshabilitar un sombreador como parte de la tubería cuando no se necesita, lo que de esa forma liberar recursos para etapas que permanecen activas. Estos núcleos de procesamiento 384'-1a pueden leerse en memoria y escribirse en memoria en varios patrones dependiendo de la aplicación particular que se ejecuta. Dependiendo de esta configuración, cada una de las unidades 384'-1a puede utilizarse para realizar una etapa de sombreador de vértice, una etapa de sombreador de geometría y/o una etapa de sombreador de píxel. Esto permite a los núcleos de sombreador comunes programarse a diferentes etapas (o bloques funcionales) de la tubería de gráficos 384'-1 a demanda para distribuir sombreadores de píxel, sombreadores de geometría y sombreadores de vértice en una forma que se adecúa mejor para las tareas que se solicitan de la tubería 384'-1. Cualquier etapa puede habilitarse o des habilitarse dinámicamente, y configurarse o reconfigurarse, con lo cual libera y re-especializa recursos para etapas que están activas. Como tal, los recursos fundamentales del chip de gráficos pueden optimizarse para las tareas que se solicitan del chip de gráficos. La configuración particular de la tubería de gráficos 384'-1 mostrada en la Figura 3 incluye una pluralidad de núcleos programables compartidos o elementos de núcleo comunes 384'-1a, tal como sombreadores de vértice 384'-1ai y 384'-1a2, un sombreador de geometría 384'-1a3 que tiene una salida de corriente 384'-2 y un sombreador de píxel 384'-1a . Estas etapas funcionales diferentes operan en paralelo que sirven como procesadores de propósito especial separados. Dependiendo de su implementación particular, pueden existir etapas de tubería adicionales o menores a las mostradas en la Figura 3. Además, durante procesamiento de ciertos datos de vértice o primitivos, solamente algunas de las etapas de tubería mostradas realmente pueden procesar esos datos antes que se presente una salida en un monitor de computadora.
Ensamblador de Entrada (IA) La tubería de gráficos 384'-1 recibe datos primitivos entrantes y datos de vértices desde una aplicación y los pasa a través de las varias etapas de tubería antes que se presente una salida en un monitor de pantalla de computadora. El ensamblador de entrada (IA) introduce datos de vértice, tal como triángulos, líneas o puntos en la tubería de gráficos 384'-1 al jalar datos de geometría de recurso de las memorias intermedias de memoria de vértice y memorias intermedias de memoria de índice. La presentación "no ¡ndexada" o "indexada" puede utilizarse para producir direcciones de las cuales busca datos de vértice en memoria, y subsecuentemente ensambla los resultados en vértices y primitivos. La presentación "no indexada" se refiere al transversal secuencial de memoria(s) intermedia de vértice que contiene datos de vértice, que se originan en un balance de inicio en cada unión de memoria intermedia. Las memorias intermedias de memoria de vértice (no mostradas en la Figura 3) pueden recibir vértices de modelo no transformado desde una aplicación y almacenarlas como datos de vértice. Las memorias intermedias cada una se une a una ranura de entrada individual. El diseño de datos a través de toda las memorias intermedias se especifica por una declaración de entrada, en donde cada entrada define un "elemento" con una ranura de entrada, un balance de estructura, un tipo de datos, y un registro objetivo (para el primer sombreador activo en la tubería). Las memorias intermedias de memoria de vértice pueden contener cualquier tipo de vértice. Los datos de vértice pueden venir de múltiples memorias intermedias, accedidas en una forma de "Distribución de Estructuras" desde cada memoria intermedia. Una secuencia dada de vértice se construye de datos buscados desde memorias intermedias. Varias topologías primitivas están disponibles para hacer la secuencia de datos de vértice para representar una secuencia de primitivos. Topologías ilustrativas, por ejemplo, son lista de punto, lista de línea, lista de triángulo, banda de triángulo. Presentación "indexada" se refiere a la transversal secuencial de una memoria intermedia individual que contiene índices de entero de escalar, que se originan en un balance de inicio en la memoria intermedia. Los datos para procesarse por la tubería de gráficos 384'-1 también pueden asignarse a un índice. Las memorias intermedias de memoria de índice (no mostradas en la Figura 3) reciben datos primitivos geométricos incompletos, indexados desde una aplicación que incluye puntos, líneas, triángulos, y polígonos. Estos primitivos geométricos pueden referenciarse en los datos de vértice con memorias intermedias de memoria de índice. Cada índice indica en donde buscar datos de memoria(s) intermedia que contiene datos de vértice. Las memorias intermedias de memoria de índice contienen datos de índice, o índices, que son balances de entero en memorias intermedias de memoria de vértice y se utiliza para presentar primitivos que utilizan técnicas que extraen primitivos indexados de un grupo actual de corrientes de entrada de datos. Debido a que una memoria intermedia de índice contiene índices, una memoria intermedia de índice no puede utilizarse sin una memoria intermedia de vértice correspondiente. El indexado puede ser útil en un número de situaciones. Por ejemplo, un valor de índice puede utilizarse, por ejemplo, como parte de un esquema de dirección de memoria de video mientras procesa datos (por ejemplo, el índice puede significar en donde y cuando recuperar (y/o escribir) porciones de memoria de video para procesamiento). Los programas descargados al sombreador de esa forma pueden utilizar programáticamente los valores de índice asociados con los datos de gráficos mientras recuperan o escribe la memoria de video, y también mientras procesan datos de gráficos.
Etapa de Sombreador de Vértice El ensamblador de entrada (IA) envía datos al primer núcleo común 384'-1a . En esta modalidad, el primer núcleo común 384'-1ai se configura como una etapa de sombreador de vértice. La etapa de sombreador de vértice opera en o procesa corrientes de vértice (desde memoria de video de la tubería de gráficos) que se especifican para transformación algorítmica a través del programa del huésped. Entre otras cosas, un sombreador de vértice puede recibir una variedad de entradas tal como variables uniformes y atributos de vértice. Las variables uniformes son valores constantes para cada invocación de sombreador. En contraste, los atributos de vértice son datos por vértice (un caso especial de variables variantes) tal como posición de vértice. Los sombreadores de vértice generalmente operan en un vértice de entrada individual y producen un vértice de salida individual, en donde un "vértice" se refiere a un punto de intersección en espacio 3D usualmente definido por su ubicación que utiliza coordenadas x, y, y z. La etapa de sombreador de vértice puede permitir a cada vértice geométrico procesarse por un programa corto antes que se proyecte en la pantalla. Por ejemplo, la etapa de sombreador de vértice puede manipular una posición de objeto en espacio 3D al definir técnicas para calcular transformaciones de espacio de vector y otros cálculos que se pueden alinear. Por ejemplo, la etapa de sombreador de vértice puede aplicar cálculos de posiciones, coordenadas de colores y texturas a vértices individuales, y puede realizar operaciones tal como transformaciones, cubierta, e iluminación. Algunos ejemplos de funcionalidades de sombreador de vértice incluyen deformación de malla arbitraria y desplazamientos de vértice en general, atributos alineables de cómputo para sombreadores de vértice posteriores tal como transformaciones de coordenadas de textura.
Etapa de Mosaico Los datos entonces pueden enviarse a un mosaico 384'-1b, que realiza división en mosaico en los datos. Se apreciará por aquellos expertos en la técnica que el paso de mosaicos opcional (como se indicó por el rectángulo de línea punteada) y en algunas implementaciones prácticas no ocurre del todo. La división en mosaico generalmente se refiere a un procedimiento que involucra cubrir una región geométrica unida sin espacios o traslapes por figuras planas congruentes de un tipo o pocos tipos. Siguiendo el mosaico 384'-1b, existe otro núcleo común en la tubería, que puede utilizarse para realizar pos sombreado de vértice de mosaico en los datos. Los pasos de mosaico, en esta modalidad, son opcionales.
Etapa de Sombreador de Geometría El segundo núcleo común se sigue por un tercer núcleo común que se configura como un sombreador de geometría, 384'-1a3. El sombreador de geometría 384'-1a3 permite primitivos de programación así como la generación de nueva geometría. El sombreador de geometría 384'-1a3 puede operar en diferentes tipos de entrada de "primitivos" que incluyen vértices/puntos, líneas (grupos de dos vértices), y triángulos (grupos de tres líneas), y genera nueva geometría dentro de la tubería basándose en los primitivos que se ingresan. Las entradas de sombreador de geometría son los vértices para un primitivo completo (dos vértices para líneas, tres vértices para triángulos, o vértice individual para punto) más los datos de vértice para los primitivos adyacentes de borde (dos vértices adicionales para una línea, tres adicionales para un triángulo). Por ejemplo, el sombreador de geometría 384'-1a3 puede recibir un primitivo y sacar cero, uno o múltiples primitivos. El sombreador de geometría 384'-1a3 puede sacar múltiples vértices que forman una topología seleccionada individual. Algunos ejemplos de la salida incluyen topología como una banda de triángulo, una banda de línea o una lista de punto. El número de primitivos emitidos puede variar dentro de cualquier invocación del sombreador de geometría 384'-1 a3. El sombreador de geometría 384'-1a3 puede tomar en un primitivo, y sacar múltiples primitivos, que opcionalmente procesan primitivos adyacentes, tal como vértices adyacentes. En otras palabras, el sombreador de geometría 384'-1a3 permite operaciones en el primitivo completo no sólo por sí mismo, sino también en el contexto de algunos vértices cercanos adicionales. Un segmento de línea en una polilínea, por ejemplo, puede procesarse con la capacidad de leer los vértices antes y después de ese segmento. Una aplicación de esta capacidad (por ejemplo, para procesar vértices a presentes de un primitivo) es que el sombreador de geometría 384'-1a3 es capaz de tomar información sobre puntos colindantes en espacio geométrico 3-D en cuenta en cálculos actuales.
Los algoritmos que puede implementarse en el sombreador de geometría 384'-1a3 pueden incluir: objeto en movimiento de punto o división en mosaico de línea amplia, generación de piel/aleta, generación de volumen de sombra, presentación de paso individual a múltiples caras de cubo de textura, y configurar coordenadas baricéntricas como datos primitivos (para que el sombreador de pixel pueda realizar interpolación de atributo de costumbre). Para realizar división de mosaico de objeto en movimiento de punto, el sombreador debe tomar un vértice individual y generar cuatro vértices, o dos triángulos de salida que representan cuatro esquinas de un cuadrilátero, mientras realiza división de mosaico de linea amplia, el sombreador recibe dos vértices de línea, y genera cuatro vértices para un cuadrilátero que representa una línea ensanchada. Ad icionalmente, el sombreador de geometría puede utilizar vértices de línea adyacentes, para realizar estrechamiento en los puntos de extremo de línea. El sombreador de geometría también puede utilizarse para generar piel o aletas, que no se limita a generación de piel o aleta, pero abarca cualquiera de los vértices adicionales agregados en una tercera dirección de una topología individual. Ejemplos incluyen cabello, escalas, pasto, etc., en donde los primitivos que describen una geometría se alimentan al ensombrecer de geometría, y el sombreador de geometría crece con la geometría arbitrariamente para complementar la forma. De esa forma, con cabello, por ejemplo, basado en entrada de triángulos al sombreador de geometría, el sombreador de geometría puede agregar pocos vértices que representan cabello en cada vértice. Ventajosamente, debido a que una corriente de triángulos para el sombreador de geometría incluye información sobre los vecinos de un vértice, la proximidad y propiedades (color, profundidad, etc.) de la geometría de los vecinos de vértice puede tomarse en cuenta durante procesamiento. Otro uso no limitante ilustrativo del sombreador de geometría incluye generación de volumen de sombra, en donde la información adyacente se utiliza para decidir si se extruye. Además, una aplicación puede desear generar alguna geometría, similar a una aleta o piel y extruir volúmenes de sombra fuera de éstos. En tales casos, la funcionalidad de paso múltiple del sombreador de geometría puede emplearse al utilizar la salida de capacidad de una corriente de datos y circularla de nuevo a través del uso de la salida de corriente. En esta modalidad no limitante ilustrativa, la salida de un sombreador de geometría 384'-1a3 va al cuadriculado 384'-1c para presentación y/o a una memoria intermedia través de salida de corriente (SO) 384'-2. "Encender" la salida de corriente (SO) 384'-2 no detiene las funciones del cuadriculado de la tubería de gráficos 384'-1; simplemente amplifica la energía de la tubería de gráficos 384'-1 al proporcionar más energía programática al desarrollados Salida de Corriente La salida de corriente (SO) 384'-2 sirve como una "Nave" en la tubería de gráficos 384'-1 que puede encenderse y apagarse cuando los datos continúan fluyendo hacia abajo al cuadriculado 384'-1c. La salida de corriente (SO) 384'-2 puede cerrarse en cualquier lugar dentro de la tubería de gráficos 384'-1 previo a los datos que alcanzan la memoria intermedia de marco para cuadriculado. Cuando la salida de corriente (SO) 384'-2 se apaga, la salida de corriente (SO) 384'-2 no tiene efecto en la tubería. En otras palabras, la salida de corriente (SO) es opcional; una aplicación simplemente puede permitir a la tubería enviar los datos a través sin leer los datos a una memoria intermedia de salida de corriente. Además, la memoria intermedia de salida de corriente es un ejemplo del tipo de memoria que puede utilizarse para almacenar los datos dirigidos. Algunas veces cuando diferentes tipos de memoria pueden utilizarse para tal funcionalidad, similar a memoria cache en un microprocesador. Cuando se enciende, la salida de corriente (SO) 384'-2 permite a los programadores "cerrar" la tubería mientras los datos están dentro de la tubería, y proporcionar los datos a otra ubicación. Por ejemplo, la salida de corriente (SO) 384'-2 puede dirigir primitivos a una o más memorias intermedias de salida para re-utilizarse en algún lugar en la tubería, lo que permite la aplicación de algoritmos programáticos recursivos dentro de la tubería. Los datos enviados a través de la salida de corriente (SO) 384'-2 pueden concatenarse a la memoria(s) intermedia. Los datos en la memoria(s) intermedia entonces pueden recircularse a la tubería de gráficos 384'-1 que ingresa en pasos subsecuentes. Por ejemplo, los datos recibidos en la salida de corriente (SO) 384'-2 pueden escribirse a una memoria intermedia o memoria para recuperación por el huésped u otra operación. Alternativamente, los datos recibidos en la salida de corriente (SO) 384'-2 pueden recircularse (por ejemplo, retroalimentarse o alimentarse hacia adelante) a otra entidad dentro de la tubería, tal como, el ensamblador de entrada (IA), sombreadores de vértice 384'-1 a ! y 384'-1a2, sombreador de geometría de sitios 384'-1a3, o el sombreador de 384'-1a4 para realizar funcionalidad recursiva o de giro. La salida de corriente (O) 384'-2 puede permitir a los datos recircularse a otras partes de la tubería de gráficos 384'-1 programáticamente (por ejemplo, el programador puede descargar un programa a la GPU que realiza operaciones recursivas en los datos (recircula datos a través de los mismos algoritmos recursivamente) o de otra forma gira a través de los datos un número preciso de veces). Por ejemplo, la salida de corriente (SO) 384'-2 puede utilizarse para recircular los datos al mismo sombreador con lo cual permite que se realicen operaciones de paso múltiple en los datos dados. Esto puede permitir algoritmos recursivos y de giro programáticos en datos de gráficos. Otra forma de recircular datos es enviarlos a través de la tubería de nuevo al ingresar los datos al ensamblador de entrada (IA) de nuevo. Además, si es necesario, la información puede dirigirse fuera mientras los mismos datos van a la cuadrícula, lo que de esa forma no disminuye la velocidad de la presentación de datos, o permite la presentación de la imagen mientras se somete una transformación basándose en elementos algoritmos recursivos que operan en los datos .
Cuadrícula El siguiente componente de la tubería de gráficos 384'-1 es una cuadrícula 384'-1c. La cuadrícula 384'-1c no necesariamente es una etapa en la tubería de gráficos 384'- 1 , en lugar de esto es una inferíase entre varias etapas de tubería 3 84'-1. La cuadrícula 384'-1c asume posiciones de entrada que se proporcionan en espacio de sujetador y realiza un grupo significativo de operaciones de función fija que pueden incluir sujeción, divisiones perspectivas, puerta de vista o selección de tijera, configuración primitiva, y determinar cómo invocar al sombreador de píxel 384'-1a . Muchas de estas funciones pueden ajustarse por desabolladores de software.
Etapa de Sombreador de Píxel Siguiendo la cuadrícula está un cuarto núcleo común, 384'-1a4, y sus funciones como un sombreador de píxel en donde toma un píxel y saca el píxel en una posición. Un sombreador de píxel puede permitir a cada píxel procesarse por un programa corto que puede incluir, por ejemplo, texturas de imagen (o datos de textura) como entradas. Un sombreador de píxel puede permitir a los desabolladores manipular colores, texturas o incluso formas al alterar la iluminación, color y superficie en un nivel de pixel. Los sombreadores de pixel pueden utilizarse para alterar la iluminación, color y superficie de cada pixel. Esto a su vez afecta el color total, textura y forma de objetos 3-D construidos de estos pixeles. Los datos de entrada disponibles para el sombreador de pixel 384'-1a4 incluye atributos de vértice que pueden elegirse, en una base por elemento, para interpolarse con o sin corrección perspectiva, o tratarse como por guión primitivo constante. Las salidas generadas por el sombreador de pixel 384'-1a4 puede ser una o más de cuatro vectores de datos de entrada para la ubicación de pixel actual, o sin color (si se descarta el pixel). Una lista parcial de efectos que los sombreadores de pixel hacen posibles incluyen: reflexiones por pixel, iluminación por pixel que utiliza sombreado de estilo Phong o efectos DOT3, y texturas de procedimiento.
Fusionador de Salida En el fusionador de salida (OM), el paso final en la tubería de gráficos de lógica 384'-1, otras funciones de procesamiento de pixel pueden realizarse para presentar los pixeles finales. Estas funciones pueden incluir, por ejemplo, unión de recursos de salida (presentar objetivos), modificar valores de color de pixel con una prueba de tijera, determinación de visibilidad, inclinación de profundidad y/o técnicas de nombre intermedia de plantilla, o aplica funciones como una mezcla alfa o niebla, sombreado, delineado de incremento, delineado ambiental, alisador, escribir o mezclar salida(s) para presentar objetivo(s), que puede ser uno de muchos tipos de recurso, y texturas de elementos múltiples. Después de realizar estas funciones en los datos, los datos finalmente se procesan además y eventualmente se presentan en un monitor, 191.
Núcleo de Sombreador Común para Sombreadores en la Tubería La Figura 4 es un diagrama de bloques que representa una modalidad ilustrativa, no limitante de los componentes de hardware y software de un núcleo de sombreador común 384'-1a. El núcleo de sombreador común 384'-1a puede utilizarse, por ejemplo, para implementar cualquiera de los sombreadores de vértice 384'-1a1 y 384'-1a2, el sombreador de geometría 384'-1a3, o el sombreador de píxel 384'-1a4, mostrados anteriormente en la Figura 3. El núcleo de sombreador común 384'-1a recibe los datos de entrada de la unidad de ensamblador de entrada (IA), una etapa previa que puede ser de cualquier lugar en la tubería de gráficos 384'-1, o en algunos casos, de una fuente de entrada especializada.
Los datos de entrada entonces pueden almacenarse temporalmente en registro(s) de entrada 409. El registro(s) de entrada 409 puede ser, por ejemplo, una distribución dinámicamente indexable. En el caso de un sombreador de geometría, el registro(s) de entrada puede ser una distribución bidimensional (2D) que distribuye las entradas, por ejemplo, como pares [vértice] [elemento]. Los datos de entrada entonces se envían al código de sombreador 410. El código de sombreador 410 proporciona mecanismos de control de flujo, una unidad lógica aritmética (ALU) que controla punto de flotación de vector y aritmética de entero, operaciones de buscado o muestreado de memoria, y una función de sombreador o programa que especifica las transformaciones particulares para realizarse en los datos de entrada. El código de sombreador 410 también puede recibir un número de otras entradas o recursos, tal como, información de los muestrarios 413, las texturas 414 y las memorias intermedias constantes 415. El código de sombreador 410 también tiene dos formas de comunicación con los registros temporales 411 y la pila de dirección de regreso de subrutina 412. El código de sombreador 410 recibe muestras de los muestrarios 413 que definen como muestrear texturas. Sin embargo, la memoria también puede leerse de infiltrar y el muestrario no necesariamente está en toda modalidad. Debido a que los objetos de muestrario se crean estáticamente, permiten al hardware mantener referencia de muestrarios múltiples al momento de la tubería sin tener que rastrear cambios o flujo de la tubería (debido a que los objetos de muestrario mantienen sus definiciones y no se modifican). El código de sombreador 410 recibe información de textura de las texturas 414. Las texturas 414 trabajan con el código de sombreador para proporcionar muestreo de textura. La CPU genera constantes de sombreador que pueden utilizarse para reconfigurar un programa de sombreador particular. El código de sombreador 410 recibe constantes de sombreador de las memorias intermedias constantes 415. Las memorias intermedias constantes 415 se proporcionan para agregar o agrupar ciertas variables (o "constantes de sombreador") en memoria en la GPU. En otras palabras, en lugar de utilizar un orden de registros constantes (c0...cN) para almacenar valores de entrada constantes, las memorias intermedias constantes 415 pueden utilizarse para agrupar valores de constante de sombreador numérico juntas. Las memorias intermedias constantes se optimizan para acceso de latencia inferior y actualizaciones más frecuentes que las texturas 414. Las memorias intermedias constantes 415 pueden permitir a un desarrollador establecer un grupo particular de constantes todas al mismo tiempo. Las constantes pueden distribuirse en cualquier orden particular que desee el desarrollador. La agrupación de constantes de sombreador en la memoria intermedia constante puede dar como resultado ciertos beneficios de desempeño. Por ejemplo, si dos constantes de sombreador típicamente se modifican y utilizan juntas al mismo tiempo (por ejemplo, que tienen el mismo estado en cada escenario), entonces aquellas constantes de sombreador pueden ingresarse en una memoria intermedia constante particular. Un programa de sombreador particular puede requerir cierto número de memorias intermedias constantes que se unen a ranuras específicas. En una implementación, para cada etapa en la tubería de gráficos, existen 15 ranuras para memorias intermedias constantes que pueden estar activas. El código de sombreador, un registro cb# es un soporte para una memoria intermedia constante en "ranuras" #. Una memoria intermedia constante se accede en un sombreador que utiliza: cb# [índice] como un operando para instrucciones de sombreador, en donde 'índice' puede ser no indexable (r#) o estéticamente ¡ndexado (x#) que contiene un entero no firmado de 32 bits, una constante de entero no firmado de 32 bits intermedios, una combinación de los dos agregados (por ejemplo, "mov rO, cb3[x3[0].x + 6]" representa Elemento 7 en movimiento de la Memoria intermedia constante asignada la ranura 3 en r 0 , que asume x3[0].x contiene 1). Las aplicaciones son capaces de escribir código de sombreador que lee constantes en cualquier patrón y cantidad deseada, mientras aún permite diferente hardware para fácilmente lograr el mejor desempeño posible. Los registros temporales 411 sirven como un almacenamiento temporal. En una modalidad ilustrativa, no limitante, los registros temporales 411 pueden soportar cualquiera de las distribuciones no indexables o indexables de cualquier tamaño y cantidad que se necesite hasta el límite del almacenamiento temporal. La pila de dirección de regreso de subrutina 412, en esta modalidad ilustrativa no limitante particular, es una altura fija. Además, la pila se oculta de acceso de sombreador directo y almacena transparentemente direcciones de regreso solamente. También permite la definición de algoritmos recursivos. Después que pasó el código a través del código de sombreador 410, los datos van a los registros de salida 520. Los registros de salida 520, en esta modalidad ilustrativa no limitante, se hacen de una distribución dinámicamente indexable de cuatro salidas de vector. Además, algunas etapas pueden tener salidas especializadas adicionales. Dependiendo de qué etapa se implementa en el núcleo de sombreador común 384'-1a en la tubería de gráficos 384'-1, los datos de salida entonces pueden sacarse a: la siguiente etapa de sombreador, si está presente; como una salida de corriente (SO) a la memoria u otra ubicación; o a un fusionador de salida (OM) o etapa de presentación. Las estructuras de datos enlistadas pueden cambiarse de una distribución 1D a una distribución 2D o una lista. Todas las estructuras de datos pueden cambiar dependiendo del tamaño y capacidades de almacenamiento de la GPU. Dentro de la GPU, los cambios a los límites de almacenamiento y alturas fijas pueden ocurrir debido a distribución dinámica, y aplicación de algoritmos de compresión a información para conservar espacio. Los muestrarios y memorias intermedias constantes pueden comportarse similar a las texturas, sin embargo ya que los recursos cambian, las definiciones de sus componentes pueden modificarse. Si las texturas se redefinen, tanto los muestrarios como las memorias intermedias constantes pueden cambiar y no se limitan sólo a las funciones de textura. Además, todas las estructuras de datos pueden ¡mplementar nuevos algoritmos de optimización para propósitos de velocidad y utilidad. Las varias modalidades aquí descritas son simples ejemplos de tubería de gráficos que utilizan núcleos comunes, que pueden configurarse dinámicamente para proporcionar funcionalidad de un sombreador de vértice, un sombreador de píxel y un sombreador de geometría. Como se anotó anteriormente, diferentes combinaciones de estado pueden permitir varios efectos visuales. Un sistema de manejo de estado en la tubería rastrea estado de dispositivo, y abstrae estado de dispositivo en "efectos" de alto nivel que se componen de múltiples elementos con interdependencias complejas. Efectos se definen como una serie de "técnicas", técnicas dependen de "pasos", pasos dependen de objetos de estado y sombreadores, y objetos de estado y sombreadores dependen de memorias intermedias constantes y texturas. Efectos requieren ciertos programas de sombreador para ejecutarse en grupos de constante específica con texturas específicas como entradas, unirse a ranuras de entrada específicas (también denominadas como puntos de entrada) en la tubería. El sistema de manejo de estado puede utilizar un "árbol de dependencia" para mantener el rastro de las relaciones o dependencias entre varios tipos de diferentes recursos de sombreador. Cada recurso específico (por ejemplo, una memoria intermedia constante, textura, muestrarios) se une a una ranura del objeto padre en el árbol de dependencia. En este contexto una "ranura" se refiere a una ranura en el árbol de dependencia para un sombreador particular. Cada sombreador tendrá diferentes dependencias y de esa forma árboles separados con ranuras independientes.
Figura 5A ilustra un diagrama de bloques no limitante ilustrativo de un árbol de dependencia que correspondiente a un archivo de efectos 530. La Figura 5A ilustra el concepto de un efecto 530 y dependencia del efecto 530 en un paso 520, objeto de estado 506, un sombreador 510, una textura 514 y una memoria intermedia constante 515. La memoria intermedia constante 515 recibe un número de constantes de sombreador 502, 504. La matriz de proyección de Vista Mundial 502 es una constante de sombreador que define cuatro constantes en una matriz que se utiliza para transformar de espacio mundial a espacio de pantalla. Esto se hace una vez por objeto. De esa forma, si existen 50 objetos en la pantalla, la matriz debe establecerse a 50 veces por escena. La luz V 504 es un vector de luz que especifica la luz de dirección de la que viene. Por ejemplo, la luz V 504 puede utilizarse para especificar la dirección del sol, y será constante para el marco completo. El sombreador 510 tiene un número de recursos asociados con éste. En este ejemplo particular, los recursos pueden incluir la memoria intermedia constante 515 y textura 0 514. Estos recursos se "consumen por" el sombreador 510. Aunque no se muestre en la Figura 5, además del sombreador A 510, existe un número de otros programas de sombreador (por ejemplo, Sombreador B, Sombreador C, Sombreador D, etc.) que corren en paralelo. Cada uno de estos programas de sombreador tendrá un grupo similar de dependencias. El paso 520 comprende la salida de estos sombreadores diferentes y estado A 506. El archivo de efectos 530 comprende paso 520.
Haciendo referencia de nuevo a la Figura 4, el núcleo de sombreador común 384'-1 también tiene un número de ranuras de entrada (no mostradas). Los recursos (constantes individuales, memorias intermedias constantes, texturas y muestrarios, etc.) utilizados por el sombreador 384'-1a pueden unirse a ranuras de entrada especificas del sombreador 384'-1a. En una implementación particular, un sombreador puede tener, por ejemplo, 128 ranuras de recurso de entrada asociadas con éste, 16 de ranuras de memoria intermedia constante diferentes asociadas con éste, y 16 de ranuras de muestrario asociadas con éste. Por ejemplo, un sombreador particular puede llenar las ranuras con 16 diferentes memorias intermedias constantes, 16 diferentes texturas, y 16 diferentes muestrarios. El orden en el cual se asignan los recursos particulares o unen a ranuras particulares de cada sombreador no necesariamente necesita seguir un patrón particular, y puede determinarse por el recopilador. El programa de sombreador hará algo diferente con cada uno de estos recursos particulares. Por ejemplo, el programa de sombreador puede aceptar una memoria intermedia constante de entrada 2, otro muestrario de entrada 0, y otra textura de entrada 5, etc. y entonces generar una salida particular dependiendo de estas entradas. La Figura 5B es un diagrama de bloques no limitante ilustrativo que muestra distribución de un número de memorias intermedias constantes 515A-515E en un número de diferentes programas de sombreador 584'-1 a A-N en una tubería de gráficos no limitante ilustrativa. Cada uno de los programas de sombreador 584'-1a A-N tiene un número de memorias intermedias constantes (CB1 515A... CB5 515E) distribuidas en diferentes órdenes en diferentes ranuras de entrada. Por ejemplo, el sombreador 584'-1a A puede colocar CB1 en la ranura 1, CB2 en la ranura 2, CB3 en la ranura 3, CB4 en la ranura 4, y CB5 en la ranura 5; el sombreador 584'-1a B puede colocar CB2 en la ranura 1, CB1 en la ranura 2, CB4 en la ranura 3, CB5 en la ranura 4, y CB3 en la ranura 5; el sombreador 584'-1a C puede colocar CB5 en la ranura 1, CB2 en la ranura 2, CB1 en la ranura 3, CB3 en la ranura 4, y CB4 en la ranura 5; y el sombreador 584'-1a N puede colocar CB3 en la ranura 1, CB2 en la ranura 2, CB5 en la ranura 3, CB4 en la ranura 4, y CB1 en la ranura 5. Para simplicidad de ilustración, el ejemplo proporcionado en las Figuras 5B muestra cuatro (4) programas de sombreador 584'-1a A-N, y cinco (5) posibles memorias intermedias constantes (CB1 515...CB5 515) asociados con cada uno de los sombreadores particulares 584'-1a A-N. Sin embargo, se apreciará que en la mayoría de las implementaciones prácticas de la tubería, pueden existir más sombreadores en la tubería, y cada uno de los sombreadores particulares 584'-1a A-N típicamente tendrá un mayor número (por ejemplo, de dieciséis o más) memorias intermedias constantes que las mostradas en la Figura 5. Por ejemplo, dependiendo de la complejidad de una aplicación particular, puede haber cientos de diferentes sombreadores, y desabolladores de aplicación que pueden especificar un número virtualmente ilimitado de memorias intermedias constantes. En una implementación práctica, hasta 16 de estas memorias intermedias constantes pueden unirse en diferentes ranuras de cada sombreador en cualquier tiempo dado. De forma importante, el orden en el cual las memorias intermedias constantes particulares se asignan o unen a ranuras particulares en cada sombreador 584'-1a no necesariamente necesita seguir un patrón particular y puede determinarse por el recopilador. Cuando dos programas de sombreador se recopilan independientemente uno de otro, el orden en el cual los recursos se unen a ranuras particulares puede ser diferente. Por ejemplo, cuando el sombreador 584'-1a A se ejecuta memorias intermedias constantes CB1-CB5 se establecen a ranuras 1-5 para presentar sombreador 584'-1a A. Sin embargo, cuando es el momento para que el sombreador 584'-1a B se ejecute, las mismas memorias intermedias constantes CB1-CB5 pueden unirse o reasignarse a diferentes ranuras para ejecutar el sombreador 584'-1a B. Por ejemplo, cuando el sombreador 584'-1a A se ejecuta, CB1 se une a la ranura 1, CB2 se une a la ranura 2, CB3 se une a la ranura 3, CB4 se une a la ranura 4, y CB5 se une a la ranura 5, pero cuando el siguiente sombreador 584'-1a B se ejecuta, las mismas cinco memorias intermedias constantes también pueden utilizarse de nuevo, pero esta vez en diferentes ranuras (por ejemplo, CB2 en ranura 1, CB1 en ranura 2, CB4 en ranura 3, CB5 en ranura 4, CB3 en ranura 5). En tales casos, las memorias intermedias constantes tienen que separarse de una ranura y reunirse a una nueva ranura durante la transición entre ejecutar sombreador 584'-1a A y sombreador 584'-1aB. Como tal, las mismas cinco memorias intermedias constantes necesitan reunirse en diferentes órdenes. Existe un costo de desempeño cada vez que las uniones necesitan reajustarse ya que debe hacerse una llamada al controlador para establecer la tarjeta de video, etc. No hay un mecanismo automático para mitigar este "desacuerdo" entre sombreadores, lo que de esa forma resulta en reconfiguración innecesaria de la tubería mientras ocurren transiciones entre sombreadores, y se desperdician ciclos de unión. Será deseable reducir y/o minimizar la cantidad de reconfiguración que se necesita en la tarjeta de gráficos cuando cambia entre sombreadores (por ejemplo, reducir y/o minimizar cambios de estado que típicamente ocurrirán al reunir ranuras). Por ejemplo, será deseable proporcionar una forma de evitar o reducir la necesidad de reasignar recursos particulares a diferentes ranuras. Al colocar los recursos en las mismas ranuras consistentemente menos ciclos de unión se desperdician y/o se ahorran sitios de unión.
Técnicas de unión de ranura/recurso optimizadas Se proporcionan técnicas para unir óptimamente recursos (por ejemplo, memorias intermedias constantes, texturas y muestrarios) a siete ranuras para reducir/minimizar la cantidad de reconfiguración de unión que se necesita en la tarjeta de gráficos cuando se cambia entre sombreadores (por ejemplo, reducir y/o minimizar cambios de estado que típicamente ocurrirán al reunir ranuras). De acuerdo con estas técnicas, dependencias comunes entre cada programa de sombreador pueden determinarse, y recursos particulares pueden unirse a ranuras particulares basándose en esta determinación. Un árbol de dependencia mantiene rastro de las relaciones o dependencias entre diferentes recursos de sombreador. Cada recurso específico se une a una ranura de un objeto padre en el árbol de dependencia. Estas técnicas descritas involucran dependencias de escaneo y reconfigurar el árbol de dependencia para que los sombreadores puedan cambiar su expectación para en donde se unen los recursos. Como resultado, el número de ranuras que necesitarán reunirse en orden de una transición entre sombreadores actualmente cargados puede reducirse y/o minimizarse. De acuerdo con una modalidad de estas técnicas, cada una de las dependencias en el árbol de dependencias se escanea, y un costo asociado puede calcularse para cada reconfiguración diferente (redelineados o reconstrucción de sombreadores) del árbol de dependencia. Cada reconfiguración del árbol de dependencia cambia las ranuras particulares con ciertos recursos que se unen. Al utilizar estos costos, la reconfiguración particular del árbol de dependencia entonces puede seleccionarse y reduce o minimiza la cantidad de reconfiguración de dispositivo para transición entre estados de nivel superior. En otras palabras, la reconfiguración particular del árbol de dependencia que minimiza el número de ranuras que necesitará reunirse en orden de transición/cambio entre sombreadores actualmente cargados entonces puede seleccionarse. En una ¡mplementación, estas técnicas pueden realizarse para generación de contenido fuera de línea y almacenamiento (por ejemplo, si el sombreador establecido se conoce por adelantado de tiempo, sombreadores se analizan, se redelinean dependencias, y entonces los sombreadores se guardan de nuevo en el disco). En una ¡mplementación alternativa, el método se realiza dinámicamente en tiempo de funcionamiento/tiempo de carga de aplicación (por ejemplo, si el grupo de sombreador se conoce por adelantado de tiempo). Por consiguiente, los programas de sombreador particulares se modifican para esperar ciertos recursos en el mismo orden. Eso puede permitir, por ejemplo, optimización de las memorias intermedias constantes que se asocian con ranuras particulares. Esto reduce la cantidad de trabajo que necesita hacerse al reducir la cantidad de reorganización que ocurre cuando se cambia entre diferentes sombreadores. La Figura 6 ilustra un diagrama de flujo no limitante ilustrativo 600 para unir óptimamente recursos a ranuras particulares asociadas con sombreadores en una tubería de gráficos. Durante ejecución de una aplicación particular, un sombreador puede requerir cierto número de recursos (por ejemplo, memorias intermedias constantes, texturas y muestrarios, etc.) para unirse a ranuras específicas del sombreador. En el paso 610, las dependencias de recurso entre recursos que se utilizan por cada sombreador pueden determinarse. En una modalidad, el paso 610 puede involucrar dos sub-pasos 615, 620. En el sub-paso 615, un recurso particular/distribución de ranura para cada sombreador puede determinarse. El recurso particular/distribución de ranura para cada sombreador especifica que recursos se utilizan en cada una de las ranuras particulares de cada sombreador. En el sub-paso 620, basándose en el recurso particular/distribuciones de ranura, las dependencias de recurso (por ejemplo, diferentes/comunes) entre recursos que se utilizan por cada sombreador pueden determinarse. En el paso 630, basándose en las dependencias de recurso, pueden calcularse asociaciones de recurso/ranura comunes. Cada asociación de recurso/ranura común identifica uno particular de los recursos para asociarse con una particular de las ranuras para que un número de cambio/cantidad de transiciones/estados de reconfiguración de recursos se reduzca/minimice cuando se cambie entre som breadores. En el paso 640, en cada uno de los sombreadores, los recursos unidos a cada ranura entonces pueden reorganizarse de acuerdo con las asociaciones de recurso/ranura comunes. En este punto, cada sombreador tiene las mismas asociaciones de recurso/ranura comunes para que, en cada sombreador, el mismo recurso particular se asocie con la misma particular de las ranuras. En el paso 650, cada una de los recursos particulares puede unirse a la ranura particular como se especificó por las asociaciones de recurso/ranura comunes. La Figura 7 ilustra un diagrama de flujo no limitante ilustrativo 630 para calcular asociaciones de recurso/ranura comunes. En el paso 710, uno particular de los recursos para unirse a una primera ranura puede determinarse. Después de determinar el recurso que se une a una primera ranura, en el paso 720, este recurso unido a la primera ranura puede removerse del grupo o lista o recursos disponibles. En el paso 730, el procedimiento puede determinar si las ranuras para unirse a cada sombreador se llenaron. Si existen ranuras que permanecen unidas (por ejemplo, ranuras que aún no tienen un recurso unido a ellas), entonces en el paso 740, uno de los recursos restantes puede determinarse y se va a unir a una segunda ranura. Los pasos 720-740 se repiten hasta un número de ranuras de predeterminado, la mayoría de las ranuras o todas las ranuras para unirse tienen un recurso particular asociado con éstas. En una modalidad, el algoritmo puede aplicarse hasta que se satisface una métrica de costo particular. Por ejemplo, la métrica de costo puede ser que el algoritmo se detenga cuando existen menos que, por ejemplo, 60 por ciento de cambios de recurso o diferencias entre los sombreadores. Una vez que todas las ranuras para unirse tienen una unión de recurso/ranura, entonces el procedimiento continúa en 640 de la Figura 6. La Figura 8 ilustra un diagrama de flujo no limitante ilustrativo 710/740 para determinar uniones de recurso/ranura específicas. Para determinar un primer recurso para unirse a una primera ranura, en el paso 810, un costo para unir cada recurso en el árbol de dependencia a la primera ranura puede calcularse basándose en las dependencias de recurso entre recursos que se utilizan por cada sombreador. En el paso 820, el particular de los recursos que tiene costo inferior puede seleccionarse para unión a la primera ranura, y en el paso 830, este recurso (seleccionado como teniendo el costo inferior) puede designarse como el primer recurso. Debido a que los pasos 810 a 830 se insertan en el paso 740 de la Figura 7, se apreciará que los pasos 810-830 se repetirán hasta que cada una de las ranuras para unirse tenga una unión de recurso/ranura particular. La Figura 9 ilustra un diagrama de flujo no limitante ilustrativo 810 para calcular un costo para unir cada recurso a la primera ranura. En el paso 910, un número de cambios de estado requeridos para presentar cada sombreador pueden determinarse si uno particular de los recursos se une a la primera ranura. Esta determinación puede hacerse al utilizar las dependencias de recurso entre recursos que se utilizan por cada programa de sombreador. En el paso 920, un número de ranuras desperdiciadas requeridas para presentar cada sombreador si el particular de los recursos se une a la primera ranura, puede determinarse. Como anteriormente, esta determinación puede hacerse al utilizar las dependencias de recurso entre recursos que se utilizan por cada programa de sombreador. Al utilizar el número de cambio de estados y el número de ranura de desperdiciadas, en el paso 930, puede calcularse un primer costo. Este primer costo es un costo asociado con unir ese particular de los recursos a la primera ranura. Este cálculo puede repetirse para cada recurso (por ejemplo, costo asociado con unir cada uno de tos recursos a la primera ranura). En el paso 940, puede determinarse si un costo se calculó para unir cada uno de los recursos a la primera ranura. Si no es así, entonces el procedimiento procede el paso 950 en donde el siguiente particular de los recursos en una lista de recurso o árbol de dependencia se selecciona. Los pasos 910-930 entonces pueden repetirse para el siguiente recurso (por ejemplo, costo asociado con unir el siguiente recurso a la primera ranura). El procedimiento 810 se repite hasta que se determina en el paso 940 que el costo se calculó para unir cada uno de los recursos a la primera ranura. En este punto, el procedimiento termina o regresa al paso 820. Debido a que los pasos 910 a 950 se insertan en el paso 810 de la Figura 8, se apreciará que los pasos 910-950 se repetirán hasta que se determine un costo, para unir cada recurso a cada una de las ranuras para unirse. De esa forma, en el ejemplo mostrado en la Figura 5B, las técnicas descritas anteriormente pueden utilizarse para redelinear el diseño de memorias intermedias constantes utilizadas en sombreador 584'-1a B. Por ejemplo, todas las dependencias se escanearán, si se determina que el diseño de memoria intermedia constante óptimo es el mostrado en el sombreador 584'-1a A, entonces en el sombreador 584'-1a B, CBs 2 y 3 se redelinearán para unirse a las ranuras 2 y 3, mientras CB 1 se redelineará a la ranura 1 y CBs 4 y 5 se redelinearán a las ranuras 4 y 5, respectivamente. En esta forma el cambio entre los sombreadores 584'-1a A y 584'-1a B no requiere trabajo adicional más allá de la unión inicial de todos los CBs a las ranuras mostradas en el sombreador 584'-1a A, El redelineado similar también puede tomar lugar en los sombreadores 584'-1a C y sombreador 584'-1a N. Como tal, el número de ranuras que necesitará reunirse con el fin de cambiar entre sombreadores actualmente cargados debe minimizarse. Existen múltiples formas de implementar la presente invención, por ejemplo, una API apropiada, equipo de herramientas, código de controlador, sistema operativo, control, objeto de software individual o descargable, etc. que permite a las aplicaciones y servicios utilizar los sistemas y métodos de la invención de tubería de gráficos mejorada. La invención contempla el uso de la invención desde el punto de vista de una API (u otro objeto de software), así como de un objeto de software o hardware que recibe cualquiera de las técnicas antes mencionadas, que incluyen técnicas del núcleo común, el sombreador de geometría o la salida de corriente de acuerdo con invención. De esa forma, varias implementaciones de la invención aquí descrita pueden tener aspectos que están completamente en hardware, parcialmente en hardware y parcialmente en software, así como el software. Como se mencionó anteriormente, mientras las modalidades ilustrativas de la presente invención se describieron en conexión con varios dispositivos de cómputo y arquitecturas de red, los conceptos fundamentales pueden aplicarse a cualquier dispositivo sistema de cómputo en donde es deseable emplear una GPU con una tubería de gráficos mejorada. Por ejemplo, el algoritmo(s) e implementaciones de hardware de la invención pueden aplicar al sistema operativo de un dispositivo de cómputo, proporcionado como un objeto separado en el dispositivo, como parte de otro objeto, como un control reutilizable, un objeto descargable de un servidor, como un "hombre en medio" entre un dispositivo u objeto y la red, como un objeto distribuido, como un hardware, en memoria, una combinación de cualquiera de los anteriores, etc. Mientras lenguajes de programación ilustrativos, nombres y ejemplos se eligen aquí como representativos de varias elecciones, estos lenguajes, nombres y ejemplos no pretenden ser limitantes. Un experto en la técnica apreciará que existen numerosas formas de proporcionar código de objeto y nomenclatura que logra la misma, similar o equivalente funcionalidad lograda por las varias modalidades de la invención. Como se mencionó, las varias técnicas aquí descritas pueden implementarse en conexión con hardware o software o, en donde se apropiado, con una combinación de ambos. De esa forma, los métodos y aparatos de la presente invención, o ciertos aspectos o porciones de la misma, pueden tomar la forma de código de programa (es decir, instrucciones) representadas en medios tangibles, tal como discos flexibles, CD-ROM, unidades duras, o cualquier otro medio de almacenamiento legible por máquina, en donde, cuando el código de programa se carga y ejecuta por una máquina, tal como una computadora, la máquina se vuelve un aparato para practicar invención. En el caso de ejecución de código de programa en computadoras programables, el dispositivo de cómputo generalmente incluye un procesador, un medio de almacenamiento legible por el procesador (que incluye memoria volátil y no volátil y/o elementos de almacenamiento), al menos un dispositivo de entrada, y al menos un dispositivo de salida. Uno o más programas que pueden implementar o utilizar las técnicas de tubería de gráficos mejorada de la presente invención, por ejemplo, a través del uso de una API de procesamiento de datos, controles reutilizables, o similares, preferiblemente se implementan en un procedimiento de alto nivel o lenguaje de programación orientado a objeto para comunicarse con un sistema de computadora. Sin embargo, el programa(s) puede implementarse en ensamble o lenguaje de máquina, si se desea. En cualquier caso, el lenguaje puede ser un lenguaje recopilado o interpretado, y combinarse con implementaciones de hardware. Los métodos y aparatos de la presente invención también puede practicarse a través de comunicaciones representadas en la forma de código de programa que se transmite en algún medio de transmisión, tal como en cable o cableado eléctrico, a través de fibras ópticas, o a través de cualquier otra forma de transmisión, en donde, cuando el código de programa se recibe y carga y ejecuta por una máquina, tal como una EPROM, una distribución de acceso, un dispositivo de lógica programable (PLD), una computadora de cliente, etc., la máquina se vuelve un aparato para practicar la invención. Cuando se implementa en un procesador de propósito general, el código de programa se combina con el procesador para proporcionar un aparato único que opera para invocar la funcionalidad de la presente invención. Adicionalmente, cualquiera de las técnicas de almacenamiento utilizadas en conexión con la presente invención invariablemente puede ser una combinación de hardware y software. Mientras la invención se describió en conexión con las modalidades preferidas de las varias figuras, se debe entender que otras modalidades similares pueden utilizarse o modificaciones y adiciones pueden hacerse a la modalidad descrita para realizar la misma función de la presente invención sin desviarse de la misma. Por ejemplo, mientras los ambientes de red ilustrativos de la invención se describen en el contexto de un ambiente en red, tal como un ambiente en red de par a par, un experto en la técnica reconocerá que la presente invención no se limita a este, y que los métodos, como se describieron en la presente solicitud pueden aplicar a cualquier dispositivo de cómputo ambiente, tal como una consola de juegos, computadora móvil, computadora portátil, etc., ya sea por cable o inalámbrica, y pueden aplicar a cualquier número de tales dispositivos de cómputo conectados a través de una red de comunicaciones, e interactuar a través de la red. Además, se debe enfatizar que una variedad de plataformas de computadora, que incluyen sistemas operativos de dispositivos móviles y otros sistemas operativos específicos de aplicación se contemplan, especialmente mientras el número de dispositivos en red inalámbricos continúa proliferando. Mientras las modalidades ilustrativas se refieren a utilizar la presente invención en el contexto de tubería de gráficos, la invención no se limita, en lugar de esto puede implementarse para proporcionar una segunda unidad de procesamiento. Por ejemplo, si el programador desea presentar una presentación a la pantalla y procesa la matemática computacional mientras realiza otra función al utilizar las CPU, las unidades de procesamiento pueden necesitar utilizarse a su totalidad, ya sea que se incluya o no la presentación gráfica en la salida final. Además, la presente invención puede implementarse en o a través de una pluralidad de chips o dispositivos de procesamiento, y almacenamiento puede realizarse similarmente a través de una pluralidad de dispositivos. Por lo tanto, la presente invención no debe limitarse ninguna modalidad individual, sino debe interpretarse en amplitud y alcance de acuerdo con las reivindicaciones anexas.

Claims (1)

  1. REIVINDICACIONES 1. - Un método (600) para unir recursos a ranuras particulares asociadas con sombreadores (584'-1) en una tubería de gráficos (384'-1), que comprende: determinar dependencias de recurso (413-415) entre recursos que se utilizan por cada sombreador (620); y calcular, basándose en las dependencias de recurso (413-415), asociaciones de recurso/ranura comunes (630), en donde cada asociación de recurso/ranura común identifica uno particular de los recursos (413-415) para asociarse con una particular de las ranuras. 2. - Un método de acuerdo con la reivindicación 1, en donde determinar dependencias de recurso entre recursos que se utilizan por cada sombreador, comprende: determinar, en cada sombreador, un distribución de recurso/ranura particular para cada sombreador, en donde la distribución de recurso/ranura particular para cada sombreador especifica qué recursos se utilizan en cada una de las ranuras particulares de cada recurso; y determinar, basándose en las distribuciones de recurso/ranura particulares, dependencias de recurso entre recursos que se utilizan por cada sombreador. 3. - Un método de acuerdo con la reivindicación 2, en donde calcular asociaciones de recurso/ranura comunes, comprende: calcular, basándose en las dependencias de recurso, asociaciones de recurso/ranura comunes, en donde cada asociación de recurso/ranura común identifica uno particular de los recursos para asociarse con una particular de la ranuras para que un costo de reconfiguración de recursos se reduzca cuando hay cambio entre sombreadores. 4. - Un método de acuerdo con la reivindicación 3, que además comprende: reorganizar, en cada uno de los sombreadores, los recursos unidos a cada ranura de acuerdo con las asociaciones de recurso/ranura comunes. 5. - Un método de acuerdo con la reivindicación 3, en donde calcular asociaciones de recurso/ranura comunes, comprende: (a) determinar uno particular de los recursos para unirse a una primera ranura; y (b) determinar uno particular de los recursos restantes para unirse a una segunda ranura; y repetir el paso (b) para cada ranura restante hasta que un número predeterminado de la ranuras tiene uno de los recursos asociados con ésta. 6.- Un método de acuerdo con la rei indicación 5, en donde determinar un primer recurso de para unirse a una primera ranura, comprende: calcular un costo para unir cada recurso a la primera ranura, basándose en las dependencias de recurso entre recursos que se utilizan por cada sombreador; seleccionar el particular de uno de los recursos que tiene costo inferior; y designar el recurso seleccionado como teniendo el costo más bajo como el primer recurso. 7.- Un método de acuerdo con la reivindicación 6, en donde determinar un segundo recurso para unirse a una segunda ranura, comprende: calcular un costo para unir cada uno de los recursos restantes a la segunda ranura; seleccionar el recurso restante que tiene el costo más bajo; y designar el recurso restante seleccionado como teniendo el costo más bajo como el segundo recurso. 8 - Un método de acuerdo con la reivindicación 6, en donde calcular un costo para unir cada recurso a la primera ranura, comprende: (a) determinar un número de cambios de estado requeridos para presentar cada sombreador si uno particular de los recursos se une a la primera ranura, basándose en las dependencias de recurso entre recursos que se utilizan por cada programa de sombreador; y (b) determinar un número de ranuras desperdiciadas requeridas si el particular de los recursos se une a la primera ranura, basándose en las dependencias de recurso entre recursos que se utilizan por cada programa de sombreador; (c) calcular un primer costo asociado con unir el particular de los recursos a la primera ranura, basándose en el número de cambios de estado y el número de ranuras desperdiciadas; y repetir los pasos (a) al (c) hasta que se haya calculado un costo para unir cada uno de los recursos a la primera ranura. 9. - Un método de acuerdo con la reivindicación 1, que además comprende: unir cada uno de los recursos particulares a la ranura particular especificada por las asociaciones de recurso/ranura comunes. 10. - Un método de acuerdo con la reivindicación 1, en donde cada sombreador tiene las mismas asociaciones de recurso/ranura comunes para que en cada sombreador el mismo recurso particular sea asociado con la misma particular de las ranuras. 11. - Un método de acuerdo con la reivindicación 1, en donde los recursos comprenden memorias intermedias constantes. 12. - Un método de acuerdo con la reivindicación 1, en donde los recursos comprenden memorias intermedias constantes en al menos una de las texturas y muestrarios. 13. - Un medio legible por computadora que comprende instrucciones ejecutables por computadora para realizar el método de acuerdo con la reivindicación 1. 14.- Una interfase de programación de aplicación de gráficos que comprende módulos ejecutables por computadora para llevar a cabo los pasos de la reivindicación 1. 15.- Una interfase de programación de aplicación para instruir a una unidad de procesamiento de gráficos para realizar el método de acuerdo con la reivindicación 1. 16. - Un método para reconfigurar un árbol de dependencia que comprende un número de recursos, en donde cada recurso específico se une a una ranura de un objeto padre en el árbol de dependencia, el método comprende: escanear cada una de las dependencias de recurso en el árbol de dependencia; calcular un costo asociado con cada uno de un número de diferentes configuraciones de recurso del árbol de dependencia; y seleccionar la reconfiguración de recurso particular del árbol de dependencia que minimiza la cantidad de reconfiguración de dispositivo cuando se cambia entre diferentes son breadores. 17. - El método de acuerdo con la reivindicación 16, en donde cada reconfiguración de recurso del árbol de dependencia cambia las ranuras particulares con ciertos recursos unidos a éstas. 18.- El método de acuerdo con la reivindicación 16, en donde seleccionar, comprende: seleccionar la reconfiguración de recurso particular del árbol de dependencia que minimiza el número de ranuras que necesitará re-unirse con el fin de cambiar entre diferentes som breadores. 19.- El método de acuerdo con la reivindicación 16, en donde el método se realiza para generación de contenido fuera de linea, y que además comprende: almacenar la reconfiguración de recurso particular del árbol de dependencia. 20.- El método de acuerdo con la reivindicación 16, en donde el método se realiza dinámicamente en tiempo de funcionamiento/tiempo de carga de aplicación.
MX2008015162A 2006-06-28 2007-06-07 Rapida reconfiguracion de estado de tuberia de graficos. MX2008015162A (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/477,272 US8111260B2 (en) 2006-06-28 2006-06-28 Fast reconfiguration of graphics pipeline state
PCT/US2007/013410 WO2008002384A2 (en) 2006-06-28 2007-06-07 Fast reconfiguration of graphics pipeline state

Publications (1)

Publication Number Publication Date
MX2008015162A true MX2008015162A (es) 2008-12-12

Family

ID=38846159

Family Applications (1)

Application Number Title Priority Date Filing Date
MX2008015162A MX2008015162A (es) 2006-06-28 2007-06-07 Rapida reconfiguracion de estado de tuberia de graficos.

Country Status (7)

Country Link
US (2) US8111260B2 (es)
EP (1) EP2033085B1 (es)
JP (1) JP5154551B2 (es)
KR (1) KR101231291B1 (es)
CN (2) CN102982504B (es)
MX (1) MX2008015162A (es)
WO (1) WO2008002384A2 (es)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7948495B1 (en) * 2006-02-02 2011-05-24 Nvidia Corporation Linking texture headers and texture samplers
US8154554B1 (en) * 2006-07-28 2012-04-10 Nvidia Corporation Unified assembly instruction set for graphics processing
US20080252652A1 (en) * 2007-04-13 2008-10-16 Guofang Jiao Programmable graphics processing element
US8610725B2 (en) * 2007-10-10 2013-12-17 Apple Inc. Framework for dynamic configuration of hardware resources
JP5616333B2 (ja) * 2008-05-29 2014-10-29 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated ジオメトリシェーダを用いる平面充填エンジンのためのシステム、方法及びコンピュータプログラム
US8854379B2 (en) * 2009-02-25 2014-10-07 Empire Technology Development Llc Routing across multicore networks using real world or modeled data
US8749562B1 (en) * 2009-09-23 2014-06-10 Nvidia Corporation Sharing binding groups between shaders
US8619087B2 (en) * 2009-10-06 2013-12-31 Nvidia Corporation Inter-shader attribute buffer optimization
US8786618B2 (en) * 2009-10-08 2014-07-22 Nvidia Corporation Shader program headers
US8872823B2 (en) * 2009-10-09 2014-10-28 Microsoft Corporation Automatic real-time shader modification for texture fetch instrumentation
US8766988B2 (en) * 2009-10-09 2014-07-01 Nvidia Corporation Providing pipeline state through constant buffers
US9582919B2 (en) * 2009-10-09 2017-02-28 Microsoft Technology Licensing, Llc Automatic run-time identification of textures
US9390539B2 (en) * 2009-11-04 2016-07-12 Intel Corporation Performing parallel shading operations
US8432398B2 (en) * 2009-11-05 2013-04-30 Microsoft Corporation Characteristic determination for an output node
US8756590B2 (en) 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
WO2012054089A2 (en) * 2010-10-21 2012-04-26 Net Power And Light Inc. Distributed processing pipeline and distributed layered application processing
JP5670723B2 (ja) * 2010-12-27 2015-02-18 株式会社ディジタルメディアプロフェッショナル 画像処理装置
CN102496169A (zh) * 2011-11-30 2012-06-13 威盛电子股份有限公司 重迭对象的绘制方法及装置
JP2013218527A (ja) * 2012-04-09 2013-10-24 Mitsubishi Electric Corp グラフィックス描画装置
US20130342535A1 (en) * 2012-06-20 2013-12-26 Microsoft Corporation Hierarchical Tree Traversal in Graphics Pipeline Stages
US9830741B2 (en) * 2012-11-07 2017-11-28 Nvidia Corporation Setting downstream render state in an upstream shader
KR101695013B1 (ko) * 2012-12-14 2017-01-10 한국전자통신연구원 적응형 자원 할당 및 관리 방법
US20140267327A1 (en) 2013-03-14 2014-09-18 Microsoft Corporation Graphics Processing using Multiple Primitives
US9384589B2 (en) 2013-04-29 2016-07-05 Microsoft Technology Licensing, Llc Anti-aliasing for geometries
US20140354658A1 (en) * 2013-05-31 2014-12-04 Microsoft Corporation Shader Function Linking Graph
US10013732B2 (en) * 2013-06-28 2018-07-03 Lockheed Martin Corporation Externally directed GPU data
US9747658B2 (en) 2013-09-06 2017-08-29 Apple Inc. Arbitration method for multi-request display pipeline
US9292903B2 (en) * 2013-10-03 2016-03-22 Google Inc. Overlap aware reordering of rendering operations for efficiency
US9779535B2 (en) 2014-03-19 2017-10-03 Microsoft Technology Licensing, Llc Configuring resources used by a graphics processing unit
US9766954B2 (en) 2014-09-08 2017-09-19 Microsoft Technology Licensing, Llc Configuring resources used by a graphics processing unit
US10430169B2 (en) * 2014-05-30 2019-10-01 Apple Inc. Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit
US20150348224A1 (en) * 2014-05-30 2015-12-03 Apple Inc. Graphics Pipeline State Object And Model
US10346941B2 (en) 2014-05-30 2019-07-09 Apple Inc. System and method for unified application programming interface and model
US9740464B2 (en) 2014-05-30 2017-08-22 Apple Inc. Unified intermediate representation
US10242493B2 (en) * 2014-06-30 2019-03-26 Intel Corporation Method and apparatus for filtered coarse pixel shading
CN104616327B (zh) * 2014-07-31 2017-07-14 浙江大学 一种基于曲面细分的着色器简化方法、装置及图形渲染方法
CN104183008B (zh) * 2014-07-31 2017-01-18 浙江大学 一种基于表面信号拟合和曲面细分的着色器简化方法、装置及图形渲染方法
US9779528B2 (en) 2014-09-12 2017-10-03 Microsoft Technology Licensing, Llc Text realization
US10417990B2 (en) * 2014-10-16 2019-09-17 Nvidia Corporation Efficient binding of resource groups in a graphics application programming interface
US10496528B2 (en) 2015-08-31 2019-12-03 Microsoft Technology Licensing, Llc User directed partial graph execution
US9881352B2 (en) * 2015-11-13 2018-01-30 Intel Corporation Facilitating efficient graphics commands processing for bundled states at computing devices
US10460513B2 (en) 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US11080927B2 (en) * 2017-11-30 2021-08-03 Advanced Micro Devices, Inc. Method and apparatus of cross shader compilation
GB2570304B (en) 2018-01-18 2022-06-01 Imagination Tech Ltd Topology preservation in a graphics pipeline
US10430367B1 (en) * 2018-07-12 2019-10-01 Dell Products L.P. Systems and methods for optimal placement of information handling resource

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6295608B1 (en) 1998-02-17 2001-09-25 Microsoft Corporation Optimized allocation of data elements among cache lines
US6189105B1 (en) 1998-02-20 2001-02-13 Lucent Technologies, Inc. Proximity detection of valid computer user
US6631423B1 (en) 1998-03-31 2003-10-07 Hewlett-Packard Development Company, L.P. System and method for assessing performance optimizations in a graphics system
US6070202A (en) * 1998-05-11 2000-05-30 Motorola, Inc. Reallocation of pools of fixed size buffers based on metrics collected for maximum number of concurrent requests for each distinct memory size
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6243107B1 (en) * 1998-08-10 2001-06-05 3D Labs Inc., Ltd. Optimization of a graphics processor system when rendering images
US6374145B1 (en) 1998-12-14 2002-04-16 Mark Lignoul Proximity sensor for screen saver and password delay
US6560711B1 (en) 1999-05-24 2003-05-06 Paul Given Activity sensing interface between a computer and an input peripheral
US6198488B1 (en) * 1999-12-06 2001-03-06 Nvidia Transform, lighting and rasterization system embodied on a single semiconductor platform
US20020021307A1 (en) 2000-04-24 2002-02-21 Steve Glenn Method and apparatus for utilizing online presence information
US7546602B2 (en) * 2001-07-10 2009-06-09 Microsoft Corporation Application program interface for network software platform
US6943800B2 (en) 2001-08-13 2005-09-13 Ati Technologies, Inc. Method and apparatus for updating state data
US6784888B2 (en) 2001-10-03 2004-08-31 Ati Technologies, Inc. Method and apparatus for executing a predefined instruction set
US20030084322A1 (en) 2001-10-31 2003-05-01 Schertz Richard L. System and method of an OS-integrated intrusion detection and anti-virus system
US6828978B2 (en) * 2002-02-28 2004-12-07 David B. Buehler Bucket-sorting graphical rendering apparatus and method
US7159212B2 (en) 2002-03-08 2007-01-02 Electronic Arts Inc. Systems and methods for implementing shader-driven compilation of rendering assets
US20050184853A1 (en) 2002-05-03 2005-08-25 Payne Roger A. Information security
US6980209B1 (en) 2002-06-14 2005-12-27 Nvidia Corporation Method and system for scalable, dataflow-based, programmable processing of graphics data
US6910106B2 (en) 2002-10-04 2005-06-21 Microsoft Corporation Methods and mechanisms for proactive memory management
US7530062B2 (en) * 2003-05-23 2009-05-05 Microsoft Corporation Optimizing compiler transforms for a high level shader language
US20050097595A1 (en) 2003-11-05 2005-05-05 Matti Lipsanen Method and system for controlling access to content
US7123286B2 (en) 2003-11-14 2006-10-17 Lucent Technologies Inc. Presence detection for IP telephony
US20050182962A1 (en) 2004-02-17 2005-08-18 Paul Given Computer security peripheral
US7385607B2 (en) 2004-04-12 2008-06-10 Nvidia Corporation Scalable shader architecture
US7154500B2 (en) * 2004-04-20 2006-12-26 The Chinese University Of Hong Kong Block-based fragment filtration with feasible multi-GPU acceleration for real-time volume rendering on conventional personal computer
US7570267B2 (en) 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
NO20042409L (no) 2004-06-09 2005-12-12 Tandberg Telecom As System og metode for detektering av tilstedevaerelse.
US7218291B2 (en) * 2004-09-13 2007-05-15 Nvidia Corporation Increased scalability in the fragment shading pipeline
US7451432B2 (en) * 2004-10-01 2008-11-11 Microsoft Corporation Transformation of componentized and extensible workflow to a declarative format
US7464366B2 (en) * 2004-10-01 2008-12-09 Microsoft Corporation Programming interface for a componentized and extensible workflow model
US20070234308A1 (en) * 2006-03-07 2007-10-04 Feigenbaum Barry A Non-invasive automated accessibility validation
CA2638453C (en) * 2006-03-14 2010-11-09 Transgaming Technologies Inc. General purpose software parallel task engine

Also Published As

Publication number Publication date
US8111260B2 (en) 2012-02-07
EP2033085A4 (en) 2014-10-08
CN102982504A (zh) 2013-03-20
US20110316871A1 (en) 2011-12-29
US20080001952A1 (en) 2008-01-03
KR101231291B1 (ko) 2013-02-15
KR20090024178A (ko) 2009-03-06
CN102982504B (zh) 2016-01-20
JP5154551B2 (ja) 2013-02-27
EP2033085A2 (en) 2009-03-11
WO2008002384A2 (en) 2008-01-03
EP2033085B1 (en) 2017-11-22
JP2009543195A (ja) 2009-12-03
WO2008002384A3 (en) 2008-02-14
US8319784B2 (en) 2012-11-27
CN101479701B (zh) 2012-11-14
CN101479701A (zh) 2009-07-08

Similar Documents

Publication Publication Date Title
MX2008015162A (es) Rapida reconfiguracion de estado de tuberia de graficos.
US7692660B2 (en) Guided performance optimization for graphics pipeline state management
EP1594091B1 (en) System and method for providing an enhanced graphics pipeline
US7671862B1 (en) Systems and methods for providing an enhanced graphics pipeline
EP1383080B1 (en) Intermediate buffers in a graphics system
CN117078832A (zh) 用于经实施例化的几何结构的更有效的光线跟踪方法和装置
US10395423B2 (en) Apparatus and method for rendering adaptive mesh refinement (AMR) data
US20040169671A1 (en) Effects framework pipeline integration with programmable shader
CN111986279A (zh) 有效访问存储器和避免不必要的计算的技术
Hebert et al. MARTI—A Multiprocessor Architecture for Ray Tracing Images
Sutherland et al. Chapter 14: 3D Graphics Programming

Legal Events

Date Code Title Description
FG Grant or registration