OpenGL/OpenCL kernel wird nicht ausgefürt

OP #3913863
Lesenswert?
• ▲
▼
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:
Gast #3915921
Lesenswert?
• ▲
▼
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 #3917281
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.