From: Christian König Date: Fri, 8 Jul 2011 10:03:13 +0000 (+0200) Subject: [g3dvl] make pipe_context mandatory for creation pipe_video_context X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2ec350ff1d9f13ec95d7b9d46f57ad9b9efcc8ea;p=mesa.git [g3dvl] make pipe_context mandatory for creation pipe_video_context --- diff --git a/src/gallium/auxiliary/vl/vl_context.c b/src/gallium/auxiliary/vl/vl_context.c index 46e1981cc9f..87de24c5402 100644 --- a/src/gallium/auxiliary/vl/vl_context.c +++ b/src/gallium/auxiliary/vl/vl_context.c @@ -42,8 +42,6 @@ vl_context_destroy(struct pipe_video_context *context) assert(context); - ctx->pipe->destroy(ctx->pipe); - FREE(ctx); } diff --git a/src/gallium/drivers/r300/Makefile b/src/gallium/drivers/r300/Makefile index dfedf353877..4088216adcb 100644 --- a/src/gallium/drivers/r300/Makefile +++ b/src/gallium/drivers/r300/Makefile @@ -26,7 +26,6 @@ C_SOURCES = \ r300_texture.c \ r300_texture_desc.c \ r300_tgsi_to_rc.c \ - r300_video_context.c \ r300_transfer.c LIBRARY_INCLUDES = \ diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c index 53437d3ad08..854fc39e014 100644 --- a/src/gallium/drivers/r300/r300_screen.c +++ b/src/gallium/drivers/r300/r300_screen.c @@ -25,6 +25,7 @@ #include "util/u_format_s3tc.h" #include "util/u_memory.h" #include "os/os_time.h" +#include "vl/vl_context.h" #include "vl/vl_video_buffer.h" #include "r300_context.h" @@ -32,7 +33,6 @@ #include "r300_screen_buffer.h" #include "r300_state_inlines.h" #include "r300_public.h" -#include "r300_video_context.h" #include "draw/draw_context.h" @@ -425,6 +425,14 @@ static boolean r300_is_format_supported(struct pipe_screen* screen, return retval == usage; } +static struct pipe_video_context * +r300_video_create(struct pipe_screen *screen, struct pipe_context *pipe, void *priv) +{ + assert(screen); + + return vl_create_context(pipe); +} + static void r300_destroy_screen(struct pipe_screen* pscreen) { struct r300_screen* r300screen = r300_screen(pscreen); diff --git a/src/gallium/drivers/r300/r300_video_context.c b/src/gallium/drivers/r300/r300_video_context.c deleted file mode 100644 index 697e45a5745..00000000000 --- a/src/gallium/drivers/r300/r300_video_context.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2009-2010 Advanced Micro Devices, Inc. - * - * 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 - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) 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 -#include -#include "r300_video_context.h" - -struct pipe_video_context * -r300_video_create(struct pipe_screen *screen, void *priv) -{ - struct pipe_context *pipe; - - assert(screen); - - pipe = screen->context_create(screen, priv); - if (!pipe) - return NULL; - - return vl_create_context(pipe); -} diff --git a/src/gallium/drivers/r300/r300_video_context.h b/src/gallium/drivers/r300/r300_video_context.h deleted file mode 100644 index aaae14cec47..00000000000 --- a/src/gallium/drivers/r300/r300_video_context.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2009-2010 Advanced Micro Devices, Inc. - * - * 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 - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL - * THE COPYRIGHT HOLDER(S) 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. - */ - -#ifndef __R300_VIDEO_CONTEXT_H__ -#define __R300_VIDEO_CONTEXT_H__ - -#include - -struct pipe_video_context * -r300_video_create(struct pipe_screen *screen, void *priv); - -#endif diff --git a/src/gallium/drivers/r600/Makefile b/src/gallium/drivers/r600/Makefile index 3dda3a6339f..7e21e3e32b1 100644 --- a/src/gallium/drivers/r600/Makefile +++ b/src/gallium/drivers/r600/Makefile @@ -16,7 +16,6 @@ C_SOURCES = \ r600_shader.c \ r600_state.c \ r600_texture.c \ - r600_video_context.c \ r700_asm.c \ evergreen_state.c \ eg_asm.c \ diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index 4b923f86704..9e0b0ea3e49 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -38,6 +38,7 @@ #include #include #include "util/u_upload_mgr.h" +#include #include #include "os/os_time.h" #include @@ -47,7 +48,6 @@ #include "r600_shader.h" #include "r600_pipe.h" #include "r600_state_inlines.h" -#include "r600_video_context.h" /* * pipe_context @@ -301,6 +301,14 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void return &rctx->context; } +static struct pipe_video_context * +r600_video_create(struct pipe_screen *screen, struct pipe_context *pipe, void *priv) +{ + assert(screen && pipe); + + return vl_create_context(pipe); +} + /* * pipe_screen */ diff --git a/src/gallium/drivers/r600/r600_video_context.c b/src/gallium/drivers/r600/r600_video_context.c deleted file mode 100644 index 5f0d5f5baec..00000000000 --- a/src/gallium/drivers/r600/r600_video_context.c +++ /dev/null @@ -1,44 +0,0 @@ -/************************************************************************** - * - * Copyright 2010 Christian König - * 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 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 TUNGSTEN GRAPHICS 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. - * - **************************************************************************/ - -#include "r600_video_context.h" -#include "util/u_video.h" -#include - -struct pipe_video_context * -r600_video_create(struct pipe_screen *screen, void *priv) -{ - struct pipe_context *pipe; - - assert(screen); - - pipe = screen->context_create(screen, priv); - if (!pipe) - return NULL; - - return vl_create_context(pipe); -} diff --git a/src/gallium/drivers/r600/r600_video_context.h b/src/gallium/drivers/r600/r600_video_context.h deleted file mode 100644 index f579980bd36..00000000000 --- a/src/gallium/drivers/r600/r600_video_context.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __R600_VIDEO_CONTEXT_H__ -#define __R600_VIDEO_CONTEXT_H__ - -#include - -struct pipe_video_context * -r600_video_create(struct pipe_screen *screen, void *priv); - -#endif diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c index b978fb4f61e..2a5485209d1 100644 --- a/src/gallium/drivers/softpipe/sp_screen.c +++ b/src/gallium/drivers/softpipe/sp_screen.c @@ -301,18 +301,11 @@ softpipe_flush_frontbuffer(struct pipe_screen *_screen, } static struct pipe_video_context * -sp_video_create(struct pipe_screen *screen, void *priv) +sp_video_create(struct pipe_screen *screen, struct pipe_context *context, void *priv) { - struct pipe_context *pipe; - assert(screen); - pipe = screen->context_create(screen, NULL); - if (!pipe) - return NULL; - - /* TODO: Use slice buffering for softpipe when implemented, no advantage to buffering an entire picture with softpipe */ - return vl_create_context(pipe); + return vl_create_context(context); } /** diff --git a/src/gallium/include/pipe/p_screen.h b/src/gallium/include/pipe/p_screen.h index 011724a79cc..32869bb71e8 100644 --- a/src/gallium/include/pipe/p_screen.h +++ b/src/gallium/include/pipe/p_screen.h @@ -100,7 +100,9 @@ struct pipe_screen { struct pipe_context * (*context_create)( struct pipe_screen *, void *priv ); - struct pipe_video_context * (*video_context_create)( struct pipe_screen *screen, void *priv ); + struct pipe_video_context * (*video_context_create)( struct pipe_screen *screen, + struct pipe_context *context, + void *priv ); /** * Check if the given pipe_format is supported as a texture or diff --git a/src/gallium/winsys/g3dvl/dri/dri_winsys.c b/src/gallium/winsys/g3dvl/dri/dri_winsys.c index ffb94de4a7b..42b33d191d4 100644 --- a/src/gallium/winsys/g3dvl/dri/dri_winsys.c +++ b/src/gallium/winsys/g3dvl/dri/dri_winsys.c @@ -237,21 +237,31 @@ vl_video_create(struct vl_screen *vscreen) struct vl_dri_screen *vl_dri_scrn = (struct vl_dri_screen*)vscreen; struct vl_dri_context *vl_dri_ctx; + if (!vscreen->pscreen->video_context_create) { + debug_printf("[G3DVL] No video support found on %s/%s.\n", + vscreen->pscreen->get_vendor(vscreen->pscreen), + vscreen->pscreen->get_name(vscreen->pscreen)); + goto no_vpipe; + } + vl_dri_ctx = CALLOC_STRUCT(vl_dri_context); if (!vl_dri_ctx) goto no_struct; - if (!vscreen->pscreen->video_context_create) { + vl_dri_ctx->base.pipe = vscreen->pscreen->context_create(vscreen->pscreen, vl_dri_ctx); + if (!vl_dri_ctx->base.pipe) { debug_printf("[G3DVL] No video support found on %s/%s.\n", vscreen->pscreen->get_vendor(vscreen->pscreen), vscreen->pscreen->get_name(vscreen->pscreen)); - goto no_vpipe; + goto no_pipe; } - vl_dri_ctx->base.vpipe = vscreen->pscreen->video_context_create(vscreen->pscreen, vl_dri_ctx); + vl_dri_ctx->base.vpipe = vscreen->pscreen->video_context_create(vscreen->pscreen, + vl_dri_ctx->base.pipe, + vl_dri_ctx); if (!vl_dri_ctx->base.vpipe) - goto no_vpipe; + goto no_pipe; vl_dri_ctx->base.vpipe->priv = vl_dri_ctx; vl_dri_ctx->base.vscreen = vscreen; @@ -259,9 +269,11 @@ vl_video_create(struct vl_screen *vscreen) return &vl_dri_ctx->base; -no_vpipe: +no_pipe: FREE(vl_dri_ctx); + no_struct: +no_vpipe: return NULL; } @@ -271,6 +283,7 @@ void vl_video_destroy(struct vl_context *vctx) assert(vctx); + vl_dri_ctx->base.pipe->destroy(vl_dri_ctx->base.pipe); vl_dri_ctx->base.vpipe->destroy(vl_dri_ctx->base.vpipe); FREE(vl_dri_ctx); } diff --git a/src/gallium/winsys/g3dvl/vl_winsys.h b/src/gallium/winsys/g3dvl/vl_winsys.h index 152a4a62292..2d80c1d9b32 100644 --- a/src/gallium/winsys/g3dvl/vl_winsys.h +++ b/src/gallium/winsys/g3dvl/vl_winsys.h @@ -44,6 +44,7 @@ struct vl_screen struct vl_context { struct vl_screen *vscreen; + struct pipe_context *pipe; struct pipe_video_context *vpipe; }; diff --git a/src/gallium/winsys/g3dvl/xlib/xsp_winsys.c b/src/gallium/winsys/g3dvl/xlib/xsp_winsys.c index 1a67e2436e4..3caf6603243 100644 --- a/src/gallium/winsys/g3dvl/xlib/xsp_winsys.c +++ b/src/gallium/winsys/g3dvl/xlib/xsp_winsys.c @@ -172,18 +172,26 @@ void vl_screen_destroy(struct vl_screen *vscreen) struct vl_context* vl_video_create(struct vl_screen *vscreen) { + struct pipe_video_context *pipe; struct pipe_video_context *vpipe; struct vl_context *vctx; assert(vscreen); assert(vscreen->pscreen->video_context_create); - vpipe = vscreen->pscreen->video_context_create(vscreen->pscreen, NULL); - if (!vpipe) + pipe = vscreen->pscreen->context_create(vscreen->pscreen, NULL); + if (!pipe) return NULL; + vpipe = vscreen->pscreen->video_context_create(vscreen->pscreen, pipe, NULL); + if (!vpipe) { + pipe->destroy(pipe); + return NULL; + } + vctx = CALLOC_STRUCT(vl_context); if (!vctx) { + pipe->destroy(pipe); vpipe->destroy(vpipe); return NULL; } @@ -199,6 +207,7 @@ void vl_video_destroy(struct vl_context *vctx) { assert(vctx); + vctx->pipe->destroy(vctx->pipe); vctx->vpipe->destroy(vctx->vpipe); FREE(vctx); }