mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-04 00:20:55 +00:00
vfs_gpu: offer 'vfs_gpu_env' call
* retrieve Genode::Env from plugin, this way no mesa applications need to be changed. * add 'vfs_gpu' api * remove when all required functionality is implemented within the plugin. issue #4380
This commit is contained in:
parent
b98e07ed34
commit
a3976f0468
1
repos/gems/lib/import/import-vfs_gpu.mk
Normal file
1
repos/gems/lib/import/import-vfs_gpu.mk
Normal file
@ -0,0 +1 @@
|
|||||||
|
REP_INC_DIR += src/lib/vfs/gpu
|
3
repos/gems/lib/symbols/vfs_gpu
Normal file
3
repos/gems/lib/symbols/vfs_gpu
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
_Z11vfs_gpu_envv T
|
||||||
|
_Z18vfs_gpu_connectionm T
|
||||||
|
vfs_file_system_factory T
|
13
repos/gems/recipes/api/vfs_gpu/content.mk
Normal file
13
repos/gems/recipes/api/vfs_gpu/content.mk
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
MIRROR_FROM_REP_DIR := \
|
||||||
|
src/lib/vfs/gpu/vfs_gpu.h \
|
||||||
|
lib/import/import-vfs_gpu.mk \
|
||||||
|
lib/symbols/vfs_gpu
|
||||||
|
|
||||||
|
content: $(MIRROR_FROM_REP_DIR)
|
||||||
|
|
||||||
|
$(MIRROR_FROM_REP_DIR):
|
||||||
|
$(mirror_from_rep_dir)
|
||||||
|
|
||||||
|
LICENSE:
|
||||||
|
cp $(GENODE_DIR)/LICENSE $@
|
||||||
|
|
1
repos/gems/recipes/api/vfs_gpu/hash
Normal file
1
repos/gems/recipes/api/vfs_gpu/hash
Normal file
@ -0,0 +1 @@
|
|||||||
|
2022-01-14-b 717f2b436a763c3ac1a752ae3fa9b194c786f1a9
|
1
repos/gems/recipes/src/vfs_gpu/api
Normal file
1
repos/gems/recipes/src/vfs_gpu/api
Normal file
@ -0,0 +1 @@
|
|||||||
|
vfs_gpu
|
@ -21,6 +21,8 @@
|
|||||||
#include <util/xml_generator.h>
|
#include <util/xml_generator.h>
|
||||||
#include <vfs/single_file_system.h>
|
#include <vfs/single_file_system.h>
|
||||||
|
|
||||||
|
#include "vfs_gpu.h"
|
||||||
|
|
||||||
namespace Vfs_gpu
|
namespace Vfs_gpu
|
||||||
{
|
{
|
||||||
using namespace Vfs;
|
using namespace Vfs;
|
||||||
@ -135,10 +137,9 @@ struct Vfs_gpu::File_system : Single_file_system
|
|||||||
|
|
||||||
static Vfs_gpu::File_system *_fs { nullptr };
|
static Vfs_gpu::File_system *_fs { nullptr };
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XXX: return GPU session for given ID, retrieved by 'stat->inode'.
|
* XXX: return GPU session for given ID, retrieved by 'stat->inode'.
|
||||||
* This function is used, for example, by libdrm via (dlopen/dlsym).
|
* This function is used, for example, by libdrm
|
||||||
*/
|
*/
|
||||||
Gpu::Connection *vfs_gpu_connection(unsigned long id)
|
Gpu::Connection *vfs_gpu_connection(unsigned long id)
|
||||||
{
|
{
|
||||||
@ -149,15 +150,25 @@ Gpu::Connection *vfs_gpu_connection(unsigned long id)
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
return _fs->_handle_space.apply<Gpu_vfs_handle>(
|
return _fs->_handle_space.apply<Gpu_vfs_handle>(
|
||||||
Id_space::Id { .value = id },
|
Id_space::Id { .value = id },
|
||||||
[] (Gpu_vfs_handle &handle) {
|
[] (Gpu_vfs_handle &handle)
|
||||||
return &handle._gpu_session; });
|
{
|
||||||
|
return &handle._gpu_session;
|
||||||
|
}
|
||||||
|
);
|
||||||
} catch (...) { }
|
} catch (...) { }
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static Vfs::Env *_env { nullptr };
|
||||||
|
|
||||||
|
Genode::Env *vfs_gpu_env()
|
||||||
|
{
|
||||||
|
return _env ? &_env->env() : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
/**************************
|
/**************************
|
||||||
** VFS plugin interface **
|
** VFS plugin interface **
|
||||||
**************************/
|
**************************/
|
||||||
@ -169,6 +180,7 @@ extern "C" Vfs::File_system_factory *vfs_file_system_factory(void)
|
|||||||
Vfs::File_system *create(Vfs::Env &vfs_env,
|
Vfs::File_system *create(Vfs::Env &vfs_env,
|
||||||
Genode::Xml_node node) override
|
Genode::Xml_node node) override
|
||||||
{
|
{
|
||||||
|
_env = &vfs_env;
|
||||||
try {
|
try {
|
||||||
_fs = new (vfs_env.alloc()) Vfs_gpu::File_system(vfs_env, node);
|
_fs = new (vfs_env.alloc()) Vfs_gpu::File_system(vfs_env, node);
|
||||||
return _fs;
|
return _fs;
|
||||||
|
29
repos/gems/src/lib/vfs/gpu/vfs_gpu.h
Normal file
29
repos/gems/src/lib/vfs/gpu/vfs_gpu.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* \brief Public interface for libdrm
|
||||||
|
* \author Sebastian Sumpf
|
||||||
|
* \date 2022-01-14
|
||||||
|
*
|
||||||
|
* This is a interim solution becaues libdrm currently needs access to the
|
||||||
|
* GPU::Connection and Genode::Env. Once all the necessary features are provided
|
||||||
|
* by this plugin this interface is removed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2022 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU Affero General Public License version 3.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _VFS_GPU_H_
|
||||||
|
#define _VFS_GPU_H_
|
||||||
|
|
||||||
|
namespace Gpu { class Connection; }
|
||||||
|
|
||||||
|
Gpu::Connection *vfs_gpu_connection(unsigned long);
|
||||||
|
|
||||||
|
namespace Genode { class Env; }
|
||||||
|
|
||||||
|
Genode::Env *vfs_gpu_env();
|
||||||
|
|
||||||
|
#endif /* _VFS_GPU_H_ */
|
Loading…
x
Reference in New Issue
Block a user