Merge "Rename Vulkan functor items to match style"
This commit is contained in:
committed by
Android (Google) Code Review
commit
09b1843ca4
@@ -53,16 +53,16 @@ struct DrawVkInfo {
|
||||
VkFormat format;
|
||||
|
||||
// Input: Color space transfer params
|
||||
float G;
|
||||
float A;
|
||||
float B;
|
||||
float C;
|
||||
float D;
|
||||
float E;
|
||||
float F;
|
||||
float g;
|
||||
float a;
|
||||
float b;
|
||||
float c;
|
||||
float d;
|
||||
float e;
|
||||
float f;
|
||||
|
||||
// Input: Color space transformation from linear RGB to D50-adapted XYZ
|
||||
float matrix[9];
|
||||
float colorSpaceTransform[9];
|
||||
|
||||
// Input: current clip rect
|
||||
int clipLeft;
|
||||
|
||||
@@ -24,7 +24,6 @@ cc_library_shared {
|
||||
srcs: [
|
||||
"draw_functor.cpp",
|
||||
"draw_gl_functor.cpp",
|
||||
"draw_vk_functor.cpp",
|
||||
"functor_utils.cpp",
|
||||
"jni_entry_point.cpp",
|
||||
"graphics_utils.cpp",
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
// Copyright 2018 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
//
|
||||
//******************************************************************************
|
||||
// This is a copy of the coresponding android_webview/public/browser header.
|
||||
// Any changes to the interface should be made there.
|
||||
//
|
||||
// The purpose of having the copy is twofold:
|
||||
// - it removes the need to have Chromium sources present in the tree in order
|
||||
// to build the plat_support library,
|
||||
// - it captures API that the corresponding Android release supports.
|
||||
//******************************************************************************
|
||||
|
||||
#ifndef ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_VK_H_
|
||||
#define ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_VK_H_
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
static const int kAwDrawVKInfoVersion = 1;
|
||||
|
||||
// Holds the information required to trigger initialization of the Vulkan
|
||||
// functor.
|
||||
struct InitParams {
|
||||
// All params are input
|
||||
VkInstance instance;
|
||||
VkPhysicalDevice physical_device;
|
||||
VkDevice device;
|
||||
VkQueue queue;
|
||||
uint32_t graphics_queue_index;
|
||||
uint32_t instance_version;
|
||||
const char* const* enabled_extension_names;
|
||||
// Only one of device_features and device_features_2 should be non-null.
|
||||
// If both are null then no features are enabled.
|
||||
VkPhysicalDeviceFeatures* device_features;
|
||||
VkPhysicalDeviceFeatures2* device_features_2;
|
||||
};
|
||||
|
||||
// Holds the information required to trigger an Vulkan composite operation.
|
||||
struct CompositeParams {
|
||||
// Input: current width/height of destination surface.
|
||||
int width;
|
||||
int height;
|
||||
|
||||
// Input: is the render target a FBO
|
||||
bool is_layer;
|
||||
|
||||
// Input: current transform matrix
|
||||
float transform[16];
|
||||
|
||||
// Input WebView should do its main compositing draws into this. It cannot do
|
||||
// anything that would require stopping the render pass.
|
||||
VkCommandBuffer secondary_command_buffer;
|
||||
|
||||
// Input: The main color attachment index where secondary_command_buffer will
|
||||
// eventually be submitted.
|
||||
uint32_t color_attachment_index;
|
||||
|
||||
// Input: A render pass which will be compatible to the one which the
|
||||
// secondary_command_buffer will be submitted into.
|
||||
VkRenderPass compatible_render_pass;
|
||||
|
||||
// Input: Format of the destination surface.
|
||||
VkFormat format;
|
||||
|
||||
// Input: Color space transfer params
|
||||
float G;
|
||||
float A;
|
||||
float B;
|
||||
float C;
|
||||
float D;
|
||||
float E;
|
||||
float F;
|
||||
|
||||
// Input: Color space transformation from linear RGB to D50-adapted XYZ
|
||||
float matrix[9];
|
||||
|
||||
// Input: current clip rect
|
||||
int clip_left;
|
||||
int clip_top;
|
||||
int clip_right;
|
||||
int clip_bottom;
|
||||
};
|
||||
|
||||
// Holds the information for the post-submission callback of main composite
|
||||
// draw.
|
||||
struct PostCompositeParams {
|
||||
// Input: Fence for the composite command buffer to signal it has finished its
|
||||
// work on the GPU.
|
||||
int fd;
|
||||
};
|
||||
|
||||
// Holds the information required to trigger an Vulkan operation.
|
||||
struct AwDrawVKInfo {
|
||||
int version; // The AwDrawVKInfo this struct was built with.
|
||||
|
||||
// Input: tells the draw function what action to perform.
|
||||
enum Mode {
|
||||
kModeInit = 0,
|
||||
kModeReInit = 1,
|
||||
kModePreComposite = 2,
|
||||
kModeComposite = 3,
|
||||
kModePostComposite = 4,
|
||||
kModeSync = 5,
|
||||
} mode;
|
||||
|
||||
// Input: The parameters for the functor being called
|
||||
union ParamUnion {
|
||||
struct InitParams init_params;
|
||||
struct CompositeParams composite_params;
|
||||
struct PostCompositeParams post_composite_params;
|
||||
} info;
|
||||
};
|
||||
|
||||
typedef void(AwDrawVKFunction)(long view_context, AwDrawVKInfo* draw_info);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // ANDROID_WEBVIEW_PUBLIC_BROWSER_DRAW_VK_H_
|
||||
@@ -1,142 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 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.
|
||||
*/
|
||||
|
||||
// Provides a webviewchromium glue layer adapter from the internal Android
|
||||
// Vulkan Functor data types into the types the chromium stack expects, and
|
||||
// back.
|
||||
|
||||
#define LOG_TAG "webviewchromium_plat_support"
|
||||
|
||||
#include "draw_fn.h"
|
||||
#include "draw_vk.h"
|
||||
|
||||
#include <jni.h>
|
||||
#include <private/hwui/DrawVkInfo.h>
|
||||
#include <utils/Functor.h>
|
||||
#include <utils/Log.h>
|
||||
|
||||
#include "functor_utils.h"
|
||||
|
||||
#define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))
|
||||
|
||||
namespace android {
|
||||
namespace {
|
||||
|
||||
AwDrawVKFunction* g_aw_drawvk_function = NULL;
|
||||
|
||||
class DrawVKFunctor : public Functor {
|
||||
public:
|
||||
explicit DrawVKFunctor(jlong view_context) : view_context_(view_context) {}
|
||||
~DrawVKFunctor() override {}
|
||||
|
||||
// Functor
|
||||
status_t operator ()(int what, void* data) override {
|
||||
using uirenderer::DrawVkInfo;
|
||||
if (!g_aw_drawvk_function) {
|
||||
ALOGE("Cannot draw: no DrawVK Function installed");
|
||||
return DrawVkInfo::kStatusDone;
|
||||
}
|
||||
|
||||
AwDrawVKInfo aw_info;
|
||||
aw_info.version = kAwDrawVKInfoVersion;
|
||||
switch (what) {
|
||||
case DrawVkInfo::kModeComposite: {
|
||||
aw_info.mode = AwDrawVKInfo::kModeComposite;
|
||||
DrawVkInfo* vk_info = reinterpret_cast<DrawVkInfo*>(data);
|
||||
|
||||
// Map across the input values.
|
||||
CompositeParams& params = aw_info.info.composite_params;
|
||||
params.width = vk_info->width;
|
||||
params.height = vk_info->height;
|
||||
params.is_layer = vk_info->isLayer;
|
||||
for (size_t i = 0; i < 16; i++) {
|
||||
params.transform[i] = vk_info->transform[i];
|
||||
}
|
||||
params.secondary_command_buffer = vk_info->secondaryCommandBuffer;
|
||||
params.color_attachment_index = vk_info->colorAttachmentIndex;
|
||||
params.compatible_render_pass = vk_info->compatibleRenderPass;
|
||||
params.format = vk_info->format;
|
||||
params.G = vk_info->G;
|
||||
params.A = vk_info->A;
|
||||
params.B = vk_info->B;
|
||||
params.C = vk_info->C;
|
||||
params.D = vk_info->D;
|
||||
params.E = vk_info->E;
|
||||
params.F = vk_info->F;
|
||||
for (size_t i = 0; i < 9; i++) {
|
||||
params.matrix[i] = vk_info->matrix[i];
|
||||
}
|
||||
params.clip_left = vk_info->clipLeft;
|
||||
params.clip_top = vk_info->clipTop;
|
||||
params.clip_right = vk_info->clipRight;
|
||||
params.clip_bottom = vk_info->clipBottom;
|
||||
|
||||
break;
|
||||
}
|
||||
case DrawVkInfo::kModePostComposite:
|
||||
break;
|
||||
case DrawVkInfo::kModeSync:
|
||||
aw_info.mode = AwDrawVKInfo::kModeSync;
|
||||
break;
|
||||
default:
|
||||
ALOGE("Unexpected DrawVKInfo type %d", what);
|
||||
return DrawVkInfo::kStatusDone;
|
||||
}
|
||||
|
||||
// Invoke the DrawVK method.
|
||||
g_aw_drawvk_function(view_context_, &aw_info);
|
||||
|
||||
return DrawVkInfo::kStatusDone;
|
||||
}
|
||||
|
||||
private:
|
||||
intptr_t view_context_;
|
||||
};
|
||||
|
||||
jlong CreateVKFunctor(JNIEnv*, jclass, jlong view_context) {
|
||||
RaiseFileNumberLimit();
|
||||
return reinterpret_cast<jlong>(new DrawVKFunctor(view_context));
|
||||
}
|
||||
|
||||
void DestroyVKFunctor(JNIEnv*, jclass, jlong functor) {
|
||||
delete reinterpret_cast<DrawVKFunctor*>(functor);
|
||||
}
|
||||
|
||||
void SetChromiumAwDrawVKFunction(JNIEnv*, jclass, jlong draw_function) {
|
||||
g_aw_drawvk_function = reinterpret_cast<AwDrawVKFunction*>(draw_function);
|
||||
}
|
||||
|
||||
const char kClassName[] = "com/android/webview/chromium/DrawVKFunctor";
|
||||
const JNINativeMethod kJniMethods[] = {
|
||||
{ "nativeCreateVKFunctor", "(J)J",
|
||||
reinterpret_cast<void*>(CreateVKFunctor) },
|
||||
{ "nativeDestroyVKFunctor", "(J)V",
|
||||
reinterpret_cast<void*>(DestroyVKFunctor) },
|
||||
{ "nativeSetChromiumAwDrawVKFunction", "(J)V",
|
||||
reinterpret_cast<void*>(SetChromiumAwDrawVKFunction) },
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
void RegisterDrawVKFunctor(JNIEnv* env) {
|
||||
jclass clazz = env->FindClass(kClassName);
|
||||
LOG_ALWAYS_FATAL_IF(!clazz, "Unable to find class '%s'", kClassName);
|
||||
|
||||
int res = env->RegisterNatives(clazz, kJniMethods, NELEM(kJniMethods));
|
||||
LOG_ALWAYS_FATAL_IF(res < 0, "register native methods failed: res=%d", res);
|
||||
}
|
||||
|
||||
} // namespace android
|
||||
Reference in New Issue
Block a user