diff options
author | Anuj Phogat <anuj.phogat@gmail.com> | 2015-12-18 15:33:35 -0800 |
---|---|---|
committer | Anuj Phogat <anuj.phogat@gmail.com> | 2016-03-02 15:06:45 -0800 |
commit | 6d4ebbe9e5798edee199671c0a98cbf2c5b042e2 (patch) | |
tree | e250808f952e50d0957e96a000d855630f780dd1 /src/mesa/drivers/common | |
parent | 0d047d10f196b72be938d004f2e0fc7e5c253702 (diff) |
meta: Fix the pbo usage in meta for GLES{1,2} contexts
OpenGL ES 1.0 doesn't support using GL_STREAM_DRAW and both
ES 1.0 and 2.0 don't support GL_STREAM_READ in glBufferData().
So, handle it correctly by calling the _mesa_meta_begin()
before create_texture_for_pbo().
V2: Remove the changes related to allocate_storage. (Ian)
Cc: <mesa-stable@lists.freedesktop.org>
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Diffstat (limited to 'src/mesa/drivers/common')
-rw-r--r-- | src/mesa/drivers/common/meta_tex_subimage.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/mesa/drivers/common/meta_tex_subimage.c b/src/mesa/drivers/common/meta_tex_subimage.c index 639d3236359..330289b6220 100644 --- a/src/mesa/drivers/common/meta_tex_subimage.c +++ b/src/mesa/drivers/common/meta_tex_subimage.c @@ -214,20 +214,22 @@ _mesa_meta_pbo_TexSubImage(struct gl_context *ctx, GLuint dims, */ image_height = packing->ImageHeight == 0 ? height : packing->ImageHeight; + _mesa_meta_begin(ctx, ~(MESA_META_PIXEL_TRANSFER | + MESA_META_PIXEL_STORE)); + pbo_tex_image = create_texture_for_pbo(ctx, create_pbo, GL_PIXEL_UNPACK_BUFFER, dims, width, height, depth, format, type, pixels, packing, &pbo, &pbo_tex); - if (!pbo_tex_image) + if (!pbo_tex_image) { + _mesa_meta_end(ctx); return false; + } if (allocate_storage) ctx->Driver.AllocTextureImageBuffer(ctx, tex_image); - _mesa_meta_begin(ctx, ~(MESA_META_PIXEL_TRANSFER | - MESA_META_PIXEL_STORE)); - readFb = ctx->Driver.NewFramebuffer(ctx, 0xDEADBEEF); if (readFb == NULL) goto fail; @@ -361,15 +363,18 @@ _mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx, GLuint dims, */ image_height = packing->ImageHeight == 0 ? height : packing->ImageHeight; + _mesa_meta_begin(ctx, ~(MESA_META_PIXEL_TRANSFER | + MESA_META_PIXEL_STORE)); + pbo_tex_image = create_texture_for_pbo(ctx, false, GL_PIXEL_PACK_BUFFER, dims, width, height, depth, format, type, pixels, packing, &pbo, &pbo_tex); - if (!pbo_tex_image) - return false; - _mesa_meta_begin(ctx, ~(MESA_META_PIXEL_TRANSFER | - MESA_META_PIXEL_STORE)); + if (!pbo_tex_image) { + _mesa_meta_end(ctx); + return false; + } /* GL_CLAMP_FRAGMENT_COLOR doesn't affect ReadPixels and GettexImage */ if (ctx->Extensions.ARB_color_buffer_float) |