[Mesa-dev] [PATCH] meta: Fix the pbo usage in meta for GLES{1, 2} contexts
Anuj Phogat
anuj.phogat at gmail.com
Thu Dec 24 13:04:55 PST 2015
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().
Cc: "11.1" <mesa-stable at lists.freedesktop.org>
Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
---
src/mesa/drivers/common/meta_tex_subimage.c | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/src/mesa/drivers/common/meta_tex_subimage.c b/src/mesa/drivers/common/meta_tex_subimage.c
index 4adaad7..8ef306e 100644
--- a/src/mesa/drivers/common/meta_tex_subimage.c
+++ b/src/mesa/drivers/common/meta_tex_subimage.c
@@ -211,19 +211,21 @@ _mesa_meta_pbo_TexSubImage(struct gl_context *ctx, GLuint dims,
*/
image_height = packing->ImageHeight == 0 ? height : packing->ImageHeight;
+ if (allocate_storage)
+ ctx->Driver.AllocTextureImageBuffer(ctx, tex_image);
+
+ _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));
+ }
_mesa_GenFramebuffers(2, fbos);
_mesa_BindFramebuffer(GL_READ_FRAMEBUFFER, fbos[0]);
@@ -346,15 +348,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)
--
2.5.0
More information about the mesa-dev
mailing list