[g3dvl] cleanup and documentation

This commit is contained in:
Christian König 2011-03-16 23:09:52 +01:00
parent 0f07da0a1c
commit e87bd8c957
9 changed files with 82 additions and 40 deletions

View file

@ -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

View 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);

View 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

View 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>
@ -38,11 +40,6 @@
#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,

View 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;

View file

@ -26,10 +26,6 @@
**************************************************************************/
#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"

View file

@ -27,11 +27,16 @@
#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,

View file

@ -36,13 +36,7 @@
#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

View file

@ -29,29 +29,13 @@
#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,