diff options
author | Dave Airlie <airlied@redhat.com> | 2015-12-02 13:04:58 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2015-12-02 13:04:58 +1000 |
commit | e4cbf508f273714480d91ddf68f9724525b37c2a (patch) | |
tree | 96fe1c991289d8071c77ed1767b9502154ec55b2 | |
parent | c6da60278c554069eeee4ed5fc14e298d91ce711 (diff) |
renderer: handle pixel pack buffer pre texture buffer objects
Testing on a GL3.0 profile showed this as broken with glamor.
-rw-r--r-- | src/vrend_renderer.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c index 0525acd..5f1a644 100644 --- a/src/vrend_renderer.c +++ b/src/vrend_renderer.c @@ -3808,16 +3808,22 @@ int vrend_renderer_resource_create(struct vrend_renderer_resource_create_args *a } else if (args->target == PIPE_BUFFER && (args->bind & VREND_RES_BIND_SAMPLER_VIEW)) { GLenum internalformat; /* need to check GL version here */ - gr->target = GL_TEXTURE_BUFFER; - glGenBuffersARB(1, &gr->id); - glBindBufferARB(gr->target, gr->id); - glGenTextures(1, &gr->tbo_tex_id); - glBufferData(gr->target, args->width, NULL, GL_STREAM_DRAW); - - glBindTexture(gr->target, gr->tbo_tex_id); - internalformat = tex_conv_table[args->format].internalformat; - glTexBuffer(gr->target, internalformat, gr->id); - + if (epoxy_has_gl_extension("GL_ARB_texture_buffer_object")) { + gr->target = GL_TEXTURE_BUFFER; + glGenBuffersARB(1, &gr->id); + glBindBufferARB(gr->target, gr->id); + glGenTextures(1, &gr->tbo_tex_id); + glBufferData(gr->target, args->width, NULL, GL_STREAM_DRAW); + + glBindTexture(gr->target, gr->tbo_tex_id); + internalformat = tex_conv_table[args->format].internalformat; + glTexBuffer(gr->target, internalformat, gr->id); + } else { + gr->target = GL_PIXEL_PACK_BUFFER_ARB; + glGenBuffersARB(1, &gr->id); + glBindBufferARB(gr->target, gr->id); + glBufferData(gr->target, args->width, NULL, GL_STREAM_DRAW); + } } else { struct vrend_texture *gt = (struct vrend_texture *)gr; GLenum internalformat, glformat, gltype; |