blob: b1d70a9d913a08a6f43446194571e646b0f868b5 [file] [log] [blame]
// Copyright (C) 2020 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef ANDROID_VIRTIO_GPU_OPS
#define ANDROID_VIRTIO_GPU_OPS
/* virtio-gpu interface for color buffers
* (triggered by minigbm/egl calling virtio-gpu ioctls) */
typedef void (*create_color_buffer_with_handle_t)(
uint32_t width,
uint32_t height,
uint32_t format,
uint32_t fwkFormat,
uint32_t handle);
/* create YUV textures with given width and height
type: FRAMEWORK_FORMAT_NV12 or FRAMEWORK_FORMAT_YUV_420_888
count: how many set of textures will be created
output: caller allocated storage to hold results: size should
be 2*count for NV12 or 3*cout for YUV_420_888
*/
typedef void (*create_yuv_textures_t)(uint32_t type,
uint32_t count,
int width,
int height,
uint32_t* output);
/* destroy YUV textures */
typedef void (*destroy_yuv_textures_t)(uint32_t type,
uint32_t count,
uint32_t* textures);
/* call the user provided func with privData to update the content
of textures.
type: FRAMEWORK_FORMAT_NV12 or FRAMEWORK_FORMAT_YUV_420_888
textures: size 2 (NV12) or 3 (YUV420)
*/
typedef void (*update_yuv_textures_t)(uint32_t type,
uint32_t* textures,
void* privData,
void* func);
/* swap out the yuv textures of the colorbuffer, and use the new yuv textures
* to update colorbuffer content; on return, textures will have the retired
* yuv textures that are free to hold new data
*/
typedef void (*swap_textures_and_update_color_buffer_t)(
uint32_t colorbufferhandle,
int x,
int y,
int width,
int height,
uint32_t format,
uint32_t type,
uint32_t texture_type,
uint32_t* textures);
typedef void (*open_color_buffer_t)(uint32_t handle);
typedef void (*close_color_buffer_t)(uint32_t handle);
typedef void (*update_color_buffer_t)(
uint32_t handle, int x, int y, int width, int height,
uint32_t format, uint32_t type, void* pixels);
typedef void (*read_color_buffer_t)(
uint32_t handle, int x, int y, int width, int height,
uint32_t format, uint32_t type, void* pixels);
typedef void (*read_color_buffer_yuv_t)(
uint32_t handle, int x, int y, int width, int height,
void* pixels, uint32_t pixels_size);
typedef void (*post_color_buffer_t)(uint32_t handle);
typedef void (*repost_t)(void);
typedef uint32_t (*get_last_posted_color_buffer_t)(void);
typedef void (*bind_color_buffer_to_texture_t)(uint32_t);
typedef void* (*get_global_egl_context_t)(void);
typedef void (*wait_for_gpu_t)(uint64_t eglsync);
typedef void (*wait_for_gpu_vulkan_t)(uint64_t device, uint64_t fence);
typedef void (*set_guest_managed_color_buffer_lifetime_t)(bool guest_managed);
struct AndroidVirtioGpuOps {
create_color_buffer_with_handle_t create_color_buffer_with_handle;
open_color_buffer_t open_color_buffer;
close_color_buffer_t close_color_buffer;
update_color_buffer_t update_color_buffer;
read_color_buffer_t read_color_buffer;
read_color_buffer_yuv_t read_color_buffer_yuv;
post_color_buffer_t post_color_buffer;
repost_t repost;
/* yuv texture related */
create_yuv_textures_t create_yuv_textures;
destroy_yuv_textures_t destroy_yuv_textures;
update_yuv_textures_t update_yuv_textures;
swap_textures_and_update_color_buffer_t
swap_textures_and_update_color_buffer;
/* virtual device widget related */
get_last_posted_color_buffer_t get_last_posted_color_buffer;
bind_color_buffer_to_texture_t bind_color_buffer_to_texture;
get_global_egl_context_t get_global_egl_context;
wait_for_gpu_t wait_for_gpu;
wait_for_gpu_vulkan_t wait_for_gpu_vulkan;
set_guest_managed_color_buffer_lifetime_t set_guest_managed_color_buffer_lifetime;
};
#endif // ANDROID_VIRTIO_GPU_OPS