[g3dvl] cleanup and documentation
authorChristian König <deathsimple@vodafone.de>
Wed, 16 Mar 2011 22:09:52 +0000 (23:09 +0100)
committerChristian König <deathsimple@vodafone.de>
Wed, 16 Mar 2011 22:09:52 +0000 (23:09 +0100)
src/gallium/auxiliary/vl/vl_defines.h [new file with mode: 0644]
src/gallium/auxiliary/vl/vl_idct.c
src/gallium/auxiliary/vl/vl_idct.h
src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.c
src/gallium/auxiliary/vl/vl_mpeg12_mc_renderer.h
src/gallium/auxiliary/vl/vl_vertex_buffers.c
src/gallium/auxiliary/vl/vl_vertex_buffers.h
src/gallium/drivers/softpipe/sp_video_context.c
src/gallium/drivers/softpipe/sp_video_context.h

diff --git a/src/gallium/auxiliary/vl/vl_defines.h b/src/gallium/auxiliary/vl/vl_defines.h
new file mode 100644 (file)
index 0000000..668991f
--- /dev/null
@@ -0,0 +1,38 @@
+/**************************************************************************
+ *
+ * Copyright 2011 Christian König
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+#ifndef vl_defines_h
+#define vl_defines_h
+
+/* constants usually used with all known codecs */
+#define MACROBLOCK_WIDTH 16
+#define MACROBLOCK_HEIGHT 16
+
+#define BLOCK_WIDTH 8
+#define BLOCK_HEIGHT 8
+
+#endif
index e0307376a38c9bec8a11dac4526d3bc732ae3495..6b0010a04bbf44d03b2035cd0b4270c60b783762 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "vl_idct.h"
 #include "vl_vertex_buffers.h"
+#include "vl_defines.h"
 #include "util/u_draw.h"
 #include <assert.h>
 #include <pipe/p_context.h>
@@ -37,9 +38,6 @@
 #include <tgsi/tgsi_ureg.h>
 #include "vl_types.h"
 
-#define BLOCK_WIDTH 8
-#define BLOCK_HEIGHT 8
-
 #define SCALE_FACTOR_16_TO_9 (32768.0f / 256.0f)
 
 #define NR_RENDER_TARGETS 4
@@ -504,6 +502,8 @@ cleanup_textures(struct vl_idct *idct, struct vl_idct_buffer *buffer)
 struct pipe_resource *
 vl_idct_upload_matrix(struct pipe_context *pipe)
 {
+   const float scale = sqrtf(SCALE_FACTOR_16_TO_9);
+
    struct pipe_resource template, *matrix;
    struct pipe_transfer *buf_transfer;
    unsigned i, j, pitch;
@@ -544,7 +544,7 @@ vl_idct_upload_matrix(struct pipe_context *pipe)
    for(i = 0; i < BLOCK_HEIGHT; ++i)
       for(j = 0; j < BLOCK_WIDTH; ++j)
          // transpose and scale
-         f[i * pitch + j] = const_matrix[j][i] * sqrtf(SCALE_FACTOR_16_TO_9);
+         f[i * pitch + j] = const_matrix[j][i] * scale;
 
    pipe->transfer_unmap(pipe, buf_transfer);
    pipe->transfer_destroy(pipe, buf_transfer);
index 264ad2bd226dbe6df657186b2819798d0f9487f4..913034e7ab408d1cb4a54a174ae9b242df93f478 100644 (file)
@@ -31,6 +31,9 @@
 #include <pipe/p_state.h>
 #include "vl_vertex_buffers.h"
 
+/* shader based inverse distinct cosinus transformation
+ * expect usage of vl_vertex_buffers as a todo list
+ */
 struct vl_idct
 {
    struct pipe_context *pipe;
@@ -57,6 +60,7 @@ struct vl_idct
    struct pipe_resource *matrix;
 };
 
+/* a set of buffers to work with */
 struct vl_idct_buffer
 {
    struct pipe_viewport_state viewport[2];
@@ -88,25 +92,34 @@ struct vl_idct_buffer
    short *texels;
 };
 
+/* upload the idct matrix, which can be shared by all idct instances of a pipe */
 struct pipe_resource *vl_idct_upload_matrix(struct pipe_context *pipe);
 
+/* init an idct instance */
 bool vl_idct_init(struct vl_idct *idct, struct pipe_context *pipe,
                   unsigned buffer_width, unsigned buffer_height,
                   unsigned blocks_x, unsigned blocks_y,
                   int color_swizzle, struct pipe_resource *matrix);
 
+/* destroy an idct instance */
 void vl_idct_cleanup(struct vl_idct *idct);
 
+/* init a buffer assosiated with agiven idct instance */
 struct pipe_resource *vl_idct_init_buffer(struct vl_idct *idct, struct vl_idct_buffer *buffer);
 
+/* cleanup a buffer of an idct instance */
 void vl_idct_cleanup_buffer(struct vl_idct *idct, struct vl_idct_buffer *buffer);
 
+/* map a buffer for use with vl_idct_add_block */
 void vl_idct_map_buffers(struct vl_idct *idct, struct vl_idct_buffer *buffer);
 
+/* add an block of to be tranformed data a the given x and y coordinate */
 void vl_idct_add_block(struct vl_idct_buffer *buffer, unsigned x, unsigned y, short *block);
 
+/* unmaps the buffers before flushing */
 void vl_idct_unmap_buffers(struct vl_idct *idct, struct vl_idct_buffer *buffer);
 
+/* flush the buffer and start rendering, vertex buffers needs to be setup before calling this */
 void vl_idct_flush(struct vl_idct *idct, struct vl_idct_buffer *buffer, unsigned num_verts);
 
 #endif
index 5b675349481735e9c1bdeb350f572fe4997ac507..df3373ebd88344b09d5e23fd334cdb28f952251d 100644 (file)
@@ -26,6 +26,8 @@
  **************************************************************************/
 
 #include "vl_mpeg12_mc_renderer.h"
+#include "vl_vertex_buffers.h"
+#include "vl_defines.h"
 #include "util/u_draw.h"
 #include <assert.h>
 #include <pipe/p_context.h>
 #include <util/u_draw.h>
 #include <tgsi/tgsi_ureg.h>
 
-#define MACROBLOCK_WIDTH 16
-#define MACROBLOCK_HEIGHT 16
-#define BLOCK_WIDTH 8
-#define BLOCK_HEIGHT 8
-
 enum VS_OUTPUT
 {
    VS_O_VPOS,
index db8f2fff7490e10852d0305243f3d2ff038aed41..805fec530b0fa82cdaff5715f61c1c7cb09aac90 100644 (file)
@@ -32,8 +32,6 @@
 #include <pipe/p_state.h>
 #include <pipe/p_video_state.h>
 #include "vl_types.h"
-#include "vl_idct.h"
-#include "vl_vertex_buffers.h"
 
 struct pipe_context;
 struct pipe_macroblock;
index 41e9809f7447745cff5c80bb28321f31ca8559d9..c5366e8e4fcfaff5ac0917d2fc1c7023c82063e2 100644 (file)
  **************************************************************************/
 
 #include <assert.h>
-#include <pipe/p_context.h>
-#include <pipe/p_screen.h>
-#include <util/u_memory.h>
-#include <util/u_inlines.h>
 #include <util/u_format.h>
 #include "vl_vertex_buffers.h"
 #include "vl_types.h"
index 0f7f47f2703acd7a3e562f63151fa0964e06c181..88e0270c1706cbc4f2073a00272a9afa4357cf88 100644 (file)
 #ifndef vl_vertex_buffers_h
 #define vl_vertex_buffers_h
 
-#include <assert.h>
 #include <pipe/p_state.h>
 #include <pipe/p_video_state.h>
 #include "vl_types.h"
 
+/* vertex buffers act as a todo list
+ * uploading all the usefull informations to video ram
+ * so a vertex shader can work with them
+ */
+
+/* inputs to the vertex shaders */
 enum VS_INPUT
 {
    VS_I_RECT,
index 32398e4ff0800b11388323e7b2f45ff8e52fbbd0..7e3519e694f0954aa08a959327a128be28516e56 100644 (file)
 #include <util/u_rect.h>
 #include <util/u_video.h>
 #include <util/u_surface.h>
-#include "sp_public.h"
-#include "sp_texture.h"
-
-#define MACROBLOCK_WIDTH 16
-#define MACROBLOCK_HEIGHT 16
-#define BLOCK_WIDTH 8
-#define BLOCK_HEIGHT 8
+#include <vl/vl_defines.h>
 
 #define NUM_BUFFERS 2
 
index 2e3e4ec729f685bdb8a8d44ad9798ac0ae64e7c3..04368a64a534b4cdea125dae1d5bab1a0e3e8317 100644 (file)
 #define SP_VIDEO_CONTEXT_H
 
 #include <pipe/p_video_context.h>
+#include <vl/vl_idct.h>
 #include <vl/vl_mpeg12_mc_renderer.h>
 #include <vl/vl_compositor.h>
 
 struct pipe_screen;
 struct pipe_context;
 
-struct sp_mpeg12_buffer
-{
-   struct vl_vertex_buffer vertex_stream;
-
-   union
-   {
-      struct pipe_vertex_buffer all[2];
-      struct {
-         struct pipe_vertex_buffer quad, stream;
-      } individual;
-   } vertex_bufs;
-
-   struct vl_idct_buffer idct_y, idct_cb, idct_cr;
-
-   struct vl_mpeg12_mc_buffer mc;
-};
-
 struct sp_mpeg12_context
 {
    struct pipe_video_context base;
@@ -76,6 +60,23 @@ struct sp_mpeg12_context
    enum pipe_format decode_format;
 };
 
+struct sp_mpeg12_buffer
+{
+   struct vl_vertex_buffer vertex_stream;
+
+   union
+   {
+      struct pipe_vertex_buffer all[2];
+      struct {
+         struct pipe_vertex_buffer quad, stream;
+      } individual;
+   } vertex_bufs;
+
+   struct vl_idct_buffer idct_y, idct_cb, idct_cr;
+
+   struct vl_mpeg12_mc_buffer mc;
+};
+
 struct pipe_video_context *
 sp_video_create(struct pipe_screen *screen, enum pipe_video_profile profile,
                 enum pipe_video_chroma_format chroma_format,