Mesa (master): rbug: Extend context info and block ops

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Tue Jun 9 15:18:03 UTC 2009


Module: Mesa
Branch: master
Commit: f0c21c02945f8379decfa3b2f294651d6b5af8ef
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f0c21c02945f8379decfa3b2f294651d6b5af8ef

Author: Jakob Bornecrantz <jakob at vmware.com>
Date:   Tue Jun  9 15:58:14 2009 +0100

rbug: Extend context info and block ops

---

 src/gallium/auxiliary/rbug/rbug_context.c   |  228 +++++++++++++++++++++++++++
 src/gallium/auxiliary/rbug/rbug_context.h   |   56 +++++++
 src/gallium/auxiliary/rbug/rbug_demarshal.c |    6 +
 src/gallium/auxiliary/rbug/rbug_proto.h     |    3 +
 4 files changed, 293 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/rbug/rbug_context.c b/src/gallium/auxiliary/rbug/rbug_context.c
index 787f650..55e049f 100644
--- a/src/gallium/auxiliary/rbug/rbug_context.c
+++ b/src/gallium/auxiliary/rbug/rbug_context.c
@@ -274,6 +274,100 @@ int rbug_send_context_flush(struct rbug_connection *__con,
 	return __ret;
 }
 
+int rbug_send_context_rule_add(struct rbug_connection *__con,
+                               rbug_context_t context,
+                               rbug_shader_t vertex,
+                               rbug_shader_t fragment,
+                               rbug_texture_t texture,
+                               rbug_texture_t surface,
+                               rbug_block_t block,
+                               uint32_t *__serial)
+{
+	uint32_t __len = 0;
+	uint32_t __pos = 0;
+	uint8_t *__data = NULL;
+	int __ret = 0;
+
+	LEN(8); /* header */
+	LEN(8); /* context */
+	LEN(8); /* vertex */
+	LEN(8); /* fragment */
+	LEN(8); /* texture */
+	LEN(8); /* surface */
+	LEN(4); /* block */
+
+	/* align */
+	PAD(__len, 8);
+
+	__data = (uint8_t*)MALLOC(__len);
+	if (!__data)
+		return -ENOMEM;
+
+	WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_RULE_ADD));
+	WRITE(4, uint32_t, ((uint32_t)(__len / 4)));
+	WRITE(8, rbug_context_t, context); /* context */
+	WRITE(8, rbug_shader_t, vertex); /* vertex */
+	WRITE(8, rbug_shader_t, fragment); /* fragment */
+	WRITE(8, rbug_texture_t, texture); /* texture */
+	WRITE(8, rbug_texture_t, surface); /* surface */
+	WRITE(4, rbug_block_t, block); /* block */
+
+	/* final pad */
+	PAD(__pos, 8);
+
+	if (__pos != __len) {
+		__ret = -EINVAL;
+	} else {
+		rbug_connection_send_start(__con, RBUG_OP_CONTEXT_RULE_ADD, __len);
+		rbug_connection_write(__con, __data, __len);
+		__ret = rbug_connection_send_finish(__con, __serial);
+	}
+
+	FREE(__data);
+	return __ret;
+}
+
+int rbug_send_context_rule_delete(struct rbug_connection *__con,
+                                  rbug_context_t context,
+                                  rbug_block_rule_t rule,
+                                  uint32_t *__serial)
+{
+	uint32_t __len = 0;
+	uint32_t __pos = 0;
+	uint8_t *__data = NULL;
+	int __ret = 0;
+
+	LEN(8); /* header */
+	LEN(8); /* context */
+	LEN(8); /* rule */
+
+	/* align */
+	PAD(__len, 8);
+
+	__data = (uint8_t*)MALLOC(__len);
+	if (!__data)
+		return -ENOMEM;
+
+	WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_RULE_DELETE));
+	WRITE(4, uint32_t, ((uint32_t)(__len / 4)));
+	WRITE(8, rbug_context_t, context); /* context */
+	WRITE(8, rbug_block_rule_t, rule); /* rule */
+
+	/* final pad */
+	PAD(__pos, 8);
+
+	if (__pos != __len) {
+		__ret = -EINVAL;
+	} else {
+		rbug_connection_send_start(__con, RBUG_OP_CONTEXT_RULE_DELETE, __len);
+		rbug_connection_write(__con, __data, __len);
+		__ret = rbug_connection_send_finish(__con, __serial);
+	}
+
+	FREE(__data);
+	return __ret;
+}
+
 int rbug_send_context_list_reply(struct rbug_connection *__con,
                                  uint32_t serial,
                                  rbug_context_t *contexts,
@@ -320,6 +414,8 @@ int rbug_send_context_info_reply(struct rbug_connection *__con,
                                  uint32_t serial,
                                  rbug_shader_t vertex,
                                  rbug_shader_t fragment,
+                                 rbug_texture_t *texs,
+                                 uint32_t texs_len,
                                  rbug_texture_t *cbufs,
                                  uint32_t cbufs_len,
                                  rbug_texture_t zsbuf,
@@ -336,6 +432,7 @@ int rbug_send_context_info_reply(struct rbug_connection *__con,
 	LEN(4); /* serial */
 	LEN(8); /* vertex */
 	LEN(8); /* fragment */
+	LEN_ARRAY(8, texs); /* texs */
 	LEN_ARRAY(8, cbufs); /* cbufs */
 	LEN(8); /* zsbuf */
 	LEN(4); /* blocker */
@@ -353,6 +450,7 @@ int rbug_send_context_info_reply(struct rbug_connection *__con,
 	WRITE(4, uint32_t, serial); /* serial */
 	WRITE(8, rbug_shader_t, vertex); /* vertex */
 	WRITE(8, rbug_shader_t, fragment); /* fragment */
+	WRITE_ARRAY(8, rbug_texture_t, texs); /* texs */
 	WRITE_ARRAY(8, rbug_texture_t, cbufs); /* cbufs */
 	WRITE(8, rbug_texture_t, zsbuf); /* zsbuf */
 	WRITE(4, rbug_block_t, blocker); /* blocker */
@@ -373,6 +471,47 @@ int rbug_send_context_info_reply(struct rbug_connection *__con,
 	return __ret;
 }
 
+int rbug_send_context_rule_add_reply(struct rbug_connection *__con,
+                                     uint32_t serial,
+                                     rbug_block_rule_t rule,
+                                     uint32_t *__serial)
+{
+	uint32_t __len = 0;
+	uint32_t __pos = 0;
+	uint8_t *__data = NULL;
+	int __ret = 0;
+
+	LEN(8); /* header */
+	LEN(4); /* serial */
+	LEN(8); /* rule */
+
+	/* align */
+	PAD(__len, 8);
+
+	__data = (uint8_t*)MALLOC(__len);
+	if (!__data)
+		return -ENOMEM;
+
+	WRITE(4, int32_t, ((int32_t)RBUG_OP_CONTEXT_RULE_ADD_REPLY));
+	WRITE(4, uint32_t, ((uint32_t)(__len / 4)));
+	WRITE(4, uint32_t, serial); /* serial */
+	WRITE(8, rbug_block_rule_t, rule); /* rule */
+
+	/* final pad */
+	PAD(__pos, 8);
+
+	if (__pos != __len) {
+		__ret = -EINVAL;
+	} else {
+		rbug_connection_send_start(__con, RBUG_OP_CONTEXT_RULE_ADD_REPLY, __len);
+		rbug_connection_write(__con, __data, __len);
+		__ret = rbug_connection_send_finish(__con, __serial);
+	}
+
+	FREE(__data);
+	return __ret;
+}
+
 int rbug_send_context_draw_blocked(struct rbug_connection *__con,
                                    rbug_context_t context,
                                    rbug_block_t block,
@@ -579,6 +718,66 @@ struct rbug_proto_context_flush * rbug_demarshal_context_flush(struct rbug_proto
 	return ret;
 }
 
+struct rbug_proto_context_rule_add * rbug_demarshal_context_rule_add(struct rbug_proto_header *header)
+{
+	uint32_t len = 0;
+	uint32_t pos = 0;
+	uint8_t *data =  NULL;
+	struct rbug_proto_context_rule_add *ret;
+
+	if (!header)
+		return NULL;
+	if (header->opcode != (int16_t)RBUG_OP_CONTEXT_RULE_ADD)
+		return NULL;
+
+	pos = 0;
+	len = header->length * 4;
+	data = (uint8_t*)&header[1];
+	ret = MALLOC(sizeof(*ret));
+	if (!ret)
+		return NULL;
+
+	ret->header.__message = header;
+	ret->header.opcode = header->opcode;
+
+	READ(8, rbug_context_t, context); /* context */
+	READ(8, rbug_shader_t, vertex); /* vertex */
+	READ(8, rbug_shader_t, fragment); /* fragment */
+	READ(8, rbug_texture_t, texture); /* texture */
+	READ(8, rbug_texture_t, surface); /* surface */
+	READ(4, rbug_block_t, block); /* block */
+
+	return ret;
+}
+
+struct rbug_proto_context_rule_delete * rbug_demarshal_context_rule_delete(struct rbug_proto_header *header)
+{
+	uint32_t len = 0;
+	uint32_t pos = 0;
+	uint8_t *data =  NULL;
+	struct rbug_proto_context_rule_delete *ret;
+
+	if (!header)
+		return NULL;
+	if (header->opcode != (int16_t)RBUG_OP_CONTEXT_RULE_DELETE)
+		return NULL;
+
+	pos = 0;
+	len = header->length * 4;
+	data = (uint8_t*)&header[1];
+	ret = MALLOC(sizeof(*ret));
+	if (!ret)
+		return NULL;
+
+	ret->header.__message = header;
+	ret->header.opcode = header->opcode;
+
+	READ(8, rbug_context_t, context); /* context */
+	READ(8, rbug_block_rule_t, rule); /* rule */
+
+	return ret;
+}
+
 struct rbug_proto_context_list_reply * rbug_demarshal_context_list_reply(struct rbug_proto_header *header)
 {
 	uint32_t len = 0;
@@ -632,6 +831,7 @@ struct rbug_proto_context_info_reply * rbug_demarshal_context_info_reply(struct
 	READ(4, uint32_t, serial); /* serial */
 	READ(8, rbug_shader_t, vertex); /* vertex */
 	READ(8, rbug_shader_t, fragment); /* fragment */
+	READ_ARRAY(8, rbug_texture_t, texs); /* texs */
 	READ_ARRAY(8, rbug_texture_t, cbufs); /* cbufs */
 	READ(8, rbug_texture_t, zsbuf); /* zsbuf */
 	READ(4, rbug_block_t, blocker); /* blocker */
@@ -640,6 +840,34 @@ struct rbug_proto_context_info_reply * rbug_demarshal_context_info_reply(struct
 	return ret;
 }
 
+struct rbug_proto_context_rule_add_reply * rbug_demarshal_context_rule_add_reply(struct rbug_proto_header *header)
+{
+	uint32_t len = 0;
+	uint32_t pos = 0;
+	uint8_t *data =  NULL;
+	struct rbug_proto_context_rule_add_reply *ret;
+
+	if (!header)
+		return NULL;
+	if (header->opcode != (int16_t)RBUG_OP_CONTEXT_RULE_ADD_REPLY)
+		return NULL;
+
+	pos = 0;
+	len = header->length * 4;
+	data = (uint8_t*)&header[1];
+	ret = MALLOC(sizeof(*ret));
+	if (!ret)
+		return NULL;
+
+	ret->header.__message = header;
+	ret->header.opcode = header->opcode;
+
+	READ(4, uint32_t, serial); /* serial */
+	READ(8, rbug_block_rule_t, rule); /* rule */
+
+	return ret;
+}
+
 struct rbug_proto_context_draw_blocked * rbug_demarshal_context_draw_blocked(struct rbug_proto_header *header)
 {
 	uint32_t len = 0;
diff --git a/src/gallium/auxiliary/rbug/rbug_context.h b/src/gallium/auxiliary/rbug/rbug_context.h
index 9f1726d..178a3bc 100644
--- a/src/gallium/auxiliary/rbug/rbug_context.h
+++ b/src/gallium/auxiliary/rbug/rbug_context.h
@@ -41,6 +41,8 @@
 #include "rbug/rbug_proto.h"
 #include "rbug/rbug_core.h"
 
+typedef uint64_t rbug_block_rule_t;
+
 typedef enum
 {
 	RBUG_BLOCK_BEFORE = 1,
@@ -86,6 +88,24 @@ struct rbug_proto_context_flush
 	int32_t flags;
 };
 
+struct rbug_proto_context_rule_add
+{
+	struct rbug_header header;
+	rbug_context_t context;
+	rbug_shader_t vertex;
+	rbug_shader_t fragment;
+	rbug_texture_t texture;
+	rbug_texture_t surface;
+	rbug_block_t block;
+};
+
+struct rbug_proto_context_rule_delete
+{
+	struct rbug_header header;
+	rbug_context_t context;
+	rbug_block_rule_t rule;
+};
+
 struct rbug_proto_context_list_reply
 {
 	struct rbug_header header;
@@ -100,6 +120,8 @@ struct rbug_proto_context_info_reply
 	uint32_t serial;
 	rbug_shader_t vertex;
 	rbug_shader_t fragment;
+	rbug_texture_t *texs;
+	uint32_t texs_len;
 	rbug_texture_t *cbufs;
 	uint32_t cbufs_len;
 	rbug_texture_t zsbuf;
@@ -107,6 +129,13 @@ struct rbug_proto_context_info_reply
 	rbug_block_t blocked;
 };
 
+struct rbug_proto_context_rule_add_reply
+{
+	struct rbug_header header;
+	uint32_t serial;
+	rbug_block_rule_t rule;
+};
+
 struct rbug_proto_context_draw_blocked
 {
 	struct rbug_header header;
@@ -141,6 +170,20 @@ int rbug_send_context_flush(struct rbug_connection *__con,
                             int32_t flags,
                             uint32_t *__serial);
 
+int rbug_send_context_rule_add(struct rbug_connection *__con,
+                               rbug_context_t context,
+                               rbug_shader_t vertex,
+                               rbug_shader_t fragment,
+                               rbug_texture_t texture,
+                               rbug_texture_t surface,
+                               rbug_block_t block,
+                               uint32_t *__serial);
+
+int rbug_send_context_rule_delete(struct rbug_connection *__con,
+                                  rbug_context_t context,
+                                  rbug_block_rule_t rule,
+                                  uint32_t *__serial);
+
 int rbug_send_context_list_reply(struct rbug_connection *__con,
                                  uint32_t serial,
                                  rbug_context_t *contexts,
@@ -151,6 +194,8 @@ int rbug_send_context_info_reply(struct rbug_connection *__con,
                                  uint32_t serial,
                                  rbug_shader_t vertex,
                                  rbug_shader_t fragment,
+                                 rbug_texture_t *texs,
+                                 uint32_t texs_len,
                                  rbug_texture_t *cbufs,
                                  uint32_t cbufs_len,
                                  rbug_texture_t zsbuf,
@@ -158,6 +203,11 @@ int rbug_send_context_info_reply(struct rbug_connection *__con,
                                  rbug_block_t blocked,
                                  uint32_t *__serial);
 
+int rbug_send_context_rule_add_reply(struct rbug_connection *__con,
+                                     uint32_t serial,
+                                     rbug_block_rule_t rule,
+                                     uint32_t *__serial);
+
 int rbug_send_context_draw_blocked(struct rbug_connection *__con,
                                    rbug_context_t context,
                                    rbug_block_t block,
@@ -175,10 +225,16 @@ struct rbug_proto_context_draw_unblock * rbug_demarshal_context_draw_unblock(str
 
 struct rbug_proto_context_flush * rbug_demarshal_context_flush(struct rbug_proto_header *header);
 
+struct rbug_proto_context_rule_add * rbug_demarshal_context_rule_add(struct rbug_proto_header *header);
+
+struct rbug_proto_context_rule_delete * rbug_demarshal_context_rule_delete(struct rbug_proto_header *header);
+
 struct rbug_proto_context_list_reply * rbug_demarshal_context_list_reply(struct rbug_proto_header *header);
 
 struct rbug_proto_context_info_reply * rbug_demarshal_context_info_reply(struct rbug_proto_header *header);
 
+struct rbug_proto_context_rule_add_reply * rbug_demarshal_context_rule_add_reply(struct rbug_proto_header *header);
+
 struct rbug_proto_context_draw_blocked * rbug_demarshal_context_draw_blocked(struct rbug_proto_header *header);
 
 #endif
diff --git a/src/gallium/auxiliary/rbug/rbug_demarshal.c b/src/gallium/auxiliary/rbug/rbug_demarshal.c
index 80894f4..b3929b9 100644
--- a/src/gallium/auxiliary/rbug/rbug_demarshal.c
+++ b/src/gallium/auxiliary/rbug/rbug_demarshal.c
@@ -67,10 +67,16 @@ struct rbug_header * rbug_demarshal(struct rbug_proto_header *header)
 		return (struct rbug_header *)rbug_demarshal_context_draw_unblock(header);
 	case RBUG_OP_CONTEXT_FLUSH:
 		return (struct rbug_header *)rbug_demarshal_context_flush(header);
+	case RBUG_OP_CONTEXT_RULE_ADD:
+		return (struct rbug_header *)rbug_demarshal_context_rule_add(header);
+	case RBUG_OP_CONTEXT_RULE_DELETE:
+		return (struct rbug_header *)rbug_demarshal_context_rule_delete(header);
 	case RBUG_OP_CONTEXT_LIST_REPLY:
 		return (struct rbug_header *)rbug_demarshal_context_list_reply(header);
 	case RBUG_OP_CONTEXT_INFO_REPLY:
 		return (struct rbug_header *)rbug_demarshal_context_info_reply(header);
+	case RBUG_OP_CONTEXT_RULE_ADD_REPLY:
+		return (struct rbug_header *)rbug_demarshal_context_rule_add_reply(header);
 	case RBUG_OP_CONTEXT_DRAW_BLOCKED:
 		return (struct rbug_header *)rbug_demarshal_context_draw_blocked(header);
 	case RBUG_OP_SHADER_LIST:
diff --git a/src/gallium/auxiliary/rbug/rbug_proto.h b/src/gallium/auxiliary/rbug/rbug_proto.h
index db9fa68..5ef345d 100644
--- a/src/gallium/auxiliary/rbug/rbug_proto.h
+++ b/src/gallium/auxiliary/rbug/rbug_proto.h
@@ -56,8 +56,11 @@ enum rbug_opcode
 	RBUG_OP_CONTEXT_DRAW_STEP = 515,
 	RBUG_OP_CONTEXT_DRAW_UNBLOCK = 516,
 	RBUG_OP_CONTEXT_FLUSH = 518,
+	RBUG_OP_CONTEXT_RULE_ADD = 521,
+	RBUG_OP_CONTEXT_RULE_DELETE = 522,
 	RBUG_OP_CONTEXT_LIST_REPLY = -512,
 	RBUG_OP_CONTEXT_INFO_REPLY = -513,
+	RBUG_OP_CONTEXT_RULE_ADD_REPLY = -521,
 	RBUG_OP_CONTEXT_DRAW_BLOCKED = 517,
 	RBUG_OP_SHADER_LIST = 768,
 	RBUG_OP_SHADER_INFO = 769,




More information about the mesa-commit mailing list