sai pallavi
sai pallavi

Reputation: 177

is it possible to read data from vertex shader?

I am trying to write a simple GPGPU benchmark. To load the data into vertex buffer array, do some computation in the vertex shader, and read the data back. Is it possible? I am planning to run this on SGX GPUs.
Is there any way to do that? I dont want it to go through the transformation, clipping, Tiling phases, and pixel processing. that incurs additional overhead, and changes my data.

can I read back the data and examine it in the CPU? is there anyway in opengl es?

I can do the computations in pixel shader aswell, by sending data through a texture and multiplying with some constants and writing it to another frame buffer. but how do I get it back? i dont really want to present it to the screen. is there anyway to do that? can somebody point me to some tutorials if available?

Upvotes: 6

Views: 6451

Answers (4)

user2110239
user2110239

Reputation: 134

You cannot read data from vertex shader directly in OpenGL ES 2.0. So, you can sed your data to pixel/fragment shader, attach it to Frame Buffer Object(FBO) and then use glReadPixels to get the data as texture in your CPU. This link discribes the concept and code snnipet: here. Hope this might help.

Upvotes: 3

Prabindh
Prabindh

Reputation: 3504

While writing from vertex shader to offscreen is not possible in OpenGL ES2, you can do that from pixel shader.

First you need to render to the offscreen buffer, then you can either render that as a texture to another object on screen, or you can read it back using readPixels the usual way. A simple list of steps is given in https://gist.github.com/prabindh/9201855.

Upvotes: 1

user3497792
user3497792

Reputation:

"...computation in the vertex shader, and read the data back. Is it possible? I am planning to run this on SGX GPUs."

As SGX supports Opengles 2.0 not 3.0, PowerVR SGX doesn't support reading vertex shader output.(OpenGL ES 2.0 spec doesn't include such functionality).

"can I read back the data and examine it in the CPU? is there anyway in opengl es?" You can use framebuffer objects and read the same using glRead API. You can read about FrameBuffer Objects here

Ref: http://en.wikipedia.org/wiki/Framebuffer_Object Ref: Reading the pixels values from the Frame Buffer Object (FBO) using Pixel Buffer Object (PBO)

If GPGPU calculation you are after, then i recommend you should go for OpenCL. SGX Supports OpenCL EP 1.1.

Upvotes: 2

fen
fen

Reputation: 10115

Reading Vertex output: Look for Transform Feedback - But you will have to have OpenGL ES 3.0 to use this.

For ES2.0 I suggest using fragment shader and Render To Texture techniques. Here is some link with tutorial After rendering to texture you basically have to read pixels of the texture.

Nice tutorial on reading the data here

tutorial about feedback: http://open.gl/feedback

Upvotes: 5

Related Questions