summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2015-12-02 13:04:58 +1000
committerDave Airlie <airlied@redhat.com>2015-12-02 13:04:58 +1000
commite4cbf508f273714480d91ddf68f9724525b37c2a (patch)
tree96fe1c991289d8071c77ed1767b9502154ec55b2
parentc6da60278c554069eeee4ed5fc14e298d91ce711 (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.c26
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;