IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Ecrire un driver graphique de base. (Juste pour le fun)


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Ecrire un driver graphique de base. (Juste pour le fun)
    Salut, je souhaiterai écrire un driver graphique de base, juste pour le fun, une technologie similaire à OpenCL avec juste des allocations de buffers, du transfert de données, etc...

    Mais je ne sais pas par ou commencer.

    Comme d'habitude je n'ai pas envie de rentrer dans un code existant volumineux, surtout si celui-ci n'est pas documenté.

    Car, j'ai vraiment du mal de trouver de tutoriels C++ là dessus d'autant plus que cela dépend fort de chaque modèle de carte graphique.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 264
    Par défaut
    OpenCL n'est pas un driver graphique mais une API.

    Que veux-t faire exactement ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Invité
    Invité(e)
    Par défaut
    De la programmation au niveau de la carte graphique, mais pas au niveau de l'api, à plus bas niveau. (Comme on le fait pour le CPU quoi!)

    Le problème des apis est quelle ne sont pas toujours supportée par les cartes graphiques. (Contrairement à un langage qui lui, l'est, comme par exemple, le c++ mais ce n'est que pour le CPU. :/)

    J'ai l'impression qu'il faudra que j'attente la sortie de VULKAN et que je m'achète un troisième PC. :/

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    De la programmation au niveau de la carte graphique
    On ne peux pas programmer dans les cartes graphiques. Le seul code que nous pouvons exécuter sur une carte graphique est celui des shaders (GLSL/HLSL), ou des kernels (OpenCL/CUDA/...).

    Au final, les cartes graphiques sont un bloc opaque et on ne peux pas y accéder facilement.
    La piste que je vous donnerai, qui est la plus proche de ce que vous voulez faire, c'est Mesa. Plus bas niveau encore : Gallium.

    C'est une implémentation, libre et open source d'OpenGL. Par contre, lorsqu'ils arrivent à jouer avec la carte graphique, c'est qu'ils ont compris comment elle fonctionnait, souvent en reverse engeenering.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 264
    Par défaut
    C'est une implémentation, libre et open source d'OpenGL. Par contre, lorsqu'ils arrivent à jouer avec la carte graphique, c'est qu'ils ont compris comment elle fonctionnait, souvent en reverse engeenering.
    Je rajouterai que du coup si ça marche pour une carte, ça ne marchera pas pour une autre.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai tenté ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #include <utility>
    #include <CL/cl.hpp>
    #include <cstdio>
    #include <cstdlib>
    #include <fstream>
    #include <iostream>
    #include <string>
    #include <iterator>
    inline void checkErr(cl_int err, const char * name) {
        if (err != CL_SUCCESS) {
          std::cerr << "ERROR: " << name  << " (" << err << ")" << std::endl;
          exit(EXIT_FAILURE);
       }
    }
    const std::string hw("Hello World\n");
    int main(void) {
        cl_int err;
        std::vector< cl::Platform > platformList;
        cl::Platform::get(&platformList);
        checkErr(platformList.size()!=0 ? CL_SUCCESS : -1, "cl::Platform::get");
        std::cerr << "Platform number is: " << platformList.size() << std::endl;std::string platformVendor;
        platformList[0].getInfo((cl_platform_info)CL_PLATFORM_VENDOR, &platformVendor);
        std::cerr << "Platform is by: " << platformVendor << "\n";
        cl_context_properties cprops[3] = {CL_CONTEXT_PLATFORM, (cl_context_properties)(platformList[0])(), 0};cl::Context context(
          CL_DEVICE_TYPE_GPU,
          cprops,
          NULL,
          NULL,
          &err);
        checkErr(err, "Context::Context()");
        return EXIT_SUCCESS;
    }
    Mais ça ne fonctionne pas, il me dit que je n'ai qu'une plateforme de type CPU, hors que j'ai bien une carte graphique dans mon ordinateur.

    Je vais aller voir sur le forum d'openCL, si je ne peux pas trouver une solution à ce problème.

    Car avec mesa ça fonctionne bien.

Discussions similaires

  1. Ecrire un driver pour linux
    Par otspot dans le forum C
    Réponses: 1
    Dernier message: 30/12/2008, 17h45
  2. Juste pour le fun - Tri alphabétique d'un tableau()
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 23/05/2008, 19h43
  3. [juste pour le fun] Recensement des rangs spéciaux DVP
    Par guidav dans le forum La taverne du Club : Humour et divers
    Réponses: 2
    Dernier message: 26/07/2007, 09h00
  4. Driver graphique de base
    Par pfeuh dans le forum C
    Réponses: 2
    Dernier message: 31/01/2007, 10h57
  5. export base donnée pour représentation graphique des tables
    Par calitom dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 04/11/2006, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo