X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Ftrace%2Ftr_screen.c;h=0fa8d0f449f2a3f8486da6a92d7467d952b86b5a;hb=9da0cd56c3f95081bd4cc7efe87d2b475019b17d;hp=a7d33661838edc1f1d9129867c82220b02ff7f9a;hpb=fa31b1095eeea97695125ad5770239805bed37da;p=mesa.git diff --git a/src/gallium/drivers/trace/tr_screen.c b/src/gallium/drivers/trace/tr_screen.c index a7d33661838..0fa8d0f449f 100644 --- a/src/gallium/drivers/trace/tr_screen.c +++ b/src/gallium/drivers/trace/tr_screen.c @@ -1,6 +1,6 @@ /************************************************************************** * - * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * Copyright 2008 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a @@ -18,7 +18,7 @@ * 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 TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * IN NO EVENT SHALL VMWARE AND/OR ITS 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. @@ -27,17 +27,16 @@ #include "util/u_format.h" #include "util/u_memory.h" -#include "util/u_simple_list.h" +#include "util/simple_list.h" #include "tr_dump.h" +#include "tr_dump_defines.h" #include "tr_dump_state.h" #include "tr_texture.h" #include "tr_context.h" #include "tr_screen.h" #include "tr_public.h" -#include "pipe/p_format.h" - static boolean trace = FALSE; @@ -83,6 +82,47 @@ trace_screen_get_vendor(struct pipe_screen *_screen) } +static const char * +trace_screen_get_device_vendor(struct pipe_screen *_screen) +{ + struct trace_screen *tr_scr = trace_screen(_screen); + struct pipe_screen *screen = tr_scr->screen; + const char *result; + + trace_dump_call_begin("pipe_screen", "get_device_vendor"); + + trace_dump_arg(ptr, screen); + + result = screen->get_device_vendor(screen); + + trace_dump_ret(string, result); + + trace_dump_call_end(); + + return result; +} + + +static struct disk_cache * +trace_screen_get_disk_shader_cache(struct pipe_screen *_screen) +{ + struct trace_screen *tr_scr = trace_screen(_screen); + struct pipe_screen *screen = tr_scr->screen; + + trace_dump_call_begin("pipe_screen", "get_disk_shader_cache"); + + trace_dump_arg(ptr, screen); + + struct disk_cache *result = screen->get_disk_shader_cache(screen); + + trace_dump_ret(ptr, result); + + trace_dump_call_end(); + + return result; +} + + static int trace_screen_get_param(struct pipe_screen *_screen, enum pipe_cap param) @@ -107,8 +147,9 @@ trace_screen_get_param(struct pipe_screen *_screen, static int -trace_screen_get_shader_param(struct pipe_screen *_screen, unsigned shader, - enum pipe_shader_cap param) +trace_screen_get_shader_param(struct pipe_screen *_screen, + enum pipe_shader_type shader, + enum pipe_shader_cap param) { struct trace_screen *tr_scr = trace_screen(_screen); struct pipe_screen *screen = tr_scr->screen; @@ -132,7 +173,7 @@ trace_screen_get_shader_param(struct pipe_screen *_screen, unsigned shader, static float trace_screen_get_paramf(struct pipe_screen *_screen, - enum pipe_cap param) + enum pipe_capf param) { struct trace_screen *tr_scr = trace_screen(_screen); struct pipe_screen *screen = tr_scr->screen; @@ -153,6 +194,32 @@ trace_screen_get_paramf(struct pipe_screen *_screen, } +static int +trace_screen_get_compute_param(struct pipe_screen *_screen, + enum pipe_shader_ir ir_type, + enum pipe_compute_cap param, void *data) +{ + struct trace_screen *tr_scr = trace_screen(_screen); + struct pipe_screen *screen = tr_scr->screen; + int result; + + trace_dump_call_begin("pipe_screen", "get_compute_param"); + + trace_dump_arg(ptr, screen); + trace_dump_arg(int, ir_type); + trace_dump_arg(int, param); + trace_dump_arg(ptr, data); + + result = screen->get_compute_param(screen, ir_type, param, data); + + trace_dump_ret(int, result); + + trace_dump_call_end(); + + return result; +} + + static boolean trace_screen_is_format_supported(struct pipe_screen *_screen, enum pipe_format format, @@ -184,7 +251,8 @@ trace_screen_is_format_supported(struct pipe_screen *_screen, static struct pipe_context * -trace_screen_context_create(struct pipe_screen *_screen, void *priv) +trace_screen_context_create(struct pipe_screen *_screen, void *priv, + unsigned flags) { struct trace_screen *tr_scr = trace_screen(_screen); struct pipe_screen *screen = tr_scr->screen; @@ -193,8 +261,10 @@ trace_screen_context_create(struct pipe_screen *_screen, void *priv) trace_dump_call_begin("pipe_screen", "context_create"); trace_dump_arg(ptr, screen); + trace_dump_arg(ptr, priv); + trace_dump_arg(uint, flags); - result = screen->context_create(screen, priv); + result = screen->context_create(screen, priv, flags); trace_dump_ret(ptr, result); @@ -208,14 +278,13 @@ trace_screen_context_create(struct pipe_screen *_screen, void *priv) static void trace_screen_flush_frontbuffer(struct pipe_screen *_screen, - struct pipe_resource *_resource, + struct pipe_resource *resource, unsigned level, unsigned layer, - void *context_private) + void *context_private, + struct pipe_box *sub_box) { struct trace_screen *tr_scr = trace_screen(_screen); - struct trace_resource *tr_res = trace_resource(_resource); struct pipe_screen *screen = tr_scr->screen; - struct pipe_resource *resource = tr_res->resource; trace_dump_call_begin("pipe_screen", "flush_frontbuffer"); @@ -227,7 +296,7 @@ trace_screen_flush_frontbuffer(struct pipe_screen *_screen, trace_dump_arg(ptr, context_private); */ - screen->flush_frontbuffer(screen, resource, level, layer, context_private); + screen->flush_frontbuffer(screen, resource, level, layer, context_private, sub_box); trace_dump_call_end(); } @@ -257,15 +326,16 @@ trace_screen_resource_create(struct pipe_screen *_screen, trace_dump_call_end(); - result = trace_resource_create(tr_scr, result); - + if (result) + result->screen = _screen; return result; } static struct pipe_resource * trace_screen_resource_from_handle(struct pipe_screen *_screen, const struct pipe_resource *templ, - struct winsys_handle *handle) + struct winsys_handle *handle, + unsigned usage) { struct trace_screen *tr_screen = trace_screen(_screen); struct pipe_screen *screen = tr_screen->screen; @@ -273,95 +343,65 @@ trace_screen_resource_from_handle(struct pipe_screen *_screen, /* TODO trace call */ - result = screen->resource_from_handle(screen, templ, handle); - - result = trace_resource_create(trace_screen(_screen), result); + result = screen->resource_from_handle(screen, templ, handle, usage); + if (result) + result->screen = _screen; return result; } static boolean trace_screen_resource_get_handle(struct pipe_screen *_screen, - struct pipe_resource *_resource, - struct winsys_handle *handle) + struct pipe_context *_pipe, + struct pipe_resource *resource, + struct winsys_handle *handle, + unsigned usage) { struct trace_screen *tr_screen = trace_screen(_screen); - struct trace_resource *tr_resource = trace_resource(_resource); + struct trace_context *tr_pipe = _pipe ? trace_context(_pipe) : NULL; struct pipe_screen *screen = tr_screen->screen; - struct pipe_resource *resource = tr_resource->resource; /* TODO trace call */ - return screen->resource_get_handle(screen, resource, handle); + return screen->resource_get_handle(screen, tr_pipe ? tr_pipe->pipe : NULL, + resource, handle, usage); } - - static void -trace_screen_resource_destroy(struct pipe_screen *_screen, - struct pipe_resource *_resource) +trace_screen_resource_changed(struct pipe_screen *_screen, + struct pipe_resource *resource) { struct trace_screen *tr_scr = trace_screen(_screen); - struct trace_resource *tr_res = trace_resource(_resource); struct pipe_screen *screen = tr_scr->screen; - struct pipe_resource *resource = tr_res->resource; - assert(resource->screen == screen); - - trace_dump_call_begin("pipe_screen", "resource_destroy"); + trace_dump_call_begin("pipe_screen", "resource_changed"); trace_dump_arg(ptr, screen); trace_dump_arg(ptr, resource); - trace_dump_call_end(); + screen->resource_changed(screen, resource); - trace_resource_destroy(tr_scr, tr_res); + trace_dump_call_end(); } - - -/******************************************************************** - * buffer - */ - - - -static struct pipe_resource * -trace_screen_user_buffer_create(struct pipe_screen *_screen, - void *data, - unsigned size, - unsigned usage) +static void +trace_screen_resource_destroy(struct pipe_screen *_screen, + struct pipe_resource *resource) { struct trace_screen *tr_scr = trace_screen(_screen); struct pipe_screen *screen = tr_scr->screen; - struct pipe_resource *result; - trace_dump_call_begin("pipe_screen", "user_buffer_create"); + trace_dump_call_begin("pipe_screen", "resource_destroy"); trace_dump_arg(ptr, screen); - trace_dump_arg_begin("data"); - trace_dump_bytes(data, size); - trace_dump_arg_end(); - trace_dump_arg(uint, size); - trace_dump_arg(uint, usage); - - result = screen->user_buffer_create(screen, data, size, usage); - - trace_dump_ret(ptr, result); + trace_dump_arg(ptr, resource); trace_dump_call_end(); - if(result) { - assert(!(result->flags & TRACE_FLAG_USER_BUFFER)); - result->flags |= TRACE_FLAG_USER_BUFFER; - } - - return trace_resource_create(tr_scr, result); + screen->resource_destroy(screen, resource); } - - /******************************************************************** * fence */ @@ -392,19 +432,24 @@ trace_screen_fence_reference(struct pipe_screen *_screen, static boolean -trace_screen_fence_signalled(struct pipe_screen *_screen, - struct pipe_fence_handle *fence) +trace_screen_fence_finish(struct pipe_screen *_screen, + struct pipe_context *_ctx, + struct pipe_fence_handle *fence, + uint64_t timeout) { struct trace_screen *tr_scr = trace_screen(_screen); struct pipe_screen *screen = tr_scr->screen; + struct pipe_context *ctx = _ctx ? trace_context(_ctx)->pipe : NULL; int result; - trace_dump_call_begin("pipe_screen", "fence_signalled"); + trace_dump_call_begin("pipe_screen", "fence_finish"); trace_dump_arg(ptr, screen); + trace_dump_arg(ptr, ctx); trace_dump_arg(ptr, fence); + trace_dump_arg(uint, timeout); - result = screen->fence_signalled(screen, fence); + result = screen->fence_finish(screen, ctx, fence, timeout); trace_dump_ret(bool, result); @@ -414,35 +459,28 @@ trace_screen_fence_signalled(struct pipe_screen *_screen, } -static boolean -trace_screen_fence_finish(struct pipe_screen *_screen, - struct pipe_fence_handle *fence, - uint64_t timeout) +/******************************************************************** + * screen + */ + +static uint64_t +trace_screen_get_timestamp(struct pipe_screen *_screen) { struct trace_screen *tr_scr = trace_screen(_screen); struct pipe_screen *screen = tr_scr->screen; - int result; - - trace_dump_call_begin("pipe_screen", "fence_finish"); + uint64_t result; + trace_dump_call_begin("pipe_screen", "get_timestamp"); trace_dump_arg(ptr, screen); - trace_dump_arg(ptr, fence); - trace_dump_arg(uint, timeout); - result = screen->fence_finish(screen, fence, timeout); - - trace_dump_ret(bool, result); + result = screen->get_timestamp(screen); + trace_dump_ret(uint, result); trace_dump_call_end(); return result; } - -/******************************************************************** - * screen - */ - static void trace_screen_destroy(struct pipe_screen *_screen) { @@ -452,7 +490,6 @@ trace_screen_destroy(struct pipe_screen *_screen) trace_dump_call_begin("pipe_screen", "destroy"); trace_dump_arg(ptr, screen); trace_dump_call_end(); - trace_dump_trace_end(); screen->destroy(screen); @@ -480,10 +517,6 @@ struct pipe_screen * trace_screen_create(struct pipe_screen *screen) { struct trace_screen *tr_scr; - struct pipe_winsys *winsys; - - if(!screen) - goto error1; if (!trace_enabled()) goto error1; @@ -491,35 +524,33 @@ trace_screen_create(struct pipe_screen *screen) trace_dump_call_begin("", "pipe_screen_create"); tr_scr = CALLOC_STRUCT(trace_screen); - if(!tr_scr) + if (!tr_scr) goto error2; -#if 0 - winsys = trace_winsys_create(screen->winsys); - if(!winsys) - goto error3; -#else - winsys = screen->winsys; -#endif - tr_scr->base.winsys = winsys; +#define SCR_INIT(_member) \ + tr_scr->base._member = screen->_member ? trace_screen_##_member : NULL + tr_scr->base.destroy = trace_screen_destroy; tr_scr->base.get_name = trace_screen_get_name; tr_scr->base.get_vendor = trace_screen_get_vendor; + tr_scr->base.get_device_vendor = trace_screen_get_device_vendor; + SCR_INIT(get_disk_shader_cache); tr_scr->base.get_param = trace_screen_get_param; tr_scr->base.get_shader_param = trace_screen_get_shader_param; tr_scr->base.get_paramf = trace_screen_get_paramf; + tr_scr->base.get_compute_param = trace_screen_get_compute_param; tr_scr->base.is_format_supported = trace_screen_is_format_supported; assert(screen->context_create); tr_scr->base.context_create = trace_screen_context_create; tr_scr->base.resource_create = trace_screen_resource_create; tr_scr->base.resource_from_handle = trace_screen_resource_from_handle; tr_scr->base.resource_get_handle = trace_screen_resource_get_handle; + SCR_INIT(resource_changed); tr_scr->base.resource_destroy = trace_screen_resource_destroy; - tr_scr->base.user_buffer_create = trace_screen_user_buffer_create; tr_scr->base.fence_reference = trace_screen_fence_reference; - tr_scr->base.fence_signalled = trace_screen_fence_signalled; tr_scr->base.fence_finish = trace_screen_fence_finish; tr_scr->base.flush_frontbuffer = trace_screen_flush_frontbuffer; + tr_scr->base.get_timestamp = trace_screen_get_timestamp; tr_scr->screen = screen; @@ -531,7 +562,6 @@ trace_screen_create(struct pipe_screen *screen) error2: trace_dump_ret(ptr, screen); trace_dump_call_end(); - trace_dump_trace_end(); error1: return screen; }