[g3dvl] correctly implement non power of two buffers
authorChristian König <deathsimple@vodafone.de>
Sun, 20 Mar 2011 18:45:06 +0000 (19:45 +0100)
committerChristian König <deathsimple@vodafone.de>
Sun, 20 Mar 2011 18:45:06 +0000 (19:45 +0100)
src/gallium/auxiliary/vl/vl_mpeg12_context.c
src/gallium/auxiliary/vl/vl_mpeg12_context.h
src/gallium/drivers/r600/r600_video_context.c

index a79230d0b7f7ad0e0c6a79a93da57287049649da..781ff2a408561cfb773c6512abd1152fe3593b85 100644 (file)
@@ -228,11 +228,7 @@ vl_mpeg12_get_param(struct pipe_video_context *vpipe, int param)
 
    switch (param) {
       case PIPE_CAP_NPOT_TEXTURES:
-         /* XXX: Temporary; not all paths are NPOT-tested */
-#if 0
-         return ctx->pipe->screen->get_param(ctx->pipe->screen, param);
-#endif
-         return FALSE;
+         return !ctx->pot_buffers;
       case PIPE_CAP_DECODE_TARGET_PREFERRED_FORMAT:
          return ctx->decode_format;
       default:
@@ -691,6 +687,7 @@ vl_create_mpeg12_context(struct pipe_context *pipe,
 
    ctx->pipe = pipe;
    ctx->decode_format = decode_format;
+   ctx->pot_buffers = pot_buffers;
 
    ctx->quads = vl_vb_upload_quads(ctx->pipe, 2, 2);
    ctx->vertex_buffer_size = width / MACROBLOCK_WIDTH * height / MACROBLOCK_HEIGHT;
@@ -702,8 +699,6 @@ vl_create_mpeg12_context(struct pipe_context *pipe,
       return NULL;
    }
 
-   /* TODO: Non-pot buffers untested, probably doesn't work without changes to texcoord generation, vert shader, etc */
-   assert(pot_buffers);
    buffer_width = pot_buffers ? util_next_power_of_two(width) : width;
    buffer_height = pot_buffers ? util_next_power_of_two(height) : height;
 
index 6c964fbe92acb1da9dae0b6ca264da3340548bb7..c88c436ad73375759dd3ab60b39c4f2015f17d00 100644 (file)
@@ -40,6 +40,9 @@ struct vl_mpeg12_context
 {
    struct pipe_video_context base;
    struct pipe_context *pipe;
+   enum pipe_format decode_format;
+   bool pot_buffers;
+
    struct pipe_surface *decode_target;
    const unsigned (*empty_block_mask)[3][2][2];
 
@@ -57,8 +60,6 @@ struct vl_mpeg12_context
    void *rast;
    void *dsa;
    void *blend;
-
-   enum pipe_format decode_format;
 };
 
 struct vl_mpeg12_buffer
index 0b915d621435c12e1cf6a06b685a206945689acb..8190c9ae612740e878621c8fa498fe247d6f5eb8 100644 (file)
@@ -47,7 +47,7 @@ r600_video_create(struct pipe_screen *screen, enum pipe_video_profile profile,
          return vl_create_mpeg12_context(pipe, profile,
                                          chroma_format,
                                          width, height,
-                                         true,
+                                         false,
                                          PIPE_FORMAT_XYUV);
       default:
          return NULL;