summaryrefslogtreecommitdiff
path: root/src/gallium/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/include')
-rw-r--r--src/gallium/include/pipe/p_context.h8
-rw-r--r--src/gallium/include/pipe/p_debug.h78
-rw-r--r--src/gallium/include/pipe/p_defines.h2
-rw-r--r--src/gallium/include/pipe/p_shader_tokens.h31
-rw-r--r--src/gallium/include/pipe/p_state.h6
-rw-r--r--src/gallium/include/pipe/p_util.h10
-rw-r--r--src/gallium/include/pipe/p_winsys.h31
7 files changed, 138 insertions, 28 deletions
diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
index 1501b52f3e..b64948f0f3 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -100,7 +100,7 @@ struct pipe_context {
void * (*create_sampler_state)(struct pipe_context *,
const struct pipe_sampler_state *);
- void (*bind_sampler_state)(struct pipe_context *, unsigned unit, void *);
+ void (*bind_sampler_states)(struct pipe_context *, unsigned num, void **);
void (*delete_sampler_state)(struct pipe_context *, void *);
void * (*create_rasterizer_state)(struct pipe_context *,
@@ -148,9 +148,9 @@ struct pipe_context {
/* Currently a sampler is constrained to sample from a single texture:
*/
- void (*set_sampler_texture)( struct pipe_context *,
- unsigned sampler,
- struct pipe_texture * );
+ void (*set_sampler_textures)( struct pipe_context *,
+ unsigned num,
+ struct pipe_texture ** );
void (*set_viewport_state)( struct pipe_context *,
const struct pipe_viewport_state * );
diff --git a/src/gallium/include/pipe/p_debug.h b/src/gallium/include/pipe/p_debug.h
index 2a11627b36..f45363f355 100644
--- a/src/gallium/include/pipe/p_debug.h
+++ b/src/gallium/include/pipe/p_debug.h
@@ -41,6 +41,8 @@
#include <stdarg.h>
+#include "p_compiler.h"
+
#ifdef __cplusplus
extern "C" {
@@ -58,8 +60,22 @@ extern "C" {
#endif
+/**
+ * Print debug messages.
+ *
+ * A debug message will be printed regardless of the DEBUG/NDEBUG macros.
+ *
+ * The actual channel used to output debug message is platform specific. To
+ * avoid misformating or truncation, follow these rules of thumb:
+ * - output whole lines
+ * - avoid outputing large strings (512 bytes is the current maximum length
+ * that is guaranteed to be printed in all platforms)
+ */
void debug_printf(const char *format, ...);
+/**
+ * @sa debug_printf
+ */
void debug_vprintf(const char *format, va_list ap);
void debug_assert_fail(const char *expr, const char *file, unsigned line);
@@ -79,6 +95,68 @@ void debug_assert_fail(const char *expr, const char *file, unsigned line);
#define assert(expr) debug_assert(expr)
+/**
+ * Set a channel's debug mask.
+ *
+ * uuid is just a random 32 bit integer that uniquely identifies the debugging
+ * channel.
+ *
+ * @note Due to current implementation issues, make sure the lower 8 bits of
+ * UUID are unique.
+ */
+void debug_mask_set(uint32_t uuid, uint32_t mask);
+
+
+uint32_t debug_mask_get(uint32_t uuid);
+
+
+/**
+ * Conditional debug output.
+ *
+ * This is just a generalization of the debug filtering mechanism used
+ * throughout Gallium.
+ *
+ * You use this function as:
+ *
+ * @code
+ * #define MYDRIVER_UUID 0x12345678 // random 32 bit identifier
+ *
+ * static inline mydriver_debug(uint32_t what, const char *format, ...)
+ * {
+ * #ifdef DEBUG
+ * va_list ap;
+ * va_start(ap, format);
+ * debug_mask_vprintf(MYDRIVER_UUID, what, format, ap);
+ * va_end(ap);
+ * #endif
+ * }
+ *
+ * ...
+ *
+ * debug_mask_set(MYDRIVER_UUID,
+ * MYDRIVER_DEBUG_THIS |
+ * MYDRIVER_DEBUG_THAT |
+ * ... );
+ *
+ * ...
+ *
+ * mydriver_debug(MYDRIVER_DEBUG_THIS,
+ * "this and this happened\n");
+ *
+ * mydriver_debug(MYDRIVER_DEBUG_THAT,
+ * "that = %f\n", that);
+ * ...
+ * @endcode
+ *
+ * You can also define several variants of mydriver_debug, with hardcoded what.
+ * Note that although macros with variable number of arguments would accomplish
+ * more in less code, they are not portable.
+ */
+void debug_mask_vprintf(uint32_t uuid,
+ uint32_t what,
+ const char *format,
+ va_list ap);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index 0c662d6517..bc938ba253 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -152,7 +152,7 @@ enum pipe_texture_target {
*/
#define PIPE_TEX_FILTER_NEAREST 0
#define PIPE_TEX_FILTER_LINEAR 1
-/* #define PIPE_TEX_FILTER_ANISO 2 */
+#define PIPE_TEX_FILTER_ANISO 2
#define PIPE_TEX_COMPARE_NONE 0
diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h
index 0a6145a6bf..210169f54f 100644
--- a/src/gallium/include/pipe/p_shader_tokens.h
+++ b/src/gallium/include/pipe/p_shader_tokens.h
@@ -42,15 +42,17 @@ struct tgsi_token
unsigned Extended : 1; /* BOOL */
};
-#define TGSI_FILE_NULL 0
-#define TGSI_FILE_CONSTANT 1
-#define TGSI_FILE_INPUT 2
-#define TGSI_FILE_OUTPUT 3
-#define TGSI_FILE_TEMPORARY 4
-#define TGSI_FILE_SAMPLER 5
-#define TGSI_FILE_ADDRESS 6
-#define TGSI_FILE_IMMEDIATE 7
-#define TGSI_FILE_COUNT 8 /**< how many TGSI_FILE_ types */
+enum tgsi_file_type {
+ TGSI_FILE_NULL =0,
+ TGSI_FILE_CONSTANT =1,
+ TGSI_FILE_INPUT =2,
+ TGSI_FILE_OUTPUT =3,
+ TGSI_FILE_TEMPORARY =4,
+ TGSI_FILE_SAMPLER =5,
+ TGSI_FILE_ADDRESS =6,
+ TGSI_FILE_IMMEDIATE =7,
+ TGSI_FILE_COUNT /**< how many TGSI_FILE_ types */
+};
#define TGSI_DECLARE_RANGE 0
@@ -225,6 +227,7 @@ struct tgsi_immediate_float32
#define TGSI_OPCODE_STR 51
#define TGSI_OPCODE_TEX 52
#define TGSI_OPCODE_TXD 53
+#define TGSI_OPCODE_TXP 134
#define TGSI_OPCODE_UP2H 54
#define TGSI_OPCODE_UP2US 55
#define TGSI_OPCODE_UP4B 56
@@ -339,7 +342,7 @@ struct tgsi_immediate_float32
* ps_1_1
*/
#define TGSI_OPCODE_TEXCOORD TGSI_OPCODE_NOP
-#define TGSI_OPCODE_TEXKILL TGSI_OPCODE_KIL
+#define TGSI_OPCODE_TEXKILL TGSI_OPCODE_KILP
#define TGSI_OPCODE_TEXBEM 107
#define TGSI_OPCODE_TEXBEML 108
#define TGSI_OPCODE_TEXREG2AR 109
@@ -419,7 +422,7 @@ struct tgsi_immediate_float32
#define TGSI_OPCODE_KIL 132 /* unpredicated kill */
#define TGSI_OPCODE_END 133 /* aka HALT */
-#define TGSI_OPCODE_LAST 134
+#define TGSI_OPCODE_LAST 135
#define TGSI_SAT_NONE 0 /* do not saturate */
#define TGSI_SAT_ZERO_ONE 1 /* clamp to [0,1] */
@@ -652,9 +655,6 @@ struct tgsi_src_register_ext
*
* NegateX, NegateY, NegateZ and NegateW negate individual components of the
* source register.
- *
- * ExtDivide specifies which component is used to divide all components of the
- * source register.
*/
struct tgsi_src_register_ext_swz
@@ -668,8 +668,7 @@ struct tgsi_src_register_ext_swz
unsigned NegateY : 1; /* BOOL */
unsigned NegateZ : 1; /* BOOL */
unsigned NegateW : 1; /* BOOL */
- unsigned ExtDivide : 4; /* TGSI_EXTSWIZZLE_ */
- unsigned Padding : 3;
+ unsigned Padding : 7;
unsigned Extended : 1; /* BOOL */
};
diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
index 5fab41acbd..e338a27383 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -108,6 +108,7 @@ struct pipe_rasterizer_state
unsigned line_stipple_enable:1;
unsigned line_stipple_factor:8; /**< [1..256] actually */
unsigned line_stipple_pattern:16;
+ unsigned line_last_pixel:1;
unsigned bypass_clipping:1;
unsigned origin_lower_left:1; /**< Is (0,0) the lower-left corner? */
@@ -154,7 +155,7 @@ struct pipe_clip_state
struct pipe_constant_buffer
{
struct pipe_buffer *buffer;
- unsigned size; /** in bytes */
+ unsigned size; /** in bytes (XXX: redundant!) */
};
@@ -248,6 +249,7 @@ struct pipe_sampler_state
unsigned compare_mode:1; /**< PIPE_TEX_COMPARE_x */
unsigned compare_func:3; /**< PIPE_FUNC_x */
unsigned normalized_coords:1; /**< Are coords normalized to [0,1]? */
+ unsigned prefilter:4; /**< Wierd sampling state exposed by some api's */
float shadow_ambient; /**< shadow test fail color/intensity */
float lod_bias; /**< LOD/lambda bias */
float min_lod, max_lod; /**< LOD clamp range, after bias */
@@ -281,8 +283,6 @@ struct pipe_surface
*/
struct pipe_texture
{
- /* Effectively the key:
- */
enum pipe_texture_target target; /**< PIPE_TEXTURE_x */
enum pipe_format format; /**< PIPE_FORMAT_x */
diff --git a/src/gallium/include/pipe/p_util.h b/src/gallium/include/pipe/p_util.h
index 3b32ba1d24..ef36ce75f7 100644
--- a/src/gallium/include/pipe/p_util.h
+++ b/src/gallium/include/pipe/p_util.h
@@ -54,7 +54,12 @@ EngFreeMem(
static INLINE void *
MALLOC( unsigned size )
{
+#ifdef WINCE
+ /* TODO: Need to abstract this */
+ return malloc( size );
+#else
return EngAllocMem( 0, size, 'D3AG' );
+#endif
}
static INLINE void *
@@ -71,7 +76,12 @@ static INLINE void
FREE( void *ptr )
{
if( ptr ) {
+#ifdef WINCE
+ /* TODO: Need to abstract this */
+ free( ptr );
+#else
EngFreeMem( ptr );
+#endif
}
}
diff --git a/src/gallium/include/pipe/p_winsys.h b/src/gallium/include/pipe/p_winsys.h
index e784c92491..1383bd0544 100644
--- a/src/gallium/include/pipe/p_winsys.h
+++ b/src/gallium/include/pipe/p_winsys.h
@@ -104,13 +104,36 @@ struct pipe_winsys
* usage is a bitmask of PIPE_BUFFER_USAGE_PIXEL/VERTEX/INDEX/CONSTANT. This
* usage argument is only an optimization hint, not a guarantee, therefore
* proper behavior must be observed in all circumstances.
+ *
+ * alignment indicates the client's alignment requirements, eg for
+ * SSE instructions.
*/
struct pipe_buffer *(*buffer_create)( struct pipe_winsys *sws,
- unsigned alignment,
- unsigned usage,
- unsigned size );
+ unsigned alignment,
+ unsigned usage,
+ unsigned size );
- /** Create a buffer that wraps user-space data */
+ /**
+ * Create a buffer that wraps user-space data.
+ *
+ * Effectively this schedules a delayed call to buffer_create
+ * followed by an upload of the data at *some point in the future*,
+ * or perhaps never. Basically the allocate/upload is delayed
+ * until the buffer is actually passed to hardware.
+ *
+ * The intention is to provide a quick way to turn regular data
+ * into a buffer, and secondly to avoid a copy operation if that
+ * data subsequently turns out to be only accessed by the CPU.
+ *
+ * Common example is OpenGL vertex buffers that are subsequently
+ * processed either by software TNL in the driver or by passing to
+ * hardware.
+ *
+ * XXX: What happens if the delayed call to buffer_create() fails?
+ *
+ * Note that ptr may be accessed at any time upto the time when the
+ * buffer is destroyed, so the data must not be freed before then.
+ */
struct pipe_buffer *(*user_buffer_create)(struct pipe_winsys *sws,
void *ptr,
unsigned bytes);