blob: 08c229e74790174e964f5dbe29aa861ff79ac7e0 [file] [log] [blame]
Lingfeng Yangc023a192018-11-08 09:22:31 -08001// Copyright (C) 2018 The Android Open Source Project
2// Copyright (C) 2018 Google Inc.
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15#pragma once
16
17#include <vulkan/vulkan.h>
18
Lingfeng Yang2285df12018-11-17 16:25:11 -080019#include "VulkanHandles.h"
20
Jason Macnak3d664002023-03-30 16:00:50 -070021namespace gfxstream {
22namespace vk {
Lingfeng Yangc023a192018-11-08 09:22:31 -080023
24class VulkanHandleMapping {
Gurchetan Singhc4444b82023-09-19 08:06:20 -070025 public:
Lingfeng Yangc023a192018-11-08 09:22:31 -080026 VulkanHandleMapping() = default;
Gurchetan Singhc4444b82023-09-19 08:06:20 -070027 virtual ~VulkanHandleMapping() {}
Lingfeng Yangc023a192018-11-08 09:22:31 -080028
Gurchetan Singhc4444b82023-09-19 08:06:20 -070029#define DECLARE_HANDLE_MAP_PURE_VIRTUAL_METHOD(type) \
30 virtual void mapHandles_##type(type* handles, size_t count = 1) = 0; \
31 virtual void mapHandles_##type##_u64(const type* handles, uint64_t* handle_u64s, \
32 size_t count = 1) = 0; \
33 virtual void mapHandles_u64_##type(const uint64_t* handle_u64s, type* handles, \
34 size_t count = 1) = 0;
Lingfeng Yangc023a192018-11-08 09:22:31 -080035
Lingfeng Yang2285df12018-11-17 16:25:11 -080036 GOLDFISH_VK_LIST_HANDLE_TYPES(DECLARE_HANDLE_MAP_PURE_VIRTUAL_METHOD)
Lingfeng Yangc023a192018-11-08 09:22:31 -080037};
38
Lingfeng Yang2285df12018-11-17 16:25:11 -080039class DefaultHandleMapping : public VulkanHandleMapping {
Gurchetan Singhc4444b82023-09-19 08:06:20 -070040 public:
41 virtual ~DefaultHandleMapping() {}
Lingfeng Yang2285df12018-11-17 16:25:11 -080042
Gurchetan Singhc4444b82023-09-19 08:06:20 -070043#define DECLARE_HANDLE_MAP_OVERRIDE(type) \
44 void mapHandles_##type(type* handles, size_t count) override; \
45 void mapHandles_##type##_u64(const type* handles, uint64_t* handle_u64s, size_t count) \
46 override; \
47 void mapHandles_u64_##type(const uint64_t* handle_u64s, type* handles, size_t count) override;
Lingfeng Yang2285df12018-11-17 16:25:11 -080048
49 GOLDFISH_VK_LIST_HANDLE_TYPES(DECLARE_HANDLE_MAP_OVERRIDE)
50};
51
Jason Macnak3d664002023-03-30 16:00:50 -070052} // namespace vk
53} // namespace gfxstream