OpenGL/OpenCL kernel wird nicht ausgefürt

OP #3913863
Ich habe schon einiges mit OpenGL gemacht, und wollte jetzt etwas mit 
OpenCL ausprobieren.
Meine Idee war es, das Doublebuffering auszuschalten, und dieses mit 
einem Renderbuffer-Object und einem Framebuffer-Object zu simulieren, um 
den Renderbuffer in OpenCL nutzen zu können.
Es scheint alles bestens zu funktionieren, mit gDEBugger und AMD CodeX 
konnte ich sehen, dass alle OpenGL und OpenCL Funktionen in der 
erwarteten Reihenfolge ausgeführt werden, es gibt keine Fehlermeldungen, 
Compilerflags -Wall -Wextra -pedantic und -Werror sind gesetzt, aber das 
Fenster ist grün statt rot.

Der Kernel scheint entweder nicht ausgeführt zu werden, oder aber nichts 
zu tun.

Ich kann den Fehler einfach nicht finden. Könnte mir bitte jemand einen 
hinweis geben?

Einige infos zu meinem PC:
1
  gcc (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
2

3
  CL_DEVICE_NAME:        GeForce GT 650M
4
  CL_DEVICE_VENDOR:      NVIDIA Corporation
5
  CL_DEVICE_VERSION:     OpenCL 1.1 CUDA
6
  CL_DEVICE_TYPE:        CL_DEVICE_TYPE_GPU
7
  CL_DRIVER_VERSION:     331.38
8
  CL_DEVICE_PROFILE:     FULL_PROFILE
9
  CL_DEVICE_MAX_COMPUTE_UNITS:   2
10
  CL_DEVICE_MAX_CLOCK_FREQUENCY:         835
11
  CL_DEVICE_MEM_BASE_ADDR_ALIGN:         4096
12
  CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE:    128

main loop (verkleinert, vollständige Version ist im Anhang):
1
  while(1){
2

3
    size_t fb_size[] = {
4
      w->winWidth,w->winHeight,0
5
    };
6

7
    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, w->buffer.gl_frame);
8
    glClear(GL_COLOR_BUFFER_BIT);
9
    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0 );
10

11

12
    glFinish();
13
    clEnqueueAcquireGLObjects(w->clCommandQueue,1,&w->buffer.cl_color,0,0,0);
14

15

16
    clSetKernelArg(w->kernel.raytracer_drawScene, 0, sizeof(cl_mem), &w->buffer.cl_color);
17
    clEnqueueNDRangeKernel( w->clCommandQueue, w->kernel.raytracer_drawScene, 1, 0, fb_size, 0, 0, 0, 0 );
18

19

20
    clEnqueueReleaseGLObjects(w->clCommandQueue,1,&w->buffer.cl_color,0,0,0);
21
    clFinish(w->clCommandQueue);
22

23

24
    glBlitFramebuffer(0,0,w->winWidth, w->winHeight,0,0,w->winWidth, w->winHeight,GL_COLOR_BUFFER_BIT,GL_NEAREST);
25

26
  }

Der OpenCL kernel:
1
kernel void raytracer_drawScene(global write_only image2d_t fb){
2

3
  const int2 xy = {
4
    get_global_id(0),
5
    get_global_id(1)
6
  };
7

8
  const uint4 color = { 255,0, 0, 127 };
9

10
  write_imageui(fb, xy, color);
11

12
}
Angehängte Dateien:
OP
Ich konnte den Fehler immernochnicht finden, und würde mich sehr über 
eine Antwort freuen.

Da die Frage womöglich nicht ideal für ein Mikrocontroller forum ist, 
bin ich auch sehr an Erfahrungsberichten über foren mit Spezialisierung 
auf OpenCL und OpenGL interessiert.
Gast
Kann dir leider ned weiterhelfen. Auch Foren kenn ich dazu keine, aber 
einfach mal den Standard ausprobieren:
- OpenCL ist von der Khronos Group. Einfach mal da nach einem Forum 
suchen (gibt es, hab gerade gekuckt).
- Bei Stackoverflow sind sicherlich auch Leute unterwegs, die davon 
Ahnung haben (OpenCL-Tag hat z.Z. 2615 Threads).
OP
mar IO schrieb:
> Auch Foren kenn ich dazu keine, aber
> einfach mal den Standard ausprobieren

Trotzdem Danke, ich denke dass werde ich tun.

Eric B. schrieb:
> Was passiert wenn du da mal
> {0, 255, 0, 127 } reinschreibst? Immer noch grün?

Ja. Das grün kommt von glClear(GL_COLOR_BUFFER_BIT)
Mit glClearColor hab ich grün angegeben. Es sollte danach aber nach 
clEnqueueNDRangeKernel mit Rot übermalt werden. Auskommentieren von 
glClearColor führt dazu, dass der zufällige initiale Inhalt des Buffers 
im Fenster Sichtbar wird. Auskommentieren von glBlitFramebuffer führt zu 
einem blauen Fenster.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.