progs/rbug: Add small remote debugging cli applications
This commit is contained in:
9
progs/rbug/.gitignore
vendored
Normal file
9
progs/rbug/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
simple_client
|
||||
simple_server
|
||||
shdr_info
|
||||
shdr_dump
|
||||
shdr_disable
|
||||
ctx_info
|
||||
tex_dump
|
||||
tex_info
|
||||
*.bmp
|
46
progs/rbug/Makefile
Normal file
46
progs/rbug/Makefile
Normal file
@@ -0,0 +1,46 @@
|
||||
# progs/rbug/Makefile
|
||||
|
||||
TOP = ../..
|
||||
include $(TOP)/configs/current
|
||||
|
||||
INCLUDES = \
|
||||
-I. \
|
||||
-I$(TOP)/src/gallium/include \
|
||||
-I$(TOP)/src/gallium/auxiliary \
|
||||
-I$(TOP)/src/gallium/drivers \
|
||||
$(PROG_INCLUDES)
|
||||
|
||||
LINKS = \
|
||||
$(GALLIUM_AUXILIARIES) \
|
||||
$(PROG_LINKS)
|
||||
|
||||
SOURCES = \
|
||||
simple_client.c \
|
||||
simple_server.c \
|
||||
shdr_info.c \
|
||||
shdr_dump.c \
|
||||
shdr_disable.c \
|
||||
ctx_info.c \
|
||||
tex_info.c \
|
||||
tex_dump.c
|
||||
|
||||
|
||||
OBJECTS = $(SOURCES:.c=.o)
|
||||
|
||||
PROGS = $(OBJECTS:.o=)
|
||||
|
||||
##### TARGETS #####
|
||||
|
||||
default: $(OBJECTS) $(PROGS)
|
||||
|
||||
clean:
|
||||
-rm -f $(PROGS)
|
||||
-rm -f *.o
|
||||
|
||||
##### RULES #####
|
||||
|
||||
$(OBJECTS): %.o: %.c
|
||||
$(CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $(PROG_DEFINES) $< -o $@
|
||||
|
||||
$(PROGS): %: %.o
|
||||
$(CC) $(LDFLAGS) $< $(LINKS) -o $@
|
39
progs/rbug/README
Normal file
39
progs/rbug/README
Normal file
@@ -0,0 +1,39 @@
|
||||
REMOTE DEBUGGING CLI APPLICATIONS
|
||||
|
||||
|
||||
= About =
|
||||
|
||||
This directory contains a Gallium3D remote debugging cli applications.
|
||||
|
||||
|
||||
= Build Instructions =
|
||||
|
||||
To build, build a normal gallium build and from this directory do the following.
|
||||
|
||||
make
|
||||
|
||||
= Usage =
|
||||
|
||||
Make sure that you driver has trace integration, see
|
||||
src/gallium/driver/trace/README for more information about that. Then from on
|
||||
the computer that you want to debug do:
|
||||
|
||||
export GALLIUM_RBUG=true
|
||||
|
||||
<launch app>
|
||||
|
||||
From the debugging computer launch apps form this directory. Currently ip
|
||||
addresses are hardcoded and you need to edit the application, but that will
|
||||
change in the future.
|
||||
|
||||
= Testing =
|
||||
|
||||
The two apps simple_client and simple_server. Are unit testing of the
|
||||
connection and (de)marsheler. Just run the server first and then the client:
|
||||
|
||||
./simple_server &
|
||||
./simple_client
|
||||
|
||||
|
||||
--
|
||||
Jakob Bornecrantz <jakob@vmware.com>
|
80
progs/rbug/ctx_info.c
Normal file
80
progs/rbug/ctx_info.c
Normal file
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright 2009 VMware, Inc.
|
||||
* 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
|
||||
* on 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
|
||||
* VMWARE AND/OR THEIR 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.
|
||||
*/
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "pipe/p_format.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_network.h"
|
||||
|
||||
#include "rbug/rbug.h"
|
||||
|
||||
static void talk()
|
||||
{
|
||||
int c = u_socket_connect("localhost", 13370);
|
||||
struct rbug_connection *con = rbug_from_socket(c);
|
||||
struct rbug_header *header;
|
||||
struct rbug_proto_context_list_reply *list;
|
||||
struct rbug_proto_context_info_reply *info;
|
||||
int i;
|
||||
|
||||
assert(c >= 0);
|
||||
assert(con);
|
||||
debug_printf("Connection get!\n");
|
||||
|
||||
debug_printf("Sending get contexts\n");
|
||||
rbug_send_context_list(con, NULL);
|
||||
|
||||
debug_printf("Waiting for contexts\n");
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_CONTEXT_LIST_REPLY);
|
||||
list = (struct rbug_proto_context_list_reply *)header;
|
||||
|
||||
debug_printf("Got contexts:\n");
|
||||
for (i = 0; i < list->contexts_len; i++) {
|
||||
#if 0
|
||||
rbug_send_contexts_info(con, list->contexts[i], NULL);
|
||||
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_CONTEXT_INFO_REPLY);
|
||||
info = (struct rbug_proto_context_info_reply *)header;
|
||||
#else
|
||||
(void)info;
|
||||
header = NULL;
|
||||
#endif
|
||||
|
||||
debug_printf("%llu\n",
|
||||
(unsigned long long)list->contexts[i]);
|
||||
rbug_free_header(header);
|
||||
}
|
||||
|
||||
rbug_free_header(&list->header);
|
||||
rbug_disconnect(con);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
talk();
|
||||
return 0;
|
||||
}
|
82
progs/rbug/shdr_disable.c
Normal file
82
progs/rbug/shdr_disable.c
Normal file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright 2009 VMware, Inc.
|
||||
* 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
|
||||
* on 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
|
||||
* VMWARE AND/OR THEIR 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.
|
||||
*/
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "pipe/p_format.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_network.h"
|
||||
|
||||
#include "rbug/rbug.h"
|
||||
|
||||
static void talk(rbug_context_t ctx, rbug_shader_t shdr)
|
||||
{
|
||||
int c = u_socket_connect("localhost", 13370);
|
||||
struct rbug_connection *con = rbug_from_socket(c);
|
||||
struct rbug_header *header;
|
||||
|
||||
assert(c >= 0);
|
||||
assert(con);
|
||||
debug_printf("Connection get!\n");
|
||||
|
||||
rbug_send_shader_disable(con, ctx, shdr, true, NULL);
|
||||
|
||||
rbug_send_ping(con, NULL);
|
||||
|
||||
debug_printf("Sent waiting for reply\n");
|
||||
header = rbug_get_message(con, NULL);
|
||||
|
||||
if (header->opcode != RBUG_OP_PING_REPLY)
|
||||
debug_printf("Error\n");
|
||||
else
|
||||
debug_printf("Ok!\n");
|
||||
|
||||
rbug_free_header(header);
|
||||
rbug_disconnect(con);
|
||||
}
|
||||
|
||||
static void print_usage()
|
||||
{
|
||||
printf("Usage shdr_disable <context> <shader>\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
long ctx;
|
||||
long shdr;
|
||||
|
||||
if (argc < 3)
|
||||
print_usage();
|
||||
|
||||
ctx = atol(argv[1]);
|
||||
shdr = atol(argv[2]);
|
||||
|
||||
if (ctx <= 0 && ctx <= 0)
|
||||
print_usage();
|
||||
|
||||
talk((uint64_t)ctx, (uint64_t)shdr);
|
||||
|
||||
return 0;
|
||||
}
|
115
progs/rbug/shdr_dump.c
Normal file
115
progs/rbug/shdr_dump.c
Normal file
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Copyright 2009 VMware, Inc.
|
||||
* 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
|
||||
* on 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
|
||||
* VMWARE AND/OR THEIR 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.
|
||||
*/
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "pipe/p_format.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_network.h"
|
||||
|
||||
#include "rbug/rbug.h"
|
||||
|
||||
#include "tgsi/tgsi_dump.h"
|
||||
|
||||
static void shader_info(struct rbug_connection *con, rbug_context_t ctx)
|
||||
{
|
||||
struct rbug_header *header;
|
||||
struct rbug_proto_shader_list_reply *list;
|
||||
struct rbug_proto_shader_info_reply *info;
|
||||
int i;
|
||||
|
||||
debug_printf("Sending get shaders to %llu\n", (unsigned long long)ctx);
|
||||
rbug_send_shader_list(con, ctx, NULL);
|
||||
|
||||
debug_printf("Waiting for shaders from %llu\n", (unsigned long long)ctx);
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_SHADER_LIST_REPLY);
|
||||
list = (struct rbug_proto_shader_list_reply *)header;
|
||||
|
||||
debug_printf("Got shaders:\n");
|
||||
for (i = 0; i < list->shaders_len; i++) {
|
||||
rbug_send_shader_info(con, ctx, list->shaders[i], NULL);
|
||||
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_SHADER_INFO_REPLY);
|
||||
info = (struct rbug_proto_shader_info_reply *)header;
|
||||
|
||||
debug_printf("#####################################################\n");
|
||||
debug_printf("ctx: %llu shdr: %llu disabled %u\n",
|
||||
(unsigned long long)ctx,
|
||||
(unsigned long long)list->shaders[i],
|
||||
info->disabled);
|
||||
|
||||
/* just to be sure */
|
||||
assert(sizeof(struct tgsi_token) == 4);
|
||||
|
||||
debug_printf("-----------------------------------------------------\n");
|
||||
tgsi_dump((struct tgsi_token *)info->original, 0);
|
||||
|
||||
if (info->replaced_len > 0) {
|
||||
debug_printf("-----------------------------------------------------\n");
|
||||
tgsi_dump((struct tgsi_token *)info->replaced, 0);
|
||||
}
|
||||
|
||||
rbug_free_header(header);
|
||||
}
|
||||
|
||||
debug_printf("#####################################################\n");
|
||||
rbug_free_header(&list->header);
|
||||
}
|
||||
|
||||
static void talk()
|
||||
{
|
||||
int c = u_socket_connect("localhost", 13370);
|
||||
struct rbug_connection *con = rbug_from_socket(c);
|
||||
struct rbug_header *header;
|
||||
struct rbug_proto_context_list_reply *list;
|
||||
int i;
|
||||
|
||||
assert(c >= 0);
|
||||
assert(con);
|
||||
debug_printf("Connection get!\n");
|
||||
|
||||
debug_printf("Sending get contexts\n");
|
||||
rbug_send_context_list(con, NULL);
|
||||
|
||||
debug_printf("Waiting for contexts\n");
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_CONTEXT_LIST_REPLY);
|
||||
list = (struct rbug_proto_context_list_reply *)header;
|
||||
|
||||
debug_printf("Got contexts:\n");
|
||||
for (i = 0; i < list->contexts_len; i++) {
|
||||
shader_info(con, list->contexts[i]);
|
||||
}
|
||||
|
||||
rbug_free_header(&list->header);
|
||||
rbug_disconnect(con);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
talk();
|
||||
return 0;
|
||||
}
|
98
progs/rbug/shdr_info.c
Normal file
98
progs/rbug/shdr_info.c
Normal file
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright 2009 VMware, Inc.
|
||||
* 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
|
||||
* on 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
|
||||
* VMWARE AND/OR THEIR 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.
|
||||
*/
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "pipe/p_format.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_network.h"
|
||||
|
||||
#include "rbug/rbug.h"
|
||||
|
||||
static void shader_info(struct rbug_connection *con, rbug_context_t ctx)
|
||||
{
|
||||
struct rbug_header *header;
|
||||
struct rbug_proto_shader_list_reply *list;
|
||||
struct rbug_proto_shader_info_reply *info;
|
||||
int i;
|
||||
|
||||
rbug_send_shader_list(con, ctx, NULL);
|
||||
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_SHADER_LIST_REPLY);
|
||||
list = (struct rbug_proto_shader_list_reply *)header;
|
||||
|
||||
debug_printf(" context | shader | disabled |\n");
|
||||
for (i = 0; i < list->shaders_len; i++) {
|
||||
rbug_send_shader_info(con, ctx, list->shaders[i], NULL);
|
||||
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_SHADER_INFO_REPLY);
|
||||
info = (struct rbug_proto_shader_info_reply *)header;
|
||||
|
||||
debug_printf("% 15llu |% 15llu |% 15u |\n",
|
||||
(unsigned long long)ctx,
|
||||
(unsigned long long)list->shaders[i],
|
||||
(unsigned)info->disabled);
|
||||
|
||||
rbug_free_header(header);
|
||||
}
|
||||
|
||||
rbug_free_header(&list->header);
|
||||
}
|
||||
|
||||
static void talk()
|
||||
{
|
||||
int c = u_socket_connect("localhost", 13370);
|
||||
struct rbug_connection *con = rbug_from_socket(c);
|
||||
struct rbug_header *header;
|
||||
struct rbug_proto_context_list_reply *list;
|
||||
int i;
|
||||
|
||||
assert(c >= 0);
|
||||
assert(con);
|
||||
debug_printf("Connection get!\n");
|
||||
|
||||
debug_printf("Sending get contexts\n");
|
||||
rbug_send_context_list(con, NULL);
|
||||
|
||||
debug_printf("Waiting for contexts\n");
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_CONTEXT_LIST_REPLY);
|
||||
list = (struct rbug_proto_context_list_reply *)header;
|
||||
|
||||
debug_printf("Got contexts:\n");
|
||||
for (i = 0; i < list->contexts_len; i++) {
|
||||
shader_info(con, list->contexts[i]);
|
||||
}
|
||||
|
||||
rbug_free_header(&list->header);
|
||||
rbug_disconnect(con);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
talk();
|
||||
return 0;
|
||||
}
|
64
progs/rbug/simple_client.c
Normal file
64
progs/rbug/simple_client.c
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright 2009 VMware, Inc.
|
||||
* 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
|
||||
* on 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
|
||||
* VMWARE AND/OR THEIR 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.
|
||||
*/
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_network.h"
|
||||
|
||||
#include "rbug/rbug.h"
|
||||
|
||||
static void talk()
|
||||
{
|
||||
int c = u_socket_connect("localhost", 13370);
|
||||
struct rbug_connection *con = rbug_from_socket(c);
|
||||
struct rbug_header *header;
|
||||
struct rbug_proto_texture_list_reply *list;
|
||||
int i;
|
||||
|
||||
assert(c >= 0);
|
||||
assert(con);
|
||||
debug_printf("Connection get!\n");
|
||||
|
||||
debug_printf("Sending get textures\n");
|
||||
rbug_send_texture_list(con, NULL);
|
||||
|
||||
debug_printf("Waiting for textures\n");
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_TEXTURE_LIST_REPLY);
|
||||
list = (struct rbug_proto_texture_list_reply *)header;
|
||||
|
||||
debug_printf("Got textures:\n");
|
||||
for (i = 0; i < list->textures_len; i++)
|
||||
debug_printf("\ttex %llu\n", (unsigned long long)list->textures[i]);
|
||||
|
||||
rbug_free_header(header);
|
||||
rbug_disconnect(con);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
talk();
|
||||
return 0;
|
||||
}
|
62
progs/rbug/simple_server.c
Normal file
62
progs/rbug/simple_server.c
Normal file
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright 2009 VMware, Inc.
|
||||
* 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
|
||||
* on 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
|
||||
* VMWARE AND/OR THEIR 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.
|
||||
*/
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_network.h"
|
||||
|
||||
#include "rbug/rbug.h"
|
||||
|
||||
static void wait()
|
||||
{
|
||||
int s = u_socket_listen_on_port(13370);
|
||||
int c = u_socket_accept(s);
|
||||
struct rbug_connection *con = rbug_from_socket(c);
|
||||
struct rbug_header *header;
|
||||
rbug_texture_t texs[2];
|
||||
uint32_t serial;
|
||||
texs[0] = 1337;
|
||||
texs[1] = 7331;
|
||||
|
||||
assert(s >= 0);
|
||||
assert(c >= 0);
|
||||
assert(con);
|
||||
debug_printf("Connection get!\n");
|
||||
|
||||
debug_printf("Waiting for get textures\n");
|
||||
header = rbug_get_message(con, &serial);
|
||||
assert(header);
|
||||
assert(header->opcode == RBUG_OP_TEXTURE_LIST);
|
||||
rbug_free_header(header);
|
||||
|
||||
rbug_send_texture_list_reply(con, serial, texs, 2, NULL);
|
||||
rbug_disconnect(con);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
wait();
|
||||
return 0;
|
||||
}
|
127
progs/rbug/tex_dump.c
Normal file
127
progs/rbug/tex_dump.c
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Copyright 2009 VMware, Inc.
|
||||
* 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
|
||||
* on 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
|
||||
* VMWARE AND/OR THEIR 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.
|
||||
*/
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "pipe/p_format.h"
|
||||
#include "pipe/p_state.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_network.h"
|
||||
#include "util/u_tile.h"
|
||||
#include "rbug/rbug.h"
|
||||
|
||||
static void dump(rbug_texture_t tex,
|
||||
struct rbug_proto_texture_info_reply *info,
|
||||
struct rbug_proto_texture_read_reply *read,
|
||||
int mip)
|
||||
{
|
||||
enum pipe_format format = info->format;
|
||||
uint8_t *data = read->data;
|
||||
unsigned width = info->width[mip];
|
||||
unsigned height = info->height[mip];
|
||||
unsigned dst_stride = width * 4 * 4;
|
||||
unsigned src_stride = read->stride;
|
||||
float *rgba = MALLOC(dst_stride * height);
|
||||
int i;
|
||||
char filename[512];
|
||||
|
||||
util_snprintf(filename, 512, "%llu_%s_%u.bmp",
|
||||
(unsigned long long)tex, pf_name(info->format), mip);
|
||||
|
||||
if (pf_is_compressed(info->format)) {
|
||||
debug_printf("skipping: %s\n", filename);
|
||||
return;
|
||||
}
|
||||
|
||||
debug_printf("saving: %s\n", filename);
|
||||
|
||||
for (i = 0; i < height; i++) {
|
||||
pipe_tile_raw_to_rgba(format, data + src_stride * i,
|
||||
width, 1,
|
||||
&rgba[width*4*i], dst_stride);
|
||||
}
|
||||
|
||||
debug_dump_float_rgba_bmp(filename, width, height, rgba, width);
|
||||
|
||||
FREE(rgba);
|
||||
}
|
||||
|
||||
static void talk()
|
||||
{
|
||||
int c = u_socket_connect("localhost", 13370);
|
||||
struct rbug_connection *con = rbug_from_socket(c);
|
||||
struct rbug_header *header;
|
||||
struct rbug_header *header2;
|
||||
struct rbug_proto_texture_list_reply *list;
|
||||
struct rbug_proto_texture_info_reply *info;
|
||||
struct rbug_proto_texture_read_reply *read;
|
||||
int i, j;
|
||||
|
||||
assert(c >= 0);
|
||||
assert(con);
|
||||
debug_printf("Connection get!\n");
|
||||
|
||||
debug_printf("Sending get textures\n");
|
||||
rbug_send_texture_list(con, NULL);
|
||||
|
||||
debug_printf("Waiting for textures\n");
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_TEXTURE_LIST_REPLY);
|
||||
list = (struct rbug_proto_texture_list_reply *)header;
|
||||
|
||||
debug_printf("Got textures:\n");
|
||||
for (i = 0; i < list->textures_len; i++) {
|
||||
rbug_send_texture_info(con, list->textures[i], NULL);
|
||||
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_TEXTURE_INFO_REPLY);
|
||||
info = (struct rbug_proto_texture_info_reply *)header;
|
||||
|
||||
for (j = 0; j <= info->last_level; j++) {
|
||||
rbug_send_texture_read(con, list->textures[i],
|
||||
0, j, 0,
|
||||
0, 0, info->width[j], info->height[j],
|
||||
NULL);
|
||||
|
||||
header2 = rbug_get_message(con, NULL);
|
||||
assert(header2->opcode == RBUG_OP_TEXTURE_READ_REPLY);
|
||||
read = (struct rbug_proto_texture_read_reply *)header2;
|
||||
|
||||
dump(list->textures[i], info, read, j);
|
||||
|
||||
rbug_free_header(header2);
|
||||
}
|
||||
|
||||
rbug_free_header(header);
|
||||
|
||||
}
|
||||
rbug_free_header(&list->header);
|
||||
rbug_disconnect(con);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
talk();
|
||||
return 0;
|
||||
}
|
78
progs/rbug/tex_info.c
Normal file
78
progs/rbug/tex_info.c
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright 2009 VMware, Inc.
|
||||
* 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
|
||||
* on 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
|
||||
* VMWARE AND/OR THEIR 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.
|
||||
*/
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "pipe/p_format.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_network.h"
|
||||
|
||||
#include "rbug/rbug.h"
|
||||
|
||||
static void talk()
|
||||
{
|
||||
int c = u_socket_connect("localhost", 13370);
|
||||
struct rbug_connection *con = rbug_from_socket(c);
|
||||
struct rbug_header *header;
|
||||
struct rbug_proto_texture_list_reply *list;
|
||||
struct rbug_proto_texture_info_reply *info;
|
||||
int i;
|
||||
|
||||
assert(c >= 0);
|
||||
assert(con);
|
||||
debug_printf("Connection get!\n");
|
||||
|
||||
debug_printf("Sending get textures\n");
|
||||
rbug_send_texture_list(con, NULL);
|
||||
|
||||
debug_printf("Waiting for textures\n");
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_TEXTURE_LIST_REPLY);
|
||||
list = (struct rbug_proto_texture_list_reply *)header;
|
||||
|
||||
debug_printf("Got textures:\n");
|
||||
for (i = 0; i < list->textures_len; i++) {
|
||||
rbug_send_texture_info(con, list->textures[i], NULL);
|
||||
|
||||
header = rbug_get_message(con, NULL);
|
||||
assert(header->opcode == RBUG_OP_TEXTURE_INFO_REPLY);
|
||||
info = (struct rbug_proto_texture_info_reply *)header;
|
||||
|
||||
debug_printf("%llu %s %u x %u x %u, block(%ux%u %u), last_level: %u, nr_samples: %u, usage: %u\n",
|
||||
(unsigned long long)list->textures[i], pf_name(info->format),
|
||||
info->width[0], info->height[0], info->depth[0],
|
||||
info->blockw, info->blockh, info->blocksize,
|
||||
info->last_level, info->nr_samples, info->tex_usage);
|
||||
rbug_free_header(header);
|
||||
}
|
||||
|
||||
rbug_free_header(&list->header);
|
||||
rbug_disconnect(con);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
talk();
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user