pstlspoc Index du Forum

pstlspoc
SPOC

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Intéropérabilité SPOC - OpenGL
Aller à la page: <  1, 2, 3, 4, 5, 6, 7, 8  >
 
Poster un nouveau sujet   Répondre au sujet    pstlspoc Index du Forum -> pstlspoc -> pstlspoc
Sujet précédent :: Sujet suivant  
Auteur Message
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Ven 12 Avr - 13:08 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Et maintenant tout marche. Je suis sur skype, on peut en parler qd vous voulez.

Revenir en haut
Publicité






MessagePosté le: Ven 12 Avr - 13:08 (2013)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Ven 12 Avr - 13:09 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Avez-vous modifier le makefile ou les includes pour lancer correctement clCreateFromGLBuffer?

Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Ven 12 Avr - 14:07 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

J'ai fait un petit test rapide avec un kernel qui modifie le vbo (appelé a chaque frame).
Là j’écarte un peu certains points de la sphère.
J'ai coupé la rotation pour mieux voir mes modifications.


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Ven 12 Avr - 14:14 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Le kernel qui fait ça 
 
Code:

__kernel void 
calcul_sphere_vb2(__global float* A, const float rayon, const float d, const int taille, const int step)
{


  float r = (float) rayon;
  int detail = (int) d;
  int teta = 45;
  int gama = 45;
  
  float x=0.0;
  float y=0.0;
  float z=0.0;
  
  int threadID = get_global_id(0);
  
  int valteta = (threadID)/((teta*detail)+detail-1);
  int valgama = (threadID)%((gama*detail)+detail-1);
  
  if (threadID < 100*3) 
    r += step*(rayon/1000); 
  x = r*cos((float)valteta)*cos((float)valgama);
  y = r*cos((float)valteta)*sin((float)valgama);
  z = r*sin((float)valteta);
  
  int index = (threadID)*3;
  
  if (index < taille) {
    //   if (index%3 == 0 | index==0) {
      A[index] = x; index++;
      A[index] = y; index++;
      A[index] = z;
      // }
  }
  
}




Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Ven 12 Avr - 17:27 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Ok,merci pour le kernel.

CL GL Sharing V4.0:

http://www.sendspace.com/file/acy2ou

J'ai remplacé cette ligne:
    glBufferDataNull GL_ARRAY_BUFFER (!taille) GL_STATIC_DRAW;
par cette ligne:
    glBufferDataNull GL_ARRAY_BUFFER (ba_sizeof !verticesBA_GPU) GL_STATIC_DRAW;
et j'obtiens une sphère entière.


depuis que j'ai changé le code de spoc au niveau des properties pour creer le context (device init)
j'ai une erreur avec la sphère GPU OpenCL. Avez-vous aussi cette erreur?


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Ven 12 Avr - 17:37 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

pas d'erreur particulière chez moi en GPU OpenCL.
Par contre j'ai un plantage qd j'augmente les détails sur GPU VBO.


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Ven 12 Avr - 19:16 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

 Chez moi il y a une erreur après un bout de temps: clEnqueueWriteBuffer pose problème, mais je n'ai pas de problème quand

j'augmente le niv. détail GPU VBO (seul problème est que pour l'instant il n'y a rien au dessus de 1)

Code:
IN: spoc_opencl_cpu_to_device@ 548
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

IN: spoc_opencl_cpu_to_device@ 548
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).

IN: spoc_opencl_cpu_to_device@ 548
Fatal error: exception OpenCL.MEM_OBJECT_ALLOCATION_FAILURE
CL_MEM_OBJECT_ALLOCATION_FAILURE error executing CL_COMMAND_WRITE_BUFFER on GeForce GTX 675M (Device 0).
 


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Ven 12 Avr - 20:21 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

A part ça, chez vous ça fonctionne?
Si vous avez une idée vous pouvez corriger le bug, sinon ça vaut sans doute le coup de continuer a implanter de scoses (textures etc ou exemple plus poussé) pour avoir plus de choses a raconter à la fin du projet. Avez-vous bien mis le code de libération du vecteur s'il existe déjà :
if (d_A) { clReleaseMemObject(d_A)} ou un truc dans ce genre.


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Ven 12 Avr - 20:54 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

oui part ca ca fonctionne et la sphère est complete chez moi.
je vais travailler à la factorisation du code au bufferdata et je vais voir ce qui peche pour l'incrément.


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Mer 17 Avr - 23:19 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

CL GL Sharing V5.0:
http://www.sendspace.com/file/5b43k5

- Factorisation code: les fonctions OpenCL sont cachés
- Nouvelle spécification : 
       vector_to_vbo (rend un id de vbo)
       run_kernelVBO (je ne maitrise vraiment pas le coté objet d'Ocaml, donc run içi est comme le run deprecated)
- Je n'arrive pas à générer la ocamldoc


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Jeu 18 Avr - 10:10 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

J'ai regardé rapidement le code.
vector_to_vbo est une bonne idée (on en avait déjà parlé), ça simplifie beaucoup l'écriture du code
run_kernVBO est une demie bonne idée je pense. Que ce passe-t'il si j'ai plusieurs vbo?  Il faudrait peut-être pouvoir passer une liste de VBO et pour chaque élément de la liste faire acquire puis après le kernel faire pareil avec release... mais si j'ai plusieurs kernel à lancer sur les memes vbo on va avoir une perte de performances car on va faire deux fois acquire/release alors qu'un seul suffirait.
Je pense qu'on peut continuer a demander au programmeur caml d'utiliser acquire release et flush lui-même...
En tout cas pour l'instant...
Je vais lire le rapport reçu. Vous pouvez attaquer votre partie (si ce n'est déjà fait) et/ou attaquer la gestion des textures (ça devrait être très proche des vbo qd même).


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Jeu 18 Avr - 20:15 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

pour les textures je pense qu'il faut changé le Spoc.Vector:

image_data et spoc.vector ne correspondent pas il me semble.

glTexImage2D:
(http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml)

val glTexImage2D : target:TexTarget.target_2d ->
 level:int ->
 internal_format:InternalFormat.internal_format ->
 width:int ->
 height:int ->
 format_:pixel_data_format ->
 type_:pixel_data_type -> pixels:image_data -> unit


glMLite :
(http://www.linux-nantes.org/~fmonnier/ocaml/GL/doc/GL.html)

type image_data = (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Genarray.t

Spoc vecteur:


val int32 : (int32, Bigarray.int32_elt) kind
val char : (char, Bigarray.int8_unsigned_elt) kind
val int64 : (int64, Bigarray.int64_elt) kind
val float32 : (float, Bigarray.float32_elt) kind
val float64 : (float, Bigarray.float64_elt) kind

Le bout de code que je met en place en Ocaml:


 
    let h = 1.0 and w = 1.0 and height = 1 and width = 1 and texId = glGenTexture () in
    glTexEnv TexEnv.GL_TEXTURE_ENV TexEnv.GL_TEXTURE_ENV_MODE  TexEnv.GL_REPLACE;
    glBindTexture BindTex.GL_TEXTURE_2D texId;
   

    glTexImage2D
    TexTarget.GL_TEXTURE_2D 0 InternalFormat.GL_RGBA width
    height GL_LUMINANCE GL_FLOAT (!pts_cube);


      glBegin(GL_QUADS);
     
(*      glTexCoord2 0.0 0.0;*)
      glVertex2 0.0 0.0;
     
(*      glTexCoord2 0.0 h;*)
      glVertex2 0.0 h;
     
(*      glTexCoord2 w h;*)
      glVertex2 w h;
     
(*      glTexCoord2 w 0.0;*)
      glVertex2 w 0.0;
     
      glEnd();



Le bout de code qui fonctionne en C :



void initTexture( int width, int height ) {void initTexture( int width, int height ) {
  //nomme l'objet tex
  glGenTextures(1, &tex);

  //
  glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,  GL_REPLACE );

  //lier texture à un type d'opérations courant
  glBindTexture(GL_TEXTURE_RECTANGLE_ARB, tex);

  //Spécifie texture en image2D et propriété
  glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA32F_ARB, width,
           height, 0, GL_LUMINANCE, GL_FLOAT, NULL );
}


  //nomme l'objet tex
  glGenTextures(1, &tex);

  //
  glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,  GL_REPLACE );

  //lier texture à un type d'opérations courant
  glBindTexture(GL_TEXTURE_RECTANGLE_ARB, tex);

  //Spécifie texture en image2D et propriété
  glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA32F_ARB, width,
           height, 0, GL_LUMINANCE, GL_FLOAT, NULL );
}





Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Jeu 18 Avr - 20:19 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

Je n'arrive pas à mesurer les performances pour la sphere GPU VBO
je n'arrive pas à obtenir l'effet comme vous sur la vidéo


Revenir en haut
Mathias


Hors ligne

Inscrit le: 23 Jan 2013
Messages: 57

MessagePosté le: Jeu 18 Avr - 20:42 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

deux choses d'abord concernant les textures :


type image_data = (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Genarray.t 


et vector :
val char : (char, Bigarray.int8_unsigned_elt) kind


Disons qu'on peut ajouter 
short :  (int, Bigarray.int8_unsigned_elt) kind


Et apres ça devrait passer.  Enfin il faudra qd meme modifier des trucs un peu partout, a la limite on peut essayer d'utiliser les char directement (en C c'est la meme chose...) (On pourra en discuter sur skype si vous voulez)


Pour la sphere il faut stopper la rotation et bien mettre l'update du vbo par le kernel a chaque frame...


Revenir en haut
sam
Administrateur

Hors ligne

Inscrit le: 15 Jan 2013
Messages: 83

MessagePosté le: Dim 28 Avr - 06:42 (2013)    Sujet du message: Intéropérabilité SPOC - OpenGL Répondre en citant

CL GL Sharing V6.0:
http://www.sendspace.com/file/qge7qh

- Menu clic droit Souris (avec les modes)
- Version CPU_VBO même modif du rayon pareil que GPU_VBO (la comparaison me donne 26.0 contre 60.0 à incr 1 les autres incr sphere bizarre)
- Problème incr sphere gpu vbo résolu (vous aviez raison le problème venait du re ini du spoc vector)
- Factorisation (centaine de lignes gagnés dans l'exemple)
- Lisibilité améliorer


Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 05:04 (2018)    Sujet du message: Intéropérabilité SPOC - OpenGL

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    pstlspoc Index du Forum -> pstlspoc -> pstlspoc Toutes les heures sont au format GMT + 1 Heure
Aller à la page: <  1, 2, 3, 4, 5, 6, 7, 8  >
Page 7 sur 8

 
Sauter vers:  

Index | Panneau d’administration | creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com