vc4: Fix write-only texsubimage when we had to align.
authorEric Anholt <eric@anholt.net>
Sat, 20 Jun 2015 02:41:25 +0000 (19:41 -0700)
committerEric Anholt <eric@anholt.net>
Sat, 20 Jun 2015 07:16:32 +0000 (00:16 -0700)
We need to make sure that when we store the aligned box, we've got
initialized contents in the border.  We could potentially just load the
border area, but for now let's get text rendering working in X (and fix
the GL_TEXTURE_2D errors in piglit's texsubimage test and
gl-2.1-pbo/test_tex_image)

src/gallium/drivers/vc4/vc4_resource.c
src/mesa/main/extensions.c

index 14b135e2f4550265489720d4920322bdc0d575c8..cab764060551ba9c4c7be295e247d4d2a7ed3f92 100644 (file)
@@ -162,6 +162,8 @@ vc4_resource_transfer_map(struct pipe_context *pctx,
                 /* We need to align the box to utile boundaries, since that's
                  * what load/store operate on.
                  */
+                uint32_t orig_width = ptrans->box.width;
+                uint32_t orig_height = ptrans->box.height;
                 uint32_t box_start_x = ptrans->box.x & (utile_w - 1);
                 uint32_t box_start_y = ptrans->box.y & (utile_h - 1);
                 ptrans->box.width += box_start_x;
@@ -175,7 +177,9 @@ vc4_resource_transfer_map(struct pipe_context *pctx,
                 ptrans->layer_stride = ptrans->stride;
 
                 trans->map = malloc(ptrans->stride * ptrans->box.height);
-                if (usage & PIPE_TRANSFER_READ) {
+                if (usage & PIPE_TRANSFER_READ ||
+                    ptrans->box.width != orig_width ||
+                    ptrans->box.height != orig_height) {
                         vc4_load_tiled_image(trans->map, ptrans->stride,
                                              buf + slice->offset +
                                              box->z * rsc->cube_map_stride,
index 4176a69ed7c9a85a69b35ac0e2e18d70d2d540f3..b747abaf684edcd9f7a1466f174d1f0e963d0830 100644 (file)
@@ -218,6 +218,7 @@ static const struct extension extension_table[] = {
    { "GL_EXT_discard_framebuffer",                 o(dummy_true),                                    ES1 | ES2, 2009 },
    { "GL_EXT_blend_minmax",                        o(EXT_blend_minmax),                        GLL | ES1 | ES2, 1995 },
    { "GL_EXT_blend_subtract",                      o(dummy_true),                              GLL,            1995 },
+   { "GL_EXT_buffer_storage",                      o(ARB_buffer_storage),                                  ES2, 2015 },
    { "GL_EXT_compiled_vertex_array",               o(dummy_true),                              GLL,            1996 },
    { "GL_EXT_copy_texture",                        o(dummy_true),                              GLL,            1995 },
    { "GL_EXT_depth_bounds_test",                   o(EXT_depth_bounds_test),                   GL,             2002 },