EP2153319A1 - Generateur de code source pour une carte graphique - Google Patents

Generateur de code source pour une carte graphique

Info

Publication number
EP2153319A1
EP2153319A1 EP08760517A EP08760517A EP2153319A1 EP 2153319 A1 EP2153319 A1 EP 2153319A1 EP 08760517 A EP08760517 A EP 08760517A EP 08760517 A EP08760517 A EP 08760517A EP 2153319 A1 EP2153319 A1 EP 2153319A1
Authority
EP
European Patent Office
Prior art keywords
shaders
shader
unitary
unit
generator
Prior art date
Legal status (The legal status 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 status listed.)
Withdrawn
Application number
EP08760517A
Other languages
German (de)
English (en)
Inventor
Dongmei Pei Xing
Henri Fousse
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Thales SA
Original Assignee
Thales SA
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 Thales SA filed Critical Thales SA
Publication of EP2153319A1 publication Critical patent/EP2153319A1/fr
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Definitions

  • the present invention relates to a source code generator for a graphics card.
  • the source code generator can be used to produce a source code for managing combinations of visual effects, in particular for an application that generates real-time images for a simulation or a video game.
  • Visualization software applications can in particular be used to reproduce virtual environments used during simulations for example.
  • the visualization software applications are executed by a processor of a computer.
  • a graphics card allows an image display, generated in real time by the software application, on a screen connected to the computer.
  • a graphics card is an expansion card of a computer used to store and interpret images generated by a visualization software application running on the processor of the computer for example.
  • the continuous updating of the images on the screen, for the viewing of a sequence of images for example, is provided by the graphics card.
  • the rendering quality is therefore particularly related to the performance of the graphics card used to allow a visual representation of an environment.
  • the configuration of a graphics card is performed through a program commonly referred to as the English expression "shader".
  • the "shader” is a program with source code consisting of instructions written in understandable language.
  • a “shader” is used to set one or more parts of the graphics card.
  • the “shader” thus makes it possible to intervene at different stages of a chain of graphic information processing performed by the graphics card.
  • the code of a "shader” is compiled by a compiler dedicated to each type of graphics card in order to obtain a program that can then run on the GPU.
  • the evolution of image formats to increasingly finer definitions is forcing graphic card manufacturers to develop more and more powerful GPUs.
  • GPU processors are capable of performing multiple operations in parallel and in real time. This performance is used in particular by game software in order to represent increasingly realistic environments, but also more and more by calculation software performing complex calculations operations.
  • shaders suffers from a lack of flexibility.
  • a "shader" program is a series of generally monoblock code instructions describing, for example, all possible display effects for a given display application.
  • the interfaces between the "shaders” and these applications must be fixed once and for all. Any modification of interface potentially requires to rewrite almost entirely the code of the "shader”.
  • An interface modification also has a significant impact on the programs of applications using "shaders". For large-sized applications, ie with many functional modules using a plurality of "shaders", the writing shaders are difficult and not very flexible.
  • a real-time visualization application used in particular for environmental simulation, there is the problem of the combination of visual effects.
  • the display effects to be described for displaying this scene are, for example, a field effect, a water effect, and a light source effect.
  • To render a display of the light source effect on the surface of the water or on the ground it is necessary to describe in the shader the possible combinations of the three effects: for example, the ground without a light source, the land with light source, water without light source, water with light source.
  • the number of renders to describe in the "shader" is equal to the number of effect combinations that a visualization application realizes.
  • the combiner takes into account the parameters given by the user, and assembles the compatible parts according to the parameters and input and output data of each part. The combiner then provides a new "shader" code including all possible combinations.
  • a second solution allows in particular to avoid loops and dynamic connections in the "shader".
  • This solution is implemented in a game engine named Far Cry, trademarked by Ubisoft Entertainment, and described by Carsten Wenzel in Far Cry and DirectX, GameDevelopers Conference, DirectX is a registered trademark of Microsoft Corporation.
  • This game engine performs a pre-compilation of "shader” with different masks for light sources. Then, the game engine uses a cache system to speed up the installation of the "shader” when using a rendering by a visualization application. This amounts to using a general "shader” having all the effects combined together, removing at the time of execution of the program "shader” unwanted effects in the image being displayed. This technique is usable only when the number of effects is limited, as in a game. It is impossible to implement this solution when one possesses a significant combinatorics of effects.
  • a third solution is proposed by Dominic Filion in Recombinant Shaders in Game Programming Gems 5.
  • This third solution also uses a generic "shader” in which insertion points are defined which make it possible to generate variants of "shader” by addition and subtraction of parts of "shader” code. These insertion points define treatments to be performed according to a context corresponding for example to an insertion point.
  • This solution can be performed by inserting pre-processor instructions in the code of the "shader”.
  • the preprocessor instructions allow a compiler to determine which code to use to generate an executable shader program.
  • the main disadvantage of this solution is the limited number of possible insertion points. This limitation makes it impossible to handle many combinations of effects.
  • Sh a meta-language used to describe one or more programming languages, for example the languages specific to the programming of a "shader”.
  • This meta-language proposes algebraic connection and combination operators, especially for unitary "shaders” considered as objects.
  • a unitary "shader” can be a “shader” describing an effect.
  • the code of the "shaders” is then compiled in order to give a usual “shader” code. This approach facilitates the integration of "shaders” with visualization applications.
  • the subject of the invention is a source code generator for a graphics card used by a software application.
  • Unit “shaders” including in particular common characteristics are defined according to a common structure defined by a basic “shader".
  • the basic “shader” comprises, for example, the common characteristics of the unit “shaders”.
  • the basic “shader” may have common interfaces for the software application 32.
  • the source code generator is a generator of "shaders", generating one or more "shaders” for the graphics card by combining the unit "shaders” according to one or more descriptions of combinations of unit "shaders”.
  • the generator can associate a unitary key with each unitary shader and with each combination of unitary shaders.
  • the generated unit keys are for example provided to the software application.
  • the software application is for example a visualization application.
  • a unitary "shader" corresponds to a visual effect.
  • a combination of unit shaders for example corresponds to a rendering combining several visual effects.
  • the software application is for example a calculation application.
  • the unitary "shader” is for example a unit calculation operation.
  • a combination of unitary “shaders” is for example a complex calculation operation combining several unit calculation operations.
  • the source code of the generated "shaders" is for example coded with a GLSL language, which means in English language Graphie Library Shading Language, created by OpenGL ARB.
  • the generator can be encoded with an object language.
  • the invention also relates to a method for generating source code for a graphics card.
  • the method comprises in particular the following steps: • definition of unit "shaders".
  • the unit shaders including in particular common characteristics.
  • Unit shaders can be defined according to a common structure.
  • the common structure is for example defined by a basic "shader” comprising the common characteristics of unitary “shaders”.
  • the basic "shader” may also include common interfaces for the software application; • generating, by a source code generator, "shaders” for the graphics card by combining the unit "shaders” according to one or more descriptions of combinations of unit "shaders".
  • a unitary key is for example associated with each unitary "shader”.
  • a unitary key is for example associated with each combination of unitary "shaders” resulting from the composition of the unit keys of the unitary "shaders” combined.
  • the software application is for example a visualization application.
  • a unitary "shader" corresponding for example to a visual effect.
  • a combination of unit shaders for example corresponds to a rendering combining several visual effects.
  • the software application is for example a calculation application.
  • a unitary “shader” is for example a unit calculation operation.
  • a combination of unitary “shaders” is for example a complex calculation operation combining several unit calculation operations.
  • the main advantages of the invention are to allow flexible and inexpensive programming of graphics card shaders, while optimizing software application access times to executable "shader" programs.
  • FIG. 1 a schematic example of a design of a
  • FIG. 2 an example of generation of a program executable by a GPU according to the invention
  • FIG. 3 an example of use of a "shader" generator according to the invention
  • Figure 4 different possible steps of implementation of "shader” according to the invention.
  • Figure 1 shows a schematic example of a design diagram of "shaders".
  • the "shaders” are for example defined for a visualization application
  • one or more visual effects can be used to obtain a rendering that combines these effects.
  • a water effect For example, to represent a liquid surface illuminated by the sun, it is possible to combine a water effect and a sun effect.
  • the sun has a light source function while the water has a material function on which the light source is reflected, for example. It is thus possible to classify the desired effects for a visualization application according to several categories. Effects belonging to the same category have common features such as a lighting function for light sources. For example, a materials category, a light source category, an atmosphere category, a geometry category can be used. The number of categories depends on the visual effects to produce, so it is not limited.
  • a rendering is a combination of one or more visual effects.
  • effect categories By defining effect categories, a rendering on a point of a th-dimensional space of a simulated environment can be expressed as an equation. The equation gives for example the color C of the point as a function of one or more effects belonging to one or more categories.
  • C can define C as the result of a function taking into account:
  • Each effect of each category can be defined by a unitary "shader".
  • the shaders corresponding to the effects of the same category may have characteristics in common. These characteristics in common can be for example: • for a light source category: a lighting intensity, a lighting direction, a lighting function;
  • the function overload makes it possible in particular to define a function generically for example at the level of the structure of "shaders” materials 1. Then this function can be described precisely at the level of each unitary “shader” such as the "shader” water 3 and the "shader” field 4.
  • a unitary "shader”, corresponding for example to an effect, can therefore be defined as a pseudo class of an object language with interfaces and a structure.
  • the unit “shaders” having the same common “shader” structure implement the same interfaces in particular.
  • the interfaces are defined according to a formalism adapted to the definition of common interfaces between the different unit “shaders".
  • the interfaces have the same structures, they take into account the same parameters for example, but the instructions performed in each interface function can be specific to each unit "shader".
  • a namespace can also be defined at each unitary "shader".
  • This namespace is used to define functions or function parameters, variables, with the same name for all "shaders" belonging to the same category for example but representing different functions or variables according to the namespace in which they are defined. This makes it easier for applications to integrate shaders. For example, a visualization application can then use the same names for the interfaces, regardless of the effects of a category used. This brings great flexibility in programming shader interfaces with applications. Visualization applications, for example, do not necessarily need to know in detail the functions, parameters and variables of each unitary "shader”. Visualization applications then only know the interfaces of the basic shaders.
  • Unit shaders and shader structures can be encoded in different languages.
  • An effective way of coding the different "shaders” is to use a language dedicated to graphics cards to control and optimize the execution parameters of "shader" programs on a GPU.
  • These languages can be for example: the GLSL signifying in Anglo-Saxon language Graphie Library Shading Language, the CG means in Anglo-Saxon language C like Graphie, the HLSL means in English language High Level Shading Language, developed by Microsoft.
  • a generator according to the invention can for example automatically compose a new “shader” 8: the “shader” field + spot + point 8 as being the composition of the following unit “shaders”: "Shader” field 4, the "shader” spot 6 and the “shader” point 7.
  • the generator of "shaders” according to the invention can also compose a “shader” field + spot 9 and a "shader” »Field 10.
  • unitary “shaders” and the modular management of these "shaders” makes it possible to simplify the combination of "shaders".
  • a definition of common interfaces between the different unit “shaders” makes it possible to combine them in a simple way without having to adapt the interfaces to each change of "shader” combination.
  • FIG. 2 schematically represents an example of operation of a "shader" generator 20 according to the invention.
  • the generator of "shaders” 20 can take into account the different unit “shaders” 21. Each "shader” unit 21 corresponds for example to an effect. Then, from an input list of different effects 22 of a scene of an environment to simulate for example, the generator of "shaders” calculates the useful combinations of "shaders” unit 21 for the scene. The list of different effects 22 is a description of combinations of effects and thus of unitary "shaders". An environment to be simulated which may comprise several scenes, the generator of "shaders" may take into account several lists of scene effects. for example. Next, the "shader” generator 20 generates combined "shaders" for the scene (s). Advantageously, the generator can take into account all the effects combinations necessary for an application. All combined shaders needed for an application can be generated. This allows to modify, dynamically and in real time, the effects during the execution of the application.
  • the combined shaders 24 are generated in a programming language specific to the graphics card such as the GLSL, the CG or the HLSL, for example.
  • the code of the combined "shaders” 24 is then compiled by a compiler 25 specific to the type of graphics card on which the executable programs of "shaders" 26 obtained after compilation are executed.
  • the formalism adopted for defining the common interfaces of the unitary "shaders” can be adapted to the structure of the native language of the graphics card. This allows upstream optimization of the management code of the GPU, said optimization being carried out by the compiler compiling combinations of "shaders". Indeed, the compilers are adapted to optimize the GPU management code. This advantageously makes it possible to avoid complex and time-consuming optimization phases. In addition, post code optimization requires optimization for each combination change.
  • Another advantage related to the use of native graphics card is to provide the usual users of graphics cards, tools for generating "shaders" in a language they already master. The use of the generator does not require any special knowledge.
  • the “shader” generator 20 is an executable program whose code can be written in any computer language.
  • the "shader” generator 20 may be coded with an object language such as the C ++ language.
  • the executable program of the "shader” generator 20 is generated by a compiler dedicated to the language in which the "shader” generator 20 is encoded.
  • Parameters can be taken into account by the generator of "shaders" 20 as an instance number of each effect 23. This makes it possible to optimize the code of the combined "shaders” 24 in particular in order to optimize the execution of the executable programs corresponding 26 shaders. Other parameters can be taken into account in order to optimize, for example, the shader generator processes 20.
  • FIG. 3 represents an example of integration of a "shader” generator 20 into a rendering engine.
  • a rendering engine is for example all the methods and devices implemented to display rendering A 30 of an image on a screen 31.
  • a viewing application 32 may use "shaders” to compose different effects on an image.
  • the visualization application 32 can take into account a list of different effects available in the "shaders” 24 generated by the "shader” generator 20. The visualization application 32 can therefore use in its code various coded effects in the combined shaders 24.
  • an executable program of "shader” 26 can give one or more executable rendering programs, such as the rendering Prg A, or the Prg rendering B, Prg being an abbreviation for program.
  • the "shader" generator 20 can generate a single key, encoded on a bit field, for each effect.
  • the different generated unique keys are provided to the visualization application 32.
  • the "shader" generator 20 and the visualization application 32 can compose from the unique effect keys a unique rendering key corresponding to a combination of desired effects.
  • a rendering key can be a bit field, corresponding, for example, to the sum of the keys of the desired effects.
  • a unique rendering key is then associated by the compiler 25 to each rendering program.
  • the viewing application 32 wishing to display a rendering A 30 composes a rendered key A.
  • the viewing application 32 supplies the rendered key A to the graphics card 32 which can quickly find the rendering Prg A corresponding to the key rendered A.
  • the rendered key A can be a number of a box of a table, each box of the table corresponding to a rendering program.
  • the graphics card 32 displays the image with the rendering A 30 on the screen 31.
  • FIG. 4 represents various possible steps of a method for generating and implementing "shaders" according to the invention in the context of a visualization application for example.
  • a first step 40 is a step of defining different categories, for example effects to be implemented for a given visualization application in particular.
  • the categories are defined generically and can be reused for another visualization application for example.
  • the definition of a category makes it possible to define a common "shader” structure that can be called “shader” base.
  • a basic "shader" corresponding to a category includes the definition of functions, interfaces, parameters and variables that are common to all "shaders" of the defined category.
  • a second step 41 is a step of defining the unitary "shaders".
  • unit shaders represent an effect belonging to a category.
  • the definition of a unitary "shader” is the definition of the body of functions and interfaces defined in the basic "shader" of the category to which the unitary "shader” belongs.
  • a unitary "shader” can also have functions, interfaces, parameters or variables of its own.
  • a third step 42 is a step of setting up the "shader" generator 20. This step makes it possible, for example, to specify a list of the desired effects 22 combining several unit effects as well as the number of instances of each effect 23.
  • the parameterization of the generator of "shaders” 20 also makes it possible to describe all the unit “shaders” to be taken into account by the generator in order to generate the effects 23.
  • a fourth step 43 is a step of generating the "shaders" combined 24 by the “shader” generator 20.
  • the combined “shaders” 24 thus generated notably make it possible to carry out the effects described in the list of effects 22 for a scene.
  • a fifth step 44 is a step of compiling the "shaders” combined 24 by the "shader” compiler 25, specific to the graphics card 33.
  • the compilation of the combined "shaders” 24 produces a set of executable programs "shaders” 26, that is, a set of rendering programs such as rendering prt A and rendering pream B.
  • a sixth step 45 is a step of using the rendering programs by the visualization application 32 to display an image with a rendering 30 on a screen 31.
  • a method of generating "shaders" as described can be used to perform calculations with a graphics card.
  • a graphics card can be used to perform parallel calculations such as vector calculation for example.
  • the application using the "shaders” is then a calculation application.
  • the unit "shaders” defined in this case can for example correspond to unit operations that can be grouped for example into families of operations according to their characteristics in order to define categories of operations.
  • the calculation application then combines the unit operations to perform complex operations on the graphics card in parallel. This allows to take advantage of the computing power of a graphics card at lower cost.
  • the method according to the invention advantageously makes it possible to define "shaders” in a modular way and to manage combinations of "shaders".
  • the definition of "shaders” in a modular way advantageously makes it possible to simplify the integration of "shaders” with a computing or visualization application.
  • the invention therefore allows a great flexibility of programming "shaders" for graphics cards. This flexibility translates in a time of development of "shaders” also resulting in a reduction in development costs of an application using a graphics card.
  • a "shader” scheduler does not need to manage the combinatorics of the different unit “shaders” to create a complex effect, in fact, the combination of unit “shaders” is automatically performed by the generator.
  • the generator makes it possible to automatically create combined "shaders", in particular thanks to the common interfaces between the unitary "shaders".
  • the definition of unitary keys for "shaders" allows an increase in the speed of execution of the choice of an executable program
  • This speed and flexibility thus advantageously make it possible to manage "shaders" for a real-time application, using a graphics engine, and having for example a large number of visual effects to achieve or a large number of complex calculations to perform.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Image Generation (AREA)
  • Processing Or Creating Images (AREA)

Abstract

La présente invention concerne un générateur de code source (20) pour une carte graphique utilisée par une application logicielle. Des 'shaders' unitaires comportant des caractéristiques communes sont définis selon une structure commune définie par un 'shader' de base. Le 'shader' de base comporte les caractéristiques communes des 'shaders' unitaires ainsi que des interfaces communes pour l'application logicielle. Le générateur de code source (20) est un générateur de 'shaders', générant un ou plusieurs 'shaders' (24) pour la carte graphique en combinant les 'shaders' unitaires (21) selon une ou plusieurs descriptions de combinaisons (22) de 'shaders' unitaires (21). Le générateur de code source (20) peut être utilisé afin de produire un code source pour la gestion de la combinaison d'effets visuels notamment pour une application générant des images en temps réel pour une simulation ou un jeu vidéo.

Description

Générateur de code source pour une carte graphique
La présente invention concerne un générateur de code source pour une carte graphique. Le générateur de code source peut être utilisé afin de produire un code source pour la gestion de combinaisons d'effets visuels notamment pour une application générant des images en temps réel pour une simulation ou un jeu vidéo.
Des simulations d'environnements, notamment dédiées à l'entraînement de pilotes d'aéronefs, nécessitent un réalisme élevé de représentation visuelle des environnements. En effet, la qualité de rendu de surfaces et de conditions atmosphériques influent beaucoup sur l'appréciation par le pilote de repères visuels utilisés dans les phases d'atterrissage et de décollage. Des applications logicielles de visualisation peuvent notamment être utilisées pour reproduire des environnements virtuels utilisés lors de simulations par exemple. Les applications logicielles de visualisation sont exécutées par un processeur d'un ordinateur. Ensuite, une carte graphique permet un affichage d'images, générées en temps réel par l'application logicielle, sur un écran relié à l'ordinateur.
Une carte graphique est une carte d'extension d'un ordinateur servant à stocker et à interpréter des images générées par une application logicielle de visualisation s'exécutant sur le processeur de l'ordinateur par exemple. La mise à jour continuelle des images sur l'écran, pour la visualisation d'une séquence d'images par exemple, est assurée par la carte graphique. La qualité du rendu est donc notamment liée aux performances de la carte graphique utilisée afin de permettre une représentation visuelle d'un environnement.
La mise au point de cartes graphiques à base de processeurs programmables graphiques, aussi nommés GPU, acronyme de Graphie Processing Unit en langage anglo-saxon, a amélioré de façon significative la génération d'images en temps réel. Cette amélioration concerne à la fois la qualité des images et les performances en terme de rapidité de rafraîchissement de l'affichage des images. De plus, la programmation de GPU a été rendue plus efficace et les programmes réalisés plus compréhensibles avec l'introduction de langages de programmation de parties spécifiques du GPU.
Le paramétrage d'une carte graphique, afin notamment de pouvoir disposer d'effets visuels sur les images affichées, est effectué par l'intermédiaire d'un programme communément désigné par l'expression anglo-saxonne « shader ». Le « shader » est un programme comportant un code source composé d'instructions écrites en un langage compréhensible. Un « shader » permet donc de paramétrer une ou plusieurs parties de la carte graphique. Le « shader » permet ainsi d'intervenir à différentes étapes d'une chaîne de traitements d'informations graphiques effectués par la carte graphique. Le code d'un «shader» est compilé par un compilateur dédié à chaque type de carte graphique afin d'obtenir un programme qui peut ensuite s'exécuter sur le GPU. L'évolution des formats d'images vers des définitions de plus en plus fines contraint les constructeurs de cartes graphiques à mettre au point des GPU de plus en plus puissants. Les processeurs GPU sont capables d'effectuer de multiples opérations en parallèle et en temps réel. Ces performances sont notamment utilisées par des logiciels de jeu afin de représenter des environnements de plus en plus réalistes, mais aussi de plus en plus par des logiciels de calculs effectuant des opérations de calculs complexes.
Cependant la programmation des « shaders » souffre d'un manque de flexibilité. En effet, un programme « shader » est une suite d'instructions de code généralement monobloc décrivant par exemple tous les effets d'affichages possibles pour une application de visualisation donnée. Les applications logicielles de visualisation combinant de plus en plus d'effets visuels, il est de plus en plus difficile d'intégrer les « shaders » avec les applications de visualisation. En particulier les interfaces entre les « shaders » et ces applications doivent être figées une fois pour toutes. Toute modification d'interface oblige potentiellement à réécrire quasi entièrement le code du « shader ». Une modification d'interface possède en outre un impact non négligeable sur les programmes des applications utilisant les « shaders ». Pour des applications de grande taille c'est à dire comportant beaucoup de modules fonctionnels faisant appel à une pluralité de « shaders », l'écriture des « shaders » est alors difficile et peu souple. Les capacités d'évolution des « shaders » au cours du développement de l'application, notamment l'ajout de nouveaux effets, nécessite de réécrire la quasi-totalité du code du « shader » concerné. En effet, un code de « shader » ne peut se structurer en combinant des sous-programmes élémentaires par exemple.
Dans une application de visualisation temps réelle, utilisée notamment pour de la simulation d'environnement, se pose la problématique de la combinaison des effets visuels. Par exemple, on souhaite afficher un terrain comportant une surface d'eau, ce terrain étant survolé par un phare l'éclairant. Les effets d'affichage à décrire pour afficher cette scène sont par exemple un effet terrain, un effet eau, et un effet source lumineuse. Pour réaliser un rendu d'affichage de l'effet source lumineuse sur la surface de l'eau ou sur le terrain, il faut décrire dans le « shader » les combinaisons possibles des trois effets : par exemple, le terrain sans source lumineuse, le terrain avec source lumineuse, l'eau sans source lumineuse, l'eau avec source lumineuse. De manière générale, le nombre de rendus à décrire dans le « shader » est égal au nombre de combinaisons d'effets qu'une application de visualisation réalise. L'ajout d'un nouvel effet nécessite donc l'écriture de l'ensemble des rendus correspondant aux nouvelles combinaisons des effets existants avec le nouvel effet. Ces contraintes induisent donc des coûts élevés de développement des applications de visualisation et des « shaders » associés, ainsi que des coûts élevés pour la maintenance et l'évolution de telles applications et de tels « shaders ».
Une première solution selon l'art antérieur est décrit par Niklas
Folkegard et Daniel Wesslen dans l'ouvrage Dynamic Code Génération for Realtime « shaders ». Cette première solution a pour objectif de réduire les redondances dans le codage des « shaders » notamment dans la description des effets. A cette fin, Folkegard et Wesslen proposent de diviser un programme « shader » en petites parties de code. Ensuite, un combineur assemble ces parties afin de construire un programme « shader » classique à partir de paramètres donnés par un utilisateur. Chaque partie comporte : • une description des données d'entrées ou de pré-conditions d'utilisation de la partie du code, • un code comportant des calculs et des opérations, et • des données de sorties ou de post-conditions d'utilisation de la partie du code.
Le combineur prend en compte les paramètres donnés par l'utilisateur, et assemble les parties compatibles en fonction des paramètres et des données d'entrée et de sortie de chaque partie. Le combineur fourni ensuite un nouveau code de « shader » comportant toutes les combinaisons possibles.
Le temps mis par le combineur pour assembler toutes les parties est d'autant plus long qu'il doit prendre en compte de nombreuses parties. Dans des applications utilisant une grande combinatoire d'effets, il est impossible de décrire chaque partie avec ses données d'entrée et de sortie, le niveau de décomposition étant trop fin.
Une deuxième solution permet notamment d'éviter des boucles et des branchements dynamiques dans le « shader ». Cette solution est mise en œuvre dans un moteur de jeux nommé Far Cry, marque déposée par Ubisoft Entertainment, et décrit par Carsten Wenzel dans Far Cry and DirectX, GameDevelopers Conférence, DirectX étant une marque déposée par Microsoft Corporation. Ce moteur de jeu effectue une pré-compilation de « shader » avec différents masques pour les sources de lumière. Ensuite, le moteur de jeu utilise un système de cache pour accélérer l'installation du « shader » au moment de l'utilisation d'un rendu par une application de visualisation. Ceci revient à utiliser un « shader » général comportant tous les effets combinés entre eux, en enlevant au moment de l'exécution du programme «shader» les effets non souhaités dans l'image en cours d'affichage. Cette technique est utilisable uniquement lorsque le nombre d'effets est limité, comme dans un jeu. Il est impossible de mettre en œuvre cette solution lorsque l'on possède une combinatoire importante d'effets.
Une troisième solution est proposée par Dominic Filion dans Recombinant Shaders in Game Programming Gems 5. Cette troisième solution utilise également un « shader » générique dans lequel sont définis des points d'insertion permettant de générer des variantes de « shader » par addition et soustraction de parties de code de « shader ». Ces points d'insertion définissent des traitements à effectuer suivant un contexte correspondant par exemple à un point d'insertion. Cette solution peut être réalisée par l'insertion d'instructions pré-processeur dans le code du « shader ». Les instructions pré-processeur permettent à un compilateur de déterminer le code à utiliser afin de générer un programme de « shader » exécutable. Le principal inconvénient de cette solution est le nombre limité de points d'insertion possibles. Cette limitation rend impossible la gestion de nombreuses combinaisons d'effets.
Une autre solution mise en œuvre par M. McCool et Al. est décrite notamment dans Shader Algebra et Metaprogramming GPUs with Sh. Cette solution repose sur un méta-langage nommé Sh, pouvant être utilisé afin de développer des « shaders». Un méta-langage est un langage formel servant à décrire un ou plusieurs langages de programmation comme par exemple les langages propres à la programmation d'un «shader». Ce méta-langage propose des opérateurs algébriques de connexion et de combinaison notamment pour des « shaders » unitaires considérés comme des objets. Un « shader » unitaire peut être un « shader » décrivant un effet. Le code des « shaders » est ensuite compilé afin de donner un code de « shader » usuel. Cette approche permet de faciliter l'intégration des « shaders » avec des applications de visualisation. Cependant le fait de développer un « shader » dans un autre langage qu'un langage de programmation propre aux « shaders », ainsi que le fait de développer un compilateur spécifique au méta-langage limite les possibilités d'optimiser les traitements des « shaders » par la carte graphique. Ceci peut avoir comme conséquence de dégrader les performances d'affichage temps réel d'une image complexe.
Un but de l'invention est notamment de pallier les inconvénients précités. A cet effet, l'invention a pour objet un générateur de code source pour une carte graphique, utilisée par une application logicielle. Des « shaders » unitaires comportant notamment des caractéristiques communes sont définis selon une structure commune définie par un « shader » de base. Le « shader » de base comporte par exemple les caractéristiques communes des « shaders » unitaires. Le « shader » de base peut comporter des interfaces communes pour l'application logicielle 32. Le générateur de code source est un générateur de « shaders », générant un ou plusieurs « shaders » pour la carte graphique en combinant les « shaders » unitaires selon une ou plusieurs descriptions de combinaisons de « shaders » unitaires.
Le générateur peut associer une clef unitaire à chaque « shader » unitaire et à chaque combinaison de « shaders » unitaires. Les clefs unitaires générées sont par exemple fournies à l'application logicielle.
L'application logicielle est par exemple une application de visualisation. Un « shader » unitaire correspond par exemple à un effet visuel. Une combinaison de « shaders » unitaires correspond par exemple à un rendu combinant plusieurs effets visuels.
L'application logicielle est par exemple une application de calcul. Le « shader » unitaire est par exemple une opération de calcul unitaire. Une combinaison de « shaders » unitaires est par exemple une opération de calcul complexe combinant plusieurs opérations de calcul unitaires.
Le code source des « shaders » générés est par exemple codé avec un langage GLSL, signifiant en langage anglo-saxon Graphie Library Shading Language, créé par OpenGL ARB. Le générateur peut être codé avec un langage objet.
L'invention a également pour objet un procédé de génération de code source pour une carte graphique. Le procédé comporte notamment les étapes suivantes : • définition de « shaders » unitaires. Les « shaders » unitaires comportant notamment des caractéristiques communes. Les « shaders » unitaires peuvent être définis selon une structure commune. La structure commune est par exemple définie par un « shader » de base comportant les caractéristiques communes des « shaders » unitaires. Le « shader » de base peut aussi comporter des interfaces communes pour l'application logicielle ; • génération, par un générateur de code source, de « shaders » pour la carte graphique en combinant les « shaders » unitaires selon une ou plusieurs descriptions de combinaisons de « shaders » unitaires. Une clef unitaire est par exemple associée à chaque « shader » unitaire. Une clef unitaire est par exemple associée à chaque combinaison de « shaders » unitaires résultant de la composition des clefs unitaires des « shaders » unitaires combinés.
L'application logicielle est par exemple une application de visualisation. Un « shader » unitaire correspondant par exemple à un effet visuel. Une combinaison de « shaders » unitaires correspond par exemple à un rendu combinant plusieurs effets visuels. L'application logicielle est par exemple une application de calcul.
Un « shader » unitaire est par exemple une opération de calcul unitaire. Une combinaison de « shaders » unitaires est par exemple une opération de calcul complexe combinant plusieurs opérations de calcul unitaires.
L'invention a notamment pour principaux avantages de permettre une programmation souple et peu coûteuse de « shaders » pour carte graphique, tout en optimisant les temps d'accès des applications logicielles aux programmes exécutables de « shaders ».
D'autres caractéristiques et avantages de l'invention apparaîtront à l'aide de la description qui suit, donnée à titre illustratif et non limitatif, et faite en regard des dessins annexés qui représentent : • la figure 1 : un exemple schématique d'une conception d'un
« shader » selon l'invention ;
• la figure 2 : un exemple de génération d'un programme exécutable par un GPU selon l'invention ;
• la figure 3 : un exemple d'utilisation d'un générateur de « shaders » selon l'invention ;
• la figure 4 : différentes étapes possibles de mise en œuvre de « shader » selon l'invention. La figure 1 représente un exemple schématique de diagramme de conception de « shaders ». Les « shaders » sont par exemple définis pour une application de visualisation
Pour afficher une image, un ou plusieurs effets visuels peuvent être utilisés afin d'obtenir un rendu combinant ces effets. Par exemple pour représenter une surface liquide éclairée par le soleil, on peut combiner un effet d'eau et un effet de soleil. Dans cet exemple, le soleil possède une fonction de source lumineuse tandis que l'eau a une fonction de matériau sur lequel se réfléchit la source lumineuse par exemple. On peut ainsi classer les effets désirés pour une application de visualisation selon plusieurs catégories. Les effets appartenant à une même catégorie ont des caractéristiques communes comme une fonction d'éclairage pour les sources lumineuses. Par exemple, on peut utiliser une catégorie matériaux, une catégorie source lumineuse, une catégorie atmosphère, une catégorie géométrie. Le nombre de catégories dépendant des effets visuels à produire, il n'est donc pas limité.
Pour afficher un point d'une image issue notamment d'une application de visualisation temps réelle, on utilise un programme de « shader » correspondant par exemple à un rendu. Un rendu est une combinaison d'un ou plusieurs effets visuels. En définissant des catégories d'effets, un rendu sur un point d'un espace th-dimensionnel d'un environnement simulé peut s'exprimer sous la forme d'une équation. L'équation donne par exemple la couleur C du point en fonction d'un ou plusieurs effets appartenant à une ou plusieurs catégories. On peut définir C comme le résultat d'une fonction prenant en compte :
• aucune, une ou plusieurs géométhes ;
• aucun, un ou plusieurs matériaux ;
• aucune, une ou plusieurs sources de lumière ;
• aucune, une ou plusieurs atmosphères. C peut être décrit de la manière suivante :
C = fonction(Géométrie, Matériaux, Source _ de _ lumière, Atmosphère)
Chaque effet de chaque catégorie peut être défini par un « shader » unitaire. Les « shaders » correspondants aux effets d'une même catégorie peuvent avoir des caractéristiques en commun. Ces caractéristiques en commun peuvent être par exemple : • pour une catégorie source de lumière : une intensité d'éclairage, une direction d'éclairage, une fonction d'éclairage ;
• pour une catégorie matériaux : une couleur, une texture, un pouvoir de réflexion, une fonction de réflexion de la lumière. Ceci permet de définir une structure commune de « shader » pour chaque catégorie de « shaders » unitaires définie. Cette structure commune de « shader » est par exemple une structure commune de « shaders » matériaux 1 ou une structure commune de « shaders » sources de lumière 2. Les « shaders » unitaires appartenant à la structure de « shaders » matériaux 1 comme le « shader » eau 3 et le « shader » terrain 4 ont donc une structure commune. Ces structures communes de « shaders » exploitent notamment des possibilités propres aux langages de programmation des « shaders » : la structure et la surcharge de fonction. La surcharge de fonction permet notamment de définir une fonction de manière générique par exemple au niveau de la structure de « shaders » matériaux 1. Puis cette fonction peut être décrite précisément au niveau de chaque « shader » unitaire comme le « shader » eau 3 et le « shader » terrain 4.
De la même manière que l'on définit une structure commune de « shaders » matériaux 1 , on peut définir une structure commune de « shaders » sources de lumière 2 pour un « shader » soleil 5, un « shader » spot 6, et un « shader » point 7, ce dernier correspondant à un effet relatif à une source de lumière ponctuelle.
Un « shader » unitaire, correspondant par exemple à un effet, peut donc être défini comme une pseudo classe d'un langage objet avec des interfaces et une structure. Ainsi, les « shaders » unitaires ayant une même structure de « shader » commune implémentent notamment les mêmes interfaces. Les interfaces sont définies selon un formalisme adapté à la définition d'interfaces communes entre les différents « shaders » unitaires. En pratique, les interfaces ont les mêmes structures, elles prennent en compte les mêmes paramètres par exemple, mais les instructions effectuées dans chaque fonction d'interface peuvent être spécifiques à chaque « shader » unitaire.
Un espace de nom peut également être défini au niveau de chaque « shader » unitaire. Cet espace de nom permet de définir des fonctions ou des paramètres de fonction, des variables, ayant le même nom pour tous les « shaders » appartenant à une même catégorie par exemple mais représentant des fonctions ou des variables différentes selon l'espace de nom dans lequel elles sont définies. Ceci permet de faciliter l'intégration des « shaders » par les applications. Par exemple, une application de visualisation peut alors utiliser les mêmes noms pour les interfaces, quels que soient les effets d'une catégorie utilisés. Ceci apporte une grande souplesse en matière de programmation des interfaces des « shaders » avec les applications. Les applications de visualisation, par exemple, n'ont pas nécessairement besoin de connaître en détail les fonctions, paramètres et variables de chaque « shader » unitaire. Les applications de visualisation connaissent alors uniquement les interfaces des « shaders » de base. Ceci rend relativement indépendant les « shaders » unitaires et les applications de visualisation dans le sens ou une évolution d'un « shader » unitaire a peu d'incidence sur le codage d'une application. Les « shaders » unitaires ainsi que les structures de « shader » peuvent être codés en différents langages. Une manière efficace de coder les différents « shaders » est d'utiliser un langage dédié aux cartes graphiques permettant ainsi de maîtriser et d'optimiser des paramètres d'exécution des programmes de « shader » sur un GPU. Ces langages peuvent être par exemple : le GLSL signifiant en langage anglo-saxon Graphie Library Shading Langage, le CG signifiant en langage anglo-saxon C like Graphie, le HLSL signifiant en langage anglo-saxon High Level Shading Langage, développé par Microsoft.
A partir de « shaders » unitaires, un générateur selon l'invention peut par exemple composer de manière automatique un nouveau « shader » 8 : le « shader » terrain + spot + point 8 comme étant la composition des « shaders » unitaires suivant : le « shader » terrain 4, le « shader » spot 6 et le « shader » point 7. De la même manière, le générateur de « shaders » selon l'invention peut également composer un « shader » terrain + spot 9 et un « shader » terrain 10.
La définition de « shaders » unitaires et la gestion de ces « shaders » unitaires de manière modulaire permet de simplifier la combinaison des « shaders ». Notamment, une définition d'interfaces communes entre les différents « shaders » unitaires permet de les combiner de manière simple sans avoir à adapter les interfaces à chaque changement de combinaison de « shader ».
La figure 2 représente de manière schématique un exemple de fonctionnement d'un générateur de « shaders » 20 selon l'invention.
Le générateur de « shaders » 20 peut prendre en compte les différents « shaders » unitaires 21. Chaque « shader » unitaire 21 correspond par exemple à un effet. Ensuite, à partir d'une liste d'entrée de différents effets 22 d'une scène d'un environnement à simuler par exemple, le générateur de « shaders » calcule les combinaisons utiles de « shaders » unitaires 21 pour la scène. La liste des différents effets 22 est une description de combinaisons d'effets et donc de « shaders » unitaires 21. Un environnement à simuler pouvant comporter plusieurs scènes, le générateur de « shaders » 20 peut prendre en compte plusieurs listes d'effets de scène par exemple. Ensuite, le générateur de « shaders » 20 génère des « shaders » combinés 24 pour la ou les scènes. Avantageusement, le générateur peut prendre en compte toutes les combinaisons d'effets nécessaires pour une application. Tous les « shaders » combinés nécessaires à une application peuvent donc être générés. Ceci permet de modifier, dynamiquement et en temps réel, les effets au cours de l'exécution de l'application.
Les « shaders » combinés 24 sont générés dans un langage de programmation propre à la carte graphique comme le GLSL, le CG ou le HLSL par exemple. Le code des « shaders » combinés 24 est ensuite compilé par un compilateur 25 propre au type de carte graphique sur laquelle s'exécute les programmes exécutables de « shaders » 26 obtenus après compilation.
L'utilisation d'un langage dédié aux cartes graphiques, aussi nommé langage natif de carte graphique, permet avantageusement de réutiliser des « shaders » déjà définis pour d'autres applications et de les utiliser sans traduction vers un autre langage.
Avantageusement, le formalisme adopté pour définir les interfaces communes des « shaders » unitaires peut être adapté à la structure du langage natif de la carte graphique. Ceci permet une optimisation en amont du code de gestion du GPU, ladite optimisation étant effectuée par le compilateur compilant les combinaisons de « shaders ». En effet, les compilateurs sont adaptés à optimiser le code de gestion des GPU. Ceci permet avantageusement d'éviter des phases d'optimisation complexes et coûteuses en temps. De plus, une optimisation du code à posteriori nécessite une optimisation à chaque modification de combinaison.
Un autre avantage lié à l'utilisation de code natif des cartes graphiques est de fournir aux utilisateurs usuels des cartes graphiques, des outils de génération de « shaders » dans un langage qu'ils maîtrisent déjà. L'utilisation du générateur ne nécessite donc pas de connaissances particulières.
Le générateur de « shaders » 20 est un programme exécutable dont le code peut être écrit en un langage informatique quelconque. Par exemple le générateur de « shaders » 20 peut être codé avec un langage objet comme le langage C++. Le programme exécutable du générateur de « shaders » 20 est généré par un compilateur dédié au langage dans lequel est codé le générateur de « shaders » 20.
Des paramètres peuvent être pris en compte par le générateur de « shaders » 20 comme un nombre d'instance de chaque effet 23. Ceci permet d'optimiser le code des « shaders » combinés 24 afin notamment d'optimiser l'exécution des programmes exécutables de « shaders » 26 correspondant. D'autres paramètres peuvent être pris en compte afin d'optimiser par exemple les traitements du générateur de « shaders » 20.
Cette manière de générer les « shaders » combinés 24 permet d'écrire le code des « shaders » unitaires 21 une seule fois. Le code des « shaders » unitaires 21 est ensuite utilisé par le générateur de « shaders » 20 afin de générer le code des « shaders » combinés 24.
L'utilisation d'un formalisme adapté à la définition d'interfaces communes permet également de limiter les contraintes de prise en compte des combinaisons de « shaders » unitaires par le compilateur adapté à la carte graphique utilisée ainsi que par le générateur de « shaders » 20.
La figure 3 représente un exemple d'intégration d'un générateur de « shaders » 20 dans un moteur de rendu. Un moteur de rendu est par exemple l'ensemble des procédés et dispositifs mis en œuvre pour afficher un rendu A 30 d'une image sur un écran 31. Une application de visualisation 32 peut utiliser des « shaders » afin de composer différents effets sur une image. L'application de visualisation 32 peut prendre en compte une liste de différents effets disponibles dans les « shaders » 24 générés par le générateur de « shaders » 20. L'application de visualisation 32 peut donc faire appel dans son code à différents effets codés dans les « shaders » combinés 24.
Dans un premier temps, pendant le lancement de l'application de visualisation 32, le générateur de « shaders » 20 génère les « shaders » combinés 24. Ensuite les « shaders » combinés 24 sont compilés par un compilateur de « shader » 26. Un programme exécutable de « shader » 26, associé à un rendu, est ensuite stocké dans la carte graphique 33 pour être exécuté par la carte graphique 33 sur demande de l'application de visualisation 32. Par exemple, un programme exécutable de « shader » 26 peut donner un ou plusieurs programmes exécutables de rendu, comme le Prg rendu A, ou le Prg rendu B, Prg étant une abréviation pour programme.
Afin d'accélérer l'affichage d'un rendu, le générateur de « shaders » 20 peut générer une clef unique, codée sur un champ de bits, pour chaque effet. Les différentes clefs uniques générées sont fournies à l'application de visualisation 32. Le générateur de « shaders » 20 et l'application de visualisation 32 peuvent composer à partir des clefs uniques d'effets une clef unique de rendu correspondant à une combinaison d'effets souhaités. Une clef de rendu peut être un champ de bit, correspondant par exemple à la somme des clefs des effets souhaités. Une clef de rendu unique est ensuite associée par le compilateur 25 à chaque programme de rendu. Par exemple sur la figure 3, l'application de visualisation 32 souhaitant afficher un rendu A 30 compose une clef rendu A. Puis l'application de visualisation 32 fourni la clef rendu A à la carte graphique 32 qui peut rapidement retrouver le Prg rendu A correspondant à la clef rendu A. Par exemple, la clef rendu A peut être un numéro d'une case d'un tableau, chaque case du tableau correspondant à un programme de rendu. Ensuite la carte graphique 32 affiche l'image avec le rendu A 30 sur l'écran 31.
La génération d'une clef unique peut être généralisée à d'autres types d'applications : une clef unique peut être associée à chaque « shader » unitaire et à chaque composition de « shaders » unitaires. La figure 4 représente différentes étapes possibles d'un procédé de génération et de mise en œuvre de « shaders » selon l'invention dans le cadre d'une application de visualisation par exemple.
Une première étape 40 est une étape de définition de différentes catégories par exemple d'effets à mettre en œuvre pour une application de visualisation donnée notamment. Les catégories sont définies de manière générique et peuvent être réutilisées pour une autre application de visualisation par exemple. Par exemple on peut définir une catégorie matériaux, une catégorie source lumineuse, une catégorie atmosphère, une catégorie géométrie. La définition d'une catégorie permet de définir une structure de « shader » commune que l'on peut nommer « shader » de base. Un « shader » de base correspondant à une catégorie comporte notamment la définition de fonctions, d'interfaces, de paramètres et de variables qui sont communs à tous les « shaders » de la catégorie définie.
Une deuxième étape 41 est une étape de définition des « shaders » unitaires. Les « shaders » unitaires représentent par exemple un effet appartenant à une catégorie. La définition d'un « shader » unitaire est la définition du corps des fonctions et des interfaces définies dans le « shader » de base de la catégorie à laquelle appartient le « shader » unitaire. Un « shader » unitaire peut aussi comporter des fonctions, des interfaces, des paramètres ou des variables qui lui sont propres.
Une troisième étape 42 est une étape de paramétrage du générateur de « shaders » 20. Cette étape permet notamment de préciser par exemple une liste des effets souhaités 22 combinant plusieurs effets unitaires ainsi que le nombre d'instance de chaque effet 23. Le paramétrage du générateur de « shaders » 20 permet également de décrire l'ensemble des « shaders » unitaires à prendre en compte par le générateur afin de générer les effets 23.
Une quatrième étape 43 est une étape de génération des « shaders » combinés 24 par le générateur de « shaders » 20. Les « shaders » combinés 24 ainsi générés permettent notamment de réaliser les effets décrits dans la liste des effets 22 pour une scène. Une cinquième étape 44 est une étape de compilation des « shaders » combinés 24 par le compilateur de « shader » 25, propre à la carte graphique 33. La compilation des « shaders » combinés 24 produit un ensemble de programmes exécutables « shaders » 26, c'est à dire un ensemble de programmes de rendus comme les prg de rendu A et prg de rendu B.
Une sixième étape 45 est une étape d'utilisation des programmes de rendus par l'application de visualisation 32 afin d'afficher une image avec un rendu 30 sur un écran 31.
Un procédé de génération de « shaders » tel que décrit peut être utilisé pour réaliser des calculs avec une carte graphique. Une carte graphique peut être utilisée afin d'effectuer des calculs parallèles comme du calcul vectoriel par exemple. L'application utilisant les « shaders » est alors une application de calcul.
Les « shaders » unitaires définis dans ce cas peuvent par exemple correspondre à des opérations unitaires pouvant être regroupées par exemple en familles d'opérations selon leurs caractéristiques afin de définir des catégories d'opérations. L'application de calcul combinant ensuite les opérations unitaires afin d'effectuer en parallèle des opérations complexes sur la carte graphique. Ceci permet de profiter de la puissance de calcul d'une carte graphique à moindre coût.
Il est alors très intéressant de pouvoir utiliser une méthode souple et économique de programmation de « shader » telle que la génération de « shaders » selon l'invention.
Le procédé selon l'invention permet avantageusement de définir des « shaders » de façon modulaire et de gérer des combinaisons de « shaders ». La définition des « shaders » de manière modulaire permet avantageusement de simplifier l'intégration des « shaders » avec une application de calcul ou de visualisation.
L'invention permet donc une grande souplesse de programmation des « shaders » destinés à des cartes graphiques. Cette souplesse se traduit en un gain de temps de développement des « shaders » entraînant également une réduction des coûts de développement d'une application utilisant une carte graphique. Notamment, un programmateur de « shader » n'a pas besoin de gérer la combinatoire des différents « shaders » unitaires pour créer un effet complexe, en effet, la combinaison des « shaders » unitaires est réalisée automatiquement par le générateur.
Avantageusement, le générateur permet de créer de manière automatique des « shaders » combinés, notamment grâce aux interfaces communes entre les « shaders » unitaire. La définition de clefs unitaires pour les « shaders » permet une augmentation de la rapidité d'exécution du choix d'un programme exécutable
« shader » par l'application.
Cette rapidité et cette souplesse permettent donc avantageusement de gérer des « shaders » pour une application temps réelle, utilisant un moteur graphique, et possédant par exemple un nombre important d'effets visuels à réaliser ou un nombre important de calculs complexes à effectuer.

Claims

REVENDICATIONS
1. Générateur de code source (20) pour une carte graphique (33) utilisée par une application logicielle (32) caractérisé en ce que :
• des « shaders » unitaires (3, 4, 5, 6, 7), comportant des caractéristiques communes, sont définis selon une structure commune de « shader » définie par un « shader » de base (1 , 2), ledit « shader » de base (1 , 2) comportant les caractéristiques communes des « shaders » unitaires (3, 4, 5, 6, 7) ainsi que des interfaces communes pour l'application logicielle (32) ;
• ledit générateur de code source (20) est un générateur de « shaders » (20), générant un ensemble de « shaders » combinés (24) pour la carte graphique (33), lesdits « shaders » combinés résultant de la combinaison des « shaders » unitaires (3, 4, 5, 6, 7) selon une ou plusieurs descriptions de combinaisons (22) de « shaders » unitaires (3, 4, 5, 6, 7), lesdits « shaders » combinés étant utilisés par l'application logicielle (32) ; les « shaders » unitaires, les « shaders » de base et les « shaders » générés étant codés dans un langage dédié à la carte graphique.
2. Générateur selon la revendication 1 , caractérisé en ce qu'il associe une clef unitaire à chaque « shader » unitaire (3, 4, 5, 6, 7) et à chaque combinaison (8, 9, 10) de « shaders » unitaires (3, 4, 5, 6, 7), les clefs unitaires générées étant fournies à l'application logicielle (32).
3. Générateur selon l'une quelconque des revendications précédentes, caractérisé en ce que l'application logicielle (32) est une application de visualisation, un « shader » unitaire (3, 4, 5, 6, 7) correspondant à un effet visuel, une combinaison (8, 9, 10) de « shaders » unitaires (3, 4, 5, 6, 7) correspondant à un rendu combinant plusieurs effets visuels.
4. Générateur selon l'une quelconque des revendications précédentes, caractérisé en ce que l'application logicielle (32) est une application de calcul, un « shader » unitaire (3, 4, 5, 6, 7) étant une opération de calcul unitaire, une combinaison 8, 9, 10 de « shaders » unitaires (3, 4, 5, 6, 7) étant une opération de calcul complexe combinant plusieurs opérations de calcul unitaires.
5. Générateur selon l'une quelconque des revendications précédentes, caractérisé en ce que le code source des « shaders » générés (24) est codé avec un langage GLSL, signifiant en langage anglo-saxon Graphie Library Shading Language.
6. Générateur selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il est codé avec un langage objet.
7. Procédé de génération de code source pour une carte graphique (33), caractérisé en ce qu'il comporte au moins les étapes suivantes :
• définition de « shaders » unitaires (3, 4, 5, 6, 7), les « shaders » unitaires (3, 4, 5, 6, 7), comportant des caractéristiques communes, étant définis selon une structure commune de « shader » définie par un « shader » de base (1 , 2) , ledit « shader » de base (1 , 2) comportant les caractéristiques communes des « shaders » unitaires (3, 4, 5, 6, 7) ainsi que des interfaces communes pour l'application logicielle (32) ;
• génération, par un générateur de code source (20), d'un ensemble de « shaders » combinés (24) pour la carte graphique (33) , lesdits « shaders » combinés résultants de la combinaison des « shaders » unitaires (3, 4, 5, 6, 7) selon une ou plusieurs descriptions de combinaisons (22) de « shaders » unitaires (3, 4, 5, 6, 7), lesdits « shaders » combinés étant utilisés par l'application logicielle (32) ; les « shaders » unitaires, les « shaders » de base et les « shaders » générés étant codés dans un langage dédié à la carte graphique.
8. Procédé selon la revendication 7, caractérisé en ce que :
• une clef unitaire est associée à chaque « shader » unitaire (3, 4, 5, 6, 7) ; • une clef unitaire est associée à chaque combinaison (8, 9, 10) de « shaders » unitaires (3, 4, 5, 6, 7), résultant de la composition des clefs unitaires des « shaders » unitaires combinés.
9. Procédé selon l'une quelconque des revendications 7 et 8, caractérisé en ce que l'application logicielle (32) est une application de visualisation, un « shader » unitaire (3, 4, 5, 6, 7) correspondant à un effet visuel, une combinaison (8, 9, 10) de « shaders » unitaires (3, 4, 5, 6, 7) correspondant à un rendu combinant plusieurs effets visuels.
10. Procédé selon l'une quelconque des revendications 7 à 9, caractérisé en ce que l'application logicielle (32) est une application de calcul, un « shader » unitaire (3, 4, 5, 6, 7) étant une opération de calcul unitaire, une combinaison (8, 9, 10) de « shaders » unitaires (3, 4, 5, 6, 7) étant une opération de calcul complexe combinant plusieurs opérations de calcul unitaires.
EP08760517A 2007-06-05 2008-06-04 Generateur de code source pour une carte graphique Withdrawn EP2153319A1 (fr)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0704011A FR2917199B1 (fr) 2007-06-05 2007-06-05 Generateur de code source pour une carte graphique
PCT/EP2008/056937 WO2008148818A1 (fr) 2007-06-05 2008-06-04 Generateur de code source pour une carte graphique

Publications (1)

Publication Number Publication Date
EP2153319A1 true EP2153319A1 (fr) 2010-02-17

Family

ID=38846856

Family Applications (1)

Application Number Title Priority Date Filing Date
EP08760517A Withdrawn EP2153319A1 (fr) 2007-06-05 2008-06-04 Generateur de code source pour une carte graphique

Country Status (5)

Country Link
US (1) US20110032258A1 (fr)
EP (1) EP2153319A1 (fr)
CA (1) CA2689566A1 (fr)
FR (1) FR2917199B1 (fr)
WO (1) WO2008148818A1 (fr)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9412193B2 (en) 2011-06-01 2016-08-09 Apple Inc. Run-time optimized shader program
US10210591B2 (en) 2015-02-02 2019-02-19 Microsoft Technology Licensing, Llc Optimizing compilation of shaders
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7548238B2 (en) * 1997-07-02 2009-06-16 Nvidia Corporation Computer graphics shader systems and methods
US6496190B1 (en) * 1997-07-02 2002-12-17 Mental Images Gmbh & Co Kg. System and method for generating and using systems of cooperating and encapsulated shaders and shader DAGs for use in a computer graphics system
US7015909B1 (en) * 2002-03-19 2006-03-21 Aechelon Technology, Inc. Efficient use of user-defined shaders to implement graphics operations
US7027056B2 (en) * 2002-05-10 2006-04-11 Nec Electronics (Europe) Gmbh Graphics engine, and display driver IC and display module incorporating the graphics engine
US7176917B1 (en) * 2002-08-09 2007-02-13 Avid Technology, Inc. Visual programming interface for a three-dimensional animation system for defining real time shaders using a real-time rendering engine application programming interface
US7385607B2 (en) * 2004-04-12 2008-06-10 Nvidia Corporation Scalable shader architecture
JP2009500730A (ja) * 2005-07-01 2009-01-08 メンタル イメージズ ゲーエムベーハー コンピュータ・グラフィック・シェイダー・システムおよび方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
See references of WO2008148818A1 *

Also Published As

Publication number Publication date
FR2917199B1 (fr) 2011-08-19
WO2008148818A1 (fr) 2008-12-11
FR2917199A1 (fr) 2008-12-12
CA2689566A1 (fr) 2008-12-11
US20110032258A1 (en) 2011-02-10

Similar Documents

Publication Publication Date Title
US10970911B2 (en) Graphics processing chip with machine-learning based shader
US11087430B2 (en) Customizable render pipelines using render graphs
US6717599B1 (en) Method, system, and computer program product for implementing derivative operators with graphics hardware
Parisi Programming 3D Applications with HTML5 and WebGL: 3D Animation and Visualization for Web Pages
US9053582B2 (en) Streaming light propagation
US8189004B2 (en) Translating Renderman shading language code
EP3861432B1 (fr) Procédé pour générer une liaison entre une bibliothèque c/c++ et un langage interprété, et mise en oeuvre de ce procédé pour la transformation d'un modèle tridimensionnel (3d)
CN108701366A (zh) 用于图形处理中的阴影光线的树遍历的开始节点确定
CN119648881A (zh) 基于光线追踪与光栅化的渲染方法、装置、设备及介质
EP2153319A1 (fr) Generateur de code source pour une carte graphique
CN104508711A (zh) 用于渲染计算机生成动画的资源分区
Peddie Compute accelerators and other gpus
US20250111575A1 (en) System and method for the automated creation of shaders in 3d graphics design
Peddie Ray-tracing hardware
WO2020005469A1 (fr) Unité d'évaluation d'expression hautes performances
US9324182B2 (en) Single pass radiosity from depth peels
Peddie The GPU Environment—Software Extensions and Custom Features
Hempe Bridging the gap between rendering and simulation frameworks: concepts, approaches and applications for modern multi-domain VR simulation systems
Pêcheux Become a Unity Shaders Guru: Create advanced game visuals using code and graphs in Unity 2022
Ragan-Kelley Practical interactive lighting design for RenderMan scenes
Macedo et al. Comparison of acceleration data structures for high quality fast reflections of static and deformable models in walkthrough animations
US20240371069A1 (en) Dynamic Host Renderer For Artificial Reality Systems
Peddie The Major GPU Eras
Shihan et al. Adaptive volumetric light and atmospheric scattering
Mazouka et al. Efficient Scene Image Synthesis Based on Pipeline Technology

Legal Events

Date Code Title Description
PUAI Public reference made under article 153(3) epc to a published international application that has entered the european phase

Free format text: ORIGINAL CODE: 0009012

17P Request for examination filed

Effective date: 20091203

AK Designated contracting states

Kind code of ref document: A1

Designated state(s): AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HR HU IE IS IT LI LT LU LV MC MT NL NO PL PT RO SE SI SK TR

AX Request for extension of the european patent

Extension state: AL BA MK RS

17Q First examination report despatched

Effective date: 20100309

DAX Request for extension of the european patent (deleted)
STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: THE APPLICATION IS DEEMED TO BE WITHDRAWN

18D Application deemed to be withdrawn

Effective date: 20150714