1 /************************************************************************** 2 * 3 * Copyright 2010 VMware, Inc. 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21 * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27 28 #ifndef RBUG_SCREEN_H 29 #define RBUG_SCREEN_H 30 31 #include "pipe/p_screen.h" 32 #include "pipe/p_defines.h" 33 34 #include "os/os_thread.h" 35 36 struct rbug_list { 37 struct rbug_list *next; 38 struct rbug_list *prev; 39 }; 40 41 42 struct rbug_screen 43 { 44 struct pipe_screen base; 45 46 struct pipe_screen *screen; 47 struct pipe_context *private_context; 48 49 /* remote debugger */ 50 struct rbug_rbug *rbug; 51 52 pipe_mutex list_mutex; 53 int num_contexts; 54 int num_resources; 55 int num_surfaces; 56 int num_transfers; 57 struct rbug_list contexts; 58 struct rbug_list resources; 59 struct rbug_list surfaces; 60 struct rbug_list transfers; 61 }; 62 63 static INLINE struct rbug_screen * 64 rbug_screen(struct pipe_screen *screen) 65 { 66 return (struct rbug_screen *)screen; 67 } 68 69 #define rbug_screen_add_to_list(scr, name, obj) \ 70 do { \ 71 pipe_mutex_lock(scr->list_mutex); \ 72 insert_at_head(&scr->name, &obj->list); \ 73 scr->num_##name++; \ 74 pipe_mutex_unlock(scr->list_mutex); \ 75 } while (0) 76 77 #define rbug_screen_remove_from_list(scr, name, obj) \ 78 do { \ 79 pipe_mutex_lock(scr->list_mutex); \ 80 remove_from_list(&obj->list); \ 81 scr->num_##name--; \ 82 pipe_mutex_unlock(scr->list_mutex); \ 83 } while (0) 84 85 86 87 /********************************************************** 88 * rbug_core.c 89 */ 90 91 struct rbug_rbug; 92 93 struct rbug_rbug * 94 rbug_start(struct rbug_screen *rb_screen); 95 96 void 97 rbug_stop(struct rbug_rbug *rbug); 98 99 100 #endif /* RBUG_SCREEN_H */ 101