2017-12-21 07:45:38 +08:00
|
|
|
/*
|
2022-08-23 17:45:24 +08:00
|
|
|
* Copyright (C) 2018-2022 Intel Corporation
|
2017-12-21 07:45:38 +08:00
|
|
|
*
|
2018-09-18 15:11:08 +08:00
|
|
|
* SPDX-License-Identifier: MIT
|
2017-12-21 07:45:38 +08:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
2020-02-23 05:50:57 +08:00
|
|
|
#include "opencl/source/sharings/sharing.h"
|
|
|
|
#include "opencl/source/sharings/va/va_sharing_defines.h"
|
2019-02-27 18:39:32 +08:00
|
|
|
|
2017-12-21 07:45:38 +08:00
|
|
|
#include <functional>
|
2021-03-12 21:21:52 +08:00
|
|
|
#include <mutex>
|
2019-07-26 17:08:22 +08:00
|
|
|
#include <vector>
|
2017-12-21 07:45:38 +08:00
|
|
|
|
2019-03-26 18:59:46 +08:00
|
|
|
namespace NEO {
|
2019-05-27 21:58:58 +08:00
|
|
|
|
2017-12-21 07:45:38 +08:00
|
|
|
class VASharingFunctions : public SharingFunctions {
|
|
|
|
public:
|
|
|
|
VASharingFunctions(VADisplay vaDisplay);
|
2018-05-24 17:06:30 +08:00
|
|
|
~VASharingFunctions() override;
|
2017-12-21 07:45:38 +08:00
|
|
|
|
|
|
|
uint32_t getId() const override {
|
|
|
|
return VASharingFunctions::sharingId;
|
|
|
|
}
|
|
|
|
static const uint32_t sharingId;
|
|
|
|
|
2019-04-15 23:20:28 +08:00
|
|
|
MOCKABLE_VIRTUAL bool isValidVaDisplay() {
|
2017-12-21 07:45:38 +08:00
|
|
|
return vaDisplayIsValidPFN(vaDisplay) == 1;
|
|
|
|
}
|
|
|
|
|
2019-04-15 23:20:28 +08:00
|
|
|
MOCKABLE_VIRTUAL VAStatus deriveImage(VASurfaceID vaSurface, VAImage *vaImage) {
|
2017-12-21 07:45:38 +08:00
|
|
|
return vaDeriveImagePFN(vaDisplay, vaSurface, vaImage);
|
|
|
|
}
|
|
|
|
|
2019-04-15 23:20:28 +08:00
|
|
|
MOCKABLE_VIRTUAL VAStatus destroyImage(VAImageID vaImageId) {
|
2017-12-21 07:45:38 +08:00
|
|
|
return vaDestroyImagePFN(vaDisplay, vaImageId);
|
|
|
|
}
|
|
|
|
|
2019-04-15 23:20:28 +08:00
|
|
|
MOCKABLE_VIRTUAL VAStatus extGetSurfaceHandle(VASurfaceID *vaSurface, unsigned int *handleId) {
|
2017-12-21 07:45:38 +08:00
|
|
|
return vaExtGetSurfaceHandlePFN(vaDisplay, vaSurface, handleId);
|
|
|
|
}
|
|
|
|
|
2020-05-05 03:37:54 +08:00
|
|
|
MOCKABLE_VIRTUAL VAStatus exportSurfaceHandle(VASurfaceID vaSurface, uint32_t memType, uint32_t flags, void *descriptor) {
|
|
|
|
return vaExportSurfaceHandlePFN(vaDisplay, vaSurface, memType, flags, descriptor);
|
|
|
|
}
|
|
|
|
|
2019-04-15 23:20:28 +08:00
|
|
|
MOCKABLE_VIRTUAL VAStatus syncSurface(VASurfaceID vaSurface) {
|
2017-12-21 07:45:38 +08:00
|
|
|
return vaSyncSurfacePFN(vaDisplay, vaSurface);
|
|
|
|
}
|
|
|
|
|
2019-05-27 21:58:58 +08:00
|
|
|
MOCKABLE_VIRTUAL VAStatus queryImageFormats(VADisplay vaDisplay, VAImageFormat *formatList, int *numFormats) {
|
|
|
|
return vaQueryImageFormatsPFN(vaDisplay, formatList, numFormats);
|
|
|
|
}
|
|
|
|
|
|
|
|
MOCKABLE_VIRTUAL int maxNumImageFormats(VADisplay vaDisplay) {
|
|
|
|
if (vaMaxNumImageFormatsPFN) {
|
|
|
|
return vaMaxNumImageFormatsPFN(vaDisplay);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2019-04-17 16:33:52 +08:00
|
|
|
void *getLibFunc(const char *func) {
|
2017-12-21 07:45:38 +08:00
|
|
|
if (vaGetLibFuncPFN) {
|
|
|
|
return vaGetLibFuncPFN(vaDisplay, func);
|
|
|
|
}
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
void initFunctions();
|
2019-05-27 21:58:58 +08:00
|
|
|
void querySupportedVaImageFormats(VADisplay vaDisplay);
|
|
|
|
|
|
|
|
cl_int getSupportedFormats(cl_mem_flags flags,
|
|
|
|
cl_mem_object_type imageType,
|
2021-01-19 22:58:32 +08:00
|
|
|
cl_uint plane,
|
2019-05-27 21:58:58 +08:00
|
|
|
cl_uint numEntries,
|
|
|
|
VAImageFormat *formats,
|
|
|
|
cl_uint *numImageFormats);
|
|
|
|
|
2017-12-21 07:45:38 +08:00
|
|
|
static std::function<void *(const char *, int)> fdlopen;
|
|
|
|
static std::function<void *(void *handle, const char *symbol)> fdlsym;
|
|
|
|
static std::function<int(void *handle)> fdlclose;
|
|
|
|
|
|
|
|
static bool isVaLibraryAvailable();
|
|
|
|
|
2021-03-12 21:21:52 +08:00
|
|
|
std::mutex mutex;
|
|
|
|
|
2017-12-21 07:45:38 +08:00
|
|
|
protected:
|
|
|
|
void *libHandle = nullptr;
|
|
|
|
VADisplay vaDisplay = nullptr;
|
|
|
|
VADisplayIsValidPFN vaDisplayIsValidPFN = [](VADisplay vaDisplay) { return 0; };
|
|
|
|
VADeriveImagePFN vaDeriveImagePFN;
|
|
|
|
VADestroyImagePFN vaDestroyImagePFN;
|
|
|
|
VASyncSurfacePFN vaSyncSurfacePFN;
|
|
|
|
VAExtGetSurfaceHandlePFN vaExtGetSurfaceHandlePFN;
|
2020-05-05 03:37:54 +08:00
|
|
|
VAExportSurfaceHandlePFN vaExportSurfaceHandlePFN;
|
2017-12-21 07:45:38 +08:00
|
|
|
VAGetLibFuncPFN vaGetLibFuncPFN;
|
2019-05-27 21:58:58 +08:00
|
|
|
VAQueryImageFormatsPFN vaQueryImageFormatsPFN;
|
|
|
|
VAMaxNumImageFormatsPFN vaMaxNumImageFormatsPFN;
|
|
|
|
|
2022-08-23 17:45:24 +08:00
|
|
|
std::vector<VAImageFormat> supportedPackedFormats;
|
2021-01-19 22:58:32 +08:00
|
|
|
std::vector<VAImageFormat> supported2PlaneFormats;
|
|
|
|
std::vector<VAImageFormat> supported3PlaneFormats;
|
2017-12-21 07:45:38 +08:00
|
|
|
};
|
2019-03-26 18:59:46 +08:00
|
|
|
} // namespace NEO
|