[g3dvl] make pipe_context mandatory for creation pipe_video_context

This commit is contained in:
Christian König 2011-07-08 12:03:13 +02:00
parent 7eca76952b
commit 2ec350ff1d
14 changed files with 55 additions and 146 deletions

View file

@ -42,8 +42,6 @@ vl_context_destroy(struct pipe_video_context *context)
assert(context);
ctx->pipe->destroy(ctx->pipe);
FREE(ctx);
}

View file

@ -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 = \

View file

@ -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);

View file

@ -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 <vl/vl_context.h>
#include <util/u_video.h>
#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);
}

View file

@ -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 <pipe/p_video_context.h>
struct pipe_video_context *
r300_video_create(struct pipe_screen *screen, void *priv);
#endif

View file

@ -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 \

View file

@ -38,6 +38,7 @@
#include <util/u_memory.h>
#include <util/u_inlines.h>
#include "util/u_upload_mgr.h"
#include <vl/vl_context.h>
#include <vl/vl_video_buffer.h>
#include "os/os_time.h"
#include <pipebuffer/pb_buffer.h>
@ -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
*/

View file

@ -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 <vl/vl_context.h>
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);
}

View file

@ -1,9 +0,0 @@
#ifndef __R600_VIDEO_CONTEXT_H__
#define __R600_VIDEO_CONTEXT_H__
#include <pipe/p_video_context.h>
struct pipe_video_context *
r600_video_create(struct pipe_screen *screen, void *priv);
#endif

View file

@ -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);
}
/**

View file

@ -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

View file

@ -237,10 +237,6 @@ 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;
vl_dri_ctx = CALLOC_STRUCT(vl_dri_context);
if (!vl_dri_ctx)
goto no_struct;
if (!vscreen->pscreen->video_context_create) {
debug_printf("[G3DVL] No video support found on %s/%s.\n",
vscreen->pscreen->get_vendor(vscreen->pscreen),
@ -248,10 +244,24 @@ vl_video_create(struct vl_screen *vscreen)
goto no_vpipe;
}
vl_dri_ctx->base.vpipe = vscreen->pscreen->video_context_create(vscreen->pscreen, vl_dri_ctx);
vl_dri_ctx = CALLOC_STRUCT(vl_dri_context);
if (!vl_dri_ctx)
goto no_struct;
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_pipe;
}
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);
}

View file

@ -44,6 +44,7 @@ struct vl_screen
struct vl_context
{
struct vl_screen *vscreen;
struct pipe_context *pipe;
struct pipe_video_context *vpipe;
};

View file

@ -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);
}