summaryrefslogtreecommitdiffstats
path: root/src/gallium/include/pipe
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/include/pipe')
-rw-r--r--src/gallium/include/pipe/p_compiler.h2
-rw-r--r--src/gallium/include/pipe/p_config.h21
-rw-r--r--src/gallium/include/pipe/p_context.h8
-rw-r--r--src/gallium/include/pipe/p_defines.h5
-rw-r--r--src/gallium/include/pipe/p_state.h28
-rw-r--r--src/gallium/include/pipe/p_video_decoder.h71
-rw-r--r--src/gallium/include/pipe/p_video_enums.h1
-rw-r--r--src/gallium/include/pipe/p_video_state.h140
8 files changed, 196 insertions, 80 deletions
diff --git a/src/gallium/include/pipe/p_compiler.h b/src/gallium/include/pipe/p_compiler.h
index 8c788f4bb0e..05de9ff7cd0 100644
--- a/src/gallium/include/pipe/p_compiler.h
+++ b/src/gallium/include/pipe/p_compiler.h
@@ -67,7 +67,9 @@ extern "C" {
#if !defined(__HAIKU__) && !defined(__USE_MISC)
+#if !defined(PIPE_OS_ANDROID)
typedef unsigned int uint;
+#endif
typedef unsigned short ushort;
#endif
typedef unsigned char ubyte;
diff --git a/src/gallium/include/pipe/p_config.h b/src/gallium/include/pipe/p_config.h
index eea3d79e64b..b3a7b337bc6 100644
--- a/src/gallium/include/pipe/p_config.h
+++ b/src/gallium/include/pipe/p_config.h
@@ -99,9 +99,9 @@
#endif
#endif
-#if defined(__PPC__)
+#if defined(__ppc__) || defined(__ppc64__) || defined(__PPC__)
#define PIPE_ARCH_PPC
-#if defined(__PPC64__)
+#if defined(__ppc64__) || defined(__PPC64__)
#define PIPE_ARCH_PPC_64
#endif
#endif
@@ -120,6 +120,15 @@
# define PIPE_ARCH_BIG_ENDIAN
#endif
+#elif defined(__APPLE__)
+#include <machine/endian.h>
+
+#if __DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN
+# define PIPE_ARCH_LITTLE_ENDIAN
+#elif __DARWIN_BYTE_ORDER == __DARWIN_BIG_ENDIAN
+# define PIPE_ARCH_BIG_ENDIAN
+#endif
+
#else
#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
@@ -145,6 +154,14 @@
#define PIPE_OS_UNIX
#endif
+/*
+ * Android defines __linux__ so PIPE_OS_LINUX and PIPE_OS_UNIX will also be
+ * defined.
+ */
+#if defined(ANDROID)
+#define PIPE_OS_ANDROID
+#endif
+
#if defined(__FreeBSD__)
#define PIPE_OS_FREEBSD
#define PIPE_OS_BSD
diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
index 3f6d90d1bf4..da3ee87515f 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -49,6 +49,7 @@ struct pipe_index_buffer;
struct pipe_query;
struct pipe_poly_stipple;
struct pipe_rasterizer_state;
+struct pipe_resolve_info;
struct pipe_resource;
struct pipe_sampler_state;
struct pipe_sampler_view;
@@ -268,13 +269,10 @@ struct pipe_context {
/**
* Resolve a multisampled resource into a non-multisampled one.
- * Source and destination must have the same size and same format.
+ * Source and destination must be of the same format.
*/
void (*resource_resolve)(struct pipe_context *pipe,
- struct pipe_resource *dst,
- unsigned dst_layer,
- struct pipe_resource *src,
- unsigned src_layer);
+ const struct pipe_resolve_info *info);
/*@}*/
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 79b89699566..795de1fbf62 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -99,6 +99,9 @@ enum pipe_error {
#define PIPE_MASK_B 0x4
#define PIPE_MASK_A 0x8
#define PIPE_MASK_RGBA 0xf
+#define PIPE_MASK_Z 0x10
+#define PIPE_MASK_S 0x20
+#define PIPE_MASK_ZS 0x30
/**
@@ -468,6 +471,7 @@ enum pipe_cap {
PIPE_CAP_MIXED_COLORBUFFER_FORMATS = 46,
PIPE_CAP_SEAMLESS_CUBE_MAP = 47,
PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE = 48,
+ PIPE_CAP_SCALED_RESOLVE = 49
};
/* Shader caps not specific to any single stage */
@@ -491,6 +495,7 @@ enum pipe_shader_cap
PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR = 14,
PIPE_SHADER_CAP_INDIRECT_CONST_ADDR = 15,
PIPE_SHADER_CAP_SUBROUTINES = 16, /* BGNSUB, ENDSUB, CAL, RET */
+ PIPE_SHADER_CAP_INTEGERS = 17
};
diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
index d442c15c02a..840b3ee0e37 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -483,6 +483,34 @@ struct pipe_draw_info
};
+/**
+ * Information to describe a resource_resolve call.
+ */
+struct pipe_resolve_info
+{
+ struct {
+ struct pipe_resource *res;
+ unsigned level;
+ unsigned layer;
+ int x0; /**< always left */
+ int y0; /**< always top */
+ int x1; /**< determines scale if PIPE_CAP_SCALED_RESOLVE is supported */
+ int y1; /**< determines scale if PIPE_CAP_SCALED_RESOLVE is supported */
+ } dst;
+
+ struct {
+ struct pipe_resource *res;
+ unsigned layer;
+ int x0;
+ int y0;
+ int x1; /**< may be < x0 only if PIPE_CAP_SCALED_RESOLVE is supported */
+ int y1; /**< may be < y1 even if PIPE_CAP_SCALED_RESOLVE not supported */
+ } src;
+
+ unsigned mask; /**< PIPE_MASK_RGBA, Z, S or ZS */
+};
+
+
#ifdef __cplusplus
}
#endif
diff --git a/src/gallium/include/pipe/p_video_decoder.h b/src/gallium/include/pipe/p_video_decoder.h
index f063d8f3a1b..2aa4001c179 100644
--- a/src/gallium/include/pipe/p_video_decoder.h
+++ b/src/gallium/include/pipe/p_video_decoder.h
@@ -59,75 +59,74 @@ struct pipe_video_decoder
void (*destroy)(struct pipe_video_decoder *decoder);
/**
- * Creates a buffer as decoding input
+ * Creates a decoder buffer
*/
- struct pipe_video_decode_buffer *(*create_buffer)(struct pipe_video_decoder *decoder);
+ void *(*create_buffer)(struct pipe_video_decoder *decoder);
/**
- * flush decoder buffer to video hardware
+ * Destroys a decoder buffer
*/
- void (*flush_buffer)(struct pipe_video_decode_buffer *decbuf,
- unsigned num_ycbcr_blocks[3],
- struct pipe_video_buffer *ref_frames[2],
- struct pipe_video_buffer *dst);
-};
-
-/**
- * input buffer for a decoder
- */
-struct pipe_video_decode_buffer
-{
- struct pipe_video_decoder *decoder;
+ void (*destroy_buffer)(struct pipe_video_decoder *decoder, void *buffer);
/**
- * destroy this decode buffer
+ * set the current decoder buffer
*/
- void (*destroy)(struct pipe_video_decode_buffer *decbuf);
+ void (*set_decode_buffer)(struct pipe_video_decoder *decoder, void *buffer);
/**
- * map the input buffer into memory before starting decoding
+ * set the picture parameters for the next frame
+ * only used for bitstream decoding
*/
- void (*begin_frame)(struct pipe_video_decode_buffer *decbuf);
+ void (*set_picture_parameters)(struct pipe_video_decoder *decoder,
+ struct pipe_picture_desc *picture);
/**
* set the quantification matrixes
*/
- void (*set_quant_matrix)(struct pipe_video_decode_buffer *decbuf,
- const uint8_t intra_matrix[64],
- const uint8_t non_intra_matrix[64]);
+ void (*set_quant_matrix)(struct pipe_video_decoder *decoder,
+ const struct pipe_quant_matrix *matrix);
/**
- * get the pointer where to put the ycbcr blocks of a component
+ * set target where video data is decoded to
*/
- struct pipe_ycbcr_block *(*get_ycbcr_stream)(struct pipe_video_decode_buffer *, int component);
+ void (*set_decode_target)(struct pipe_video_decoder *decoder,
+ struct pipe_video_buffer *target);
/**
- * get the pointer where to put the ycbcr dct block data of a component
+ * set reference frames for motion compensation
*/
- short *(*get_ycbcr_buffer)(struct pipe_video_decode_buffer *, int component);
+ void (*set_reference_frames)(struct pipe_video_decoder *decoder,
+ struct pipe_video_buffer **ref_frames,
+ unsigned num_ref_frames);
/**
- * get the stride of the mv buffer
+ * start decoding of a new frame
*/
- unsigned (*get_mv_stream_stride)(struct pipe_video_decode_buffer *decbuf);
+ void (*begin_frame)(struct pipe_video_decoder *decoder);
/**
- * get the pointer where to put the motion vectors of a ref frame
+ * decode a macroblock
*/
- struct pipe_motionvector *(*get_mv_stream)(struct pipe_video_decode_buffer *decbuf, int ref_frame);
+ void (*decode_macroblock)(struct pipe_video_decoder *decoder,
+ const struct pipe_macroblock *macroblocks,
+ unsigned num_macroblocks);
/**
* decode a bitstream
*/
- void (*decode_bitstream)(struct pipe_video_decode_buffer *decbuf,
- unsigned num_bytes, const void *data,
- struct pipe_picture_desc *picture,
- unsigned num_ycbcr_blocks[3]);
+ void (*decode_bitstream)(struct pipe_video_decoder *decoder,
+ unsigned num_bytes, const void *data);
+
+ /**
+ * end decoding of the current frame
+ */
+ void (*end_frame)(struct pipe_video_decoder *decoder);
/**
- * unmap decoder buffer before flushing
+ * flush any outstanding command buffers to the hardware
+ * should be called before a video_buffer is acessed by the state tracker again
*/
- void (*end_frame)(struct pipe_video_decode_buffer *decbuf);
+ void (*flush)(struct pipe_video_decoder *decoder);
};
/**
diff --git a/src/gallium/include/pipe/p_video_enums.h b/src/gallium/include/pipe/p_video_enums.h
index 492ab84e33f..ea25a25883d 100644
--- a/src/gallium/include/pipe/p_video_enums.h
+++ b/src/gallium/include/pipe/p_video_enums.h
@@ -51,6 +51,7 @@ enum pipe_video_cap
PIPE_VIDEO_CAP_NPOT_TEXTURES = 1,
PIPE_VIDEO_CAP_MAX_WIDTH = 2,
PIPE_VIDEO_CAP_MAX_HEIGHT = 3,
+ PIPE_VIDEO_CAP_NUM_BUFFERS_DESIRED = 4
};
enum pipe_video_codec
diff --git a/src/gallium/include/pipe/p_video_state.h b/src/gallium/include/pipe/p_video_state.h
index 2a64ffb5601..f655ed411f4 100644
--- a/src/gallium/include/pipe/p_video_state.h
+++ b/src/gallium/include/pipe/p_video_state.h
@@ -43,65 +43,82 @@ struct pipe_video_rect
unsigned x, y, w, h;
};
-enum pipe_mpeg12_picture_type
+/*
+ * see table 6-12 in the spec
+ */
+enum pipe_mpeg12_picture_coding_type
{
- PIPE_MPEG12_PICTURE_TYPE_FIELD_TOP,
- PIPE_MPEG12_PICTURE_TYPE_FIELD_BOTTOM,
- PIPE_MPEG12_PICTURE_TYPE_FRAME
+ PIPE_MPEG12_PICTURE_CODING_TYPE_I = 0x01,
+ PIPE_MPEG12_PICTURE_CODING_TYPE_P = 0x02,
+ PIPE_MPEG12_PICTURE_CODING_TYPE_B = 0x03,
+ PIPE_MPEG12_PICTURE_CODING_TYPE_D = 0x04
};
-enum pipe_mpeg12_dct_intra
+/*
+ * see table 6-14 in the spec
+ */
+enum pipe_mpeg12_picture_structure
{
- PIPE_MPEG12_DCT_DELTA = 0,
- PIPE_MPEG12_DCT_INTRA = 1
+ PIPE_MPEG12_PICTURE_STRUCTURE_RESERVED = 0x00,
+ PIPE_MPEG12_PICTURE_STRUCTURE_FIELD_TOP = 0x01,
+ PIPE_MPEG12_PICTURE_STRUCTURE_FIELD_BOTTOM = 0x02,
+ PIPE_MPEG12_PICTURE_STRUCTURE_FRAME = 0x03
};
-enum pipe_mpeg12_dct_type
+/*
+ * flags for macroblock_type, see section 6.3.17.1 in the spec
+ */
+enum pipe_mpeg12_macroblock_type
{
- PIPE_MPEG12_DCT_TYPE_FRAME = 0,
- PIPE_MPEG12_DCT_TYPE_FIELD = 1
+ PIPE_MPEG12_MB_TYPE_QUANT = 0x01,
+ PIPE_MPEG12_MB_TYPE_MOTION_FORWARD = 0x02,
+ PIPE_MPEG12_MB_TYPE_MOTION_BACKWARD = 0x04,
+ PIPE_MPEG12_MB_TYPE_PATTERN = 0x08,
+ PIPE_MPEG12_MB_TYPE_INTRA = 0x10
};
-enum pipe_video_field_select
+/*
+ * flags for motion_type, see table 6-17 and 6-18 in the spec
+ */
+enum pipe_mpeg12_motion_type
{
- PIPE_VIDEO_FRAME = 0,
- PIPE_VIDEO_TOP_FIELD = 1,
- PIPE_VIDEO_BOTTOM_FIELD = 3,
-
- /* TODO
- PIPE_VIDEO_DUALPRIME
- PIPE_VIDEO_16x8
- */
+ PIPE_MPEG12_MO_TYPE_RESERVED = 0x00,
+ PIPE_MPEG12_MO_TYPE_FIELD = 0x01,
+ PIPE_MPEG12_MO_TYPE_FRAME = 0x02,
+ PIPE_MPEG12_MO_TYPE_16x8 = 0x02,
+ PIPE_MPEG12_MO_TYPE_DUAL_PRIME = 0x03
};
-enum pipe_video_mv_weight
+/*
+ * see section 6.3.17.1 and table 6-19 in the spec
+ */
+enum pipe_mpeg12_dct_type
{
- PIPE_VIDEO_MV_WEIGHT_MIN = 0,
- PIPE_VIDEO_MV_WEIGHT_HALF = 128,
- PIPE_VIDEO_MV_WEIGHT_MAX = 256
+ PIPE_MPEG12_DCT_TYPE_FRAME = 0,
+ PIPE_MPEG12_DCT_TYPE_FIELD = 1
};
-/* bitfields because this is used as a vertex buffer element */
-struct pipe_motionvector
+enum pipe_mpeg12_field_select
{
- struct {
- short x, y;
- ushort field_select; /**< enum pipe_video_field_select */
- ushort weight; /**< enum pipe_video_mv_weight */
- } top, bottom;
+ PIPE_MPEG12_FS_FIRST_FORWARD = 0x01,
+ PIPE_MPEG12_FS_FIRST_BACKWARD = 0x02,
+ PIPE_MPEG12_FS_SECOND_FORWARD = 0x04,
+ PIPE_MPEG12_FS_SECOND_BACKWARD = 0x08
};
-/* bitfields because this is used as a vertex buffer element */
-struct pipe_ycbcr_block
+struct pipe_picture_desc
{
- ubyte x, y;
- ubyte intra; /**< enum pipe_mpeg12_dct_intra */
- ubyte coding; /**< enum pipe_mpeg12_dct_type */
+ enum pipe_video_profile profile;
};
-struct pipe_picture_desc
+struct pipe_quant_matrix
{
- enum pipe_video_profile profile;
+ enum pipe_video_codec codec;
+};
+
+struct pipe_macroblock
+{
+ enum pipe_video_codec codec;
};
struct pipe_mpeg12_picture_desc
@@ -115,9 +132,58 @@ struct pipe_mpeg12_picture_desc
unsigned alternate_scan;
unsigned intra_vlc_format;
unsigned concealment_motion_vectors;
+ unsigned intra_dc_precision;
unsigned f_code[2][2];
};
+struct pipe_mpeg12_quant_matrix
+{
+ struct pipe_quant_matrix base;
+
+ const uint8_t *intra_matrix;
+ const uint8_t *non_intra_matrix;
+};
+
+struct pipe_mpeg12_macroblock
+{
+ struct pipe_macroblock base;
+
+ /* see section 6.3.17 in the spec */
+ unsigned short x, y;
+
+ /* see section 6.3.17.1 in the spec */
+ unsigned char macroblock_type;
+
+ union {
+ struct {
+ /* see table 6-17 in the spec */
+ unsigned int frame_motion_type:2;
+
+ /* see table 6-18 in the spec */
+ unsigned int field_motion_type:2;
+
+ /* see table 6-19 in the spec */
+ unsigned int dct_type:1;
+ } bits;
+ unsigned int value;
+ } macroblock_modes;
+
+ /* see section 6.3.17.2 in the spec */
+ unsigned char motion_vertical_field_select;
+
+ /* see Table 7-7 in the spec */
+ short PMV[2][2][2];
+
+ /* see figure 6.10-12 in the spec */
+ unsigned short coded_block_pattern;
+
+ /* see figure 6.10-12 in the spec */
+ short *blocks;
+
+ /* Number of skipped macroblocks after this macroblock */
+ unsigned short num_skipped_macroblocks;
+};
+
#ifdef __cplusplus
}
#endif