aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-prod (mdb) <android-build-team-robot@google.com>2020-10-01 20:29:35 +0000
committerandroid-build-prod (mdb) <android-build-team-robot@google.com>2020-10-01 20:29:35 +0000
commit371d5e67abefe8e27add5ffc6ecdf35c7458a9a7 (patch)
tree6d14053ede9676802fae5017aed7eb0c5a2ed2ff
parent8590d440c2cdcfc1d4513704687cbfa4c4524176 (diff)
parent16dbce711df7ed86dd4f2960af335c461c0d6127 (diff)
downloaddevice_generic_goldfish-opengl-sdk-release.tar.gz
device_generic_goldfish-opengl-sdk-release.tar.bz2
device_generic_goldfish-opengl-sdk-release.zip
Snap for 6877830 from 16dbce711df7ed86dd4f2960af335c461c0d6127 to sdk-releasesdk-release
Change-Id: I84aa10c1578e6da24300aa015c749e4a39fdcd36
-rw-r--r--.vscode/c_cpp_properties.json4
-rw-r--r--Android.mk20
-rw-r--r--BUILD.gn33
-rw-r--r--CMakeLists.txt4
-rw-r--r--android-emu/CMakeLists.txt4
-rw-r--r--android-emu/android/base/Tracing.cpp2
-rw-r--r--android-emu/android/base/containers/EntityManager.h585
-rw-r--r--android-emu/android/base/containers/HybridComponentManager.h132
-rw-r--r--android-emu/android/base/containers/Lookup.h168
-rw-r--r--host/include/libOpenglRender/IOStream.h15
-rw-r--r--shared/GoldfishAddressSpace/CMakeLists.txt2
-rw-r--r--shared/GoldfishAddressSpace/include/goldfish_address_space.h13
-rw-r--r--shared/GoldfishAddressSpace/include/goldfish_address_space_android.impl16
-rw-r--r--shared/GoldfishAddressSpace/include/goldfish_address_space_fuchsia.impl161
-rw-r--r--shared/OpenglCodecCommon/Android.mk11
-rw-r--r--shared/OpenglCodecCommon/CMakeLists.txt12
-rw-r--r--shared/OpenglCodecCommon/GLClientState.cpp1293
-rw-r--r--shared/OpenglCodecCommon/GLClientState.h236
-rw-r--r--shared/OpenglCodecCommon/GLESTextureUtils.cpp214
-rw-r--r--shared/OpenglCodecCommon/GLESTextureUtils.h7
-rwxr-xr-xshared/OpenglCodecCommon/GLSharedGroup.cpp312
-rwxr-xr-xshared/OpenglCodecCommon/GLSharedGroup.h95
-rw-r--r--shared/OpenglCodecCommon/StateTrackingSupport.h245
-rw-r--r--shared/OpenglCodecCommon/TextureSharedData.h7
-rw-r--r--shared/OpenglCodecCommon/astc-codec.h47
-rw-r--r--shared/OpenglCodecCommon/etc.cpp1031
-rw-r--r--shared/OpenglCodecCommon/etc.h130
-rw-r--r--shared/OpenglCodecCommon/glUtils.cpp506
-rw-r--r--shared/OpenglCodecCommon/glUtils.h12
-rw-r--r--shared/gralloc_cb/CMakeLists.txt2
-rw-r--r--shared/qemupipe/CMakeLists.txt2
-rw-r--r--system/GLESv1/CMakeLists.txt6
-rw-r--r--system/GLESv1_enc/CMakeLists.txt6
-rw-r--r--system/GLESv1_enc/GLEncoder.cpp4
-rw-r--r--system/GLESv1_enc/gl_enc.cpp276
-rw-r--r--system/GLESv2/CMakeLists.txt6
-rw-r--r--system/GLESv2/gl2.cpp3
-rw-r--r--system/GLESv2_enc/CMakeLists.txt6
-rwxr-xr-xsystem/GLESv2_enc/GL2Encoder.cpp1867
-rw-r--r--system/GLESv2_enc/GL2Encoder.h176
-rw-r--r--system/GLESv2_enc/GLESv2Validation.cpp901
-rw-r--r--system/GLESv2_enc/GLESv2Validation.h44
-rw-r--r--system/GLESv2_enc/gl2_enc.cpp355
-rw-r--r--system/OpenglSystemCommon/AddressSpaceStream.cpp4
-rw-r--r--system/OpenglSystemCommon/Android.mk4
-rw-r--r--system/OpenglSystemCommon/CMakeLists.txt8
-rw-r--r--system/OpenglSystemCommon/EmulatorFeatureInfo.h3
-rw-r--r--system/OpenglSystemCommon/FormatConversions.cpp3
-rw-r--r--system/OpenglSystemCommon/HostConnection.cpp59
-rw-r--r--system/OpenglSystemCommon/HostConnection.h12
-rw-r--r--system/OpenglSystemCommon/ProcessPipe.cpp68
-rw-r--r--system/OpenglSystemCommon/QemuPipeStream.h9
-rw-r--r--system/OpenglSystemCommon/QemuPipeStreamFuchsia.cpp133
-rw-r--r--system/OpenglSystemCommon/ThreadInfo.cpp36
-rw-r--r--system/OpenglSystemCommon/ThreadInfo.h7
-rw-r--r--system/OpenglSystemCommon/VirtioGpuPipeStream.cpp6
-rw-r--r--system/OpenglSystemCommon/VirtioGpuStream.cpp7
-rw-r--r--system/OpenglSystemCommon/address_space_graphics_types.h2
-rw-r--r--system/codecs/omx/common/Android.mk2
-rw-r--r--system/egl/Android.mk4
-rw-r--r--system/egl/CMakeLists.txt8
-rw-r--r--system/egl/egl.cpp60
-rw-r--r--system/egl/eglDisplay.cpp59
-rw-r--r--system/egl/eglDisplay.h9
-rw-r--r--system/gralloc/Android.mk2
-rw-r--r--system/gralloc/CMakeLists.txt16
-rw-r--r--system/renderControl_enc/CMakeLists.txt6
-rw-r--r--system/renderControl_enc/renderControl_client_context.cpp4
-rw-r--r--system/renderControl_enc/renderControl_client_context.h4
-rw-r--r--system/renderControl_enc/renderControl_client_proc.h4
-rw-r--r--system/renderControl_enc/renderControl_enc.cpp226
-rw-r--r--system/renderControl_enc/renderControl_entry.cpp28
-rw-r--r--system/renderControl_enc/renderControl_ftable.h4
-rw-r--r--system/renderControl_enc/renderControl_opcodes.h6
-rw-r--r--system/vulkan/CMakeLists.txt6
-rw-r--r--system/vulkan/func_table.cpp46
-rw-r--r--system/vulkan/func_table.h2
-rw-r--r--system/vulkan_enc/CMakeLists.txt6
-rw-r--r--system/vulkan_enc/ResourceTracker.cpp761
-rw-r--r--system/vulkan_enc/VkEncoder.cpp1142
-rw-r--r--system/vulkan_enc/VkEncoder.cpp.inl124
-rw-r--r--system/vulkan_enc/VkEncoder.h11
-rw-r--r--system/vulkan_enc/VkEncoder.h.inl5
-rw-r--r--system/vulkan_enc/VulkanStreamGuest.cpp16
-rw-r--r--system/vulkan_enc/VulkanStreamGuest.h3
-rw-r--r--system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp2
-rw-r--r--system/vulkan_enc/goldfish_vk_deepcopy_guest.h2
-rw-r--r--system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp2
-rw-r--r--system/vulkan_enc/goldfish_vk_extension_structs_guest.h2
-rw-r--r--system/vulkan_enc/goldfish_vk_handlemap_guest.cpp2
-rw-r--r--system/vulkan_enc/goldfish_vk_handlemap_guest.h2
-rw-r--r--system/vulkan_enc/goldfish_vk_marshaling_guest.cpp8
-rw-r--r--system/vulkan_enc/goldfish_vk_marshaling_guest.h3
-rw-r--r--system/vulkan_enc/goldfish_vk_private_defs.h11
-rw-r--r--system/vulkan_enc/goldfish_vk_transform_guest.cpp2
-rw-r--r--system/vulkan_enc/goldfish_vk_transform_guest.h2
-rw-r--r--system/vulkan_enc/vk_format_info.h21
-rw-r--r--system/vulkan_enc/vk_struct_id.h1
98 files changed, 9544 insertions, 2412 deletions
diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
index 86c10c8f..1e849fbb 100644
--- a/.vscode/c_cpp_properties.json
+++ b/.vscode/c_cpp_properties.json
@@ -10,7 +10,7 @@
],
"defines": [
"HOST_BUILD",
- "GOLDFISH_VULKAN"
+ "GFXSTREAM"
],
"macFrameworkPath": [
"/System/Library/Frameworks",
@@ -24,4 +24,4 @@
}
],
"version": 4
-} \ No newline at end of file
+}
diff --git a/Android.mk b/Android.mk
index 90d028b9..c0b270ac 100644
--- a/Android.mk
+++ b/Android.mk
@@ -35,7 +35,7 @@ EMUGL_COMMON_INCLUDES := $(GOLDFISH_OPENGL_PATH)/host/include/libOpenglRender $(
EMUGL_COMMON_CFLAGS := -DWITH_GLES2
# Whether or not to build the Vulkan library.
-BUILD_EMULATOR_VULKAN := false
+GFXSTREAM := false
# Host build
ifeq (true,$(GOLDFISH_OPENGL_BUILD_FOR_HOST))
@@ -43,7 +43,7 @@ ifeq (true,$(GOLDFISH_OPENGL_BUILD_FOR_HOST))
GOLDFISH_OPENGL_SHOULD_BUILD := true
GOLDFISH_OPENGL_LIB_SUFFIX := _host
-BUILD_EMULATOR_VULKAN := true
+GFXSTREAM := true
# Set modern defaults for the codename, version, etc.
PLATFORM_VERSION_CODENAME:=Q
@@ -63,7 +63,7 @@ EMUGL_COMMON_CFLAGS += \
-DGL_GLEXT_PROTOTYPES \
-fvisibility=default \
-DPAGE_SIZE=4096 \
- -DGOLDFISH_VULKAN \
+ -DGFXSTREAM \
-Wno-unused-parameter
endif # GOLDFISH_OPENGL_BUILD_FOR_HOST
@@ -100,8 +100,8 @@ ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 16 && echo PreJellyBean),PreJelly
endif
ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 27 && echo isApi28OrHigher),isApi28OrHigher)
- BUILD_EMULATOR_VULKAN := true
- EMUGL_COMMON_CFLAGS += -DGOLDFISH_VULKAN
+ GFXSTREAM := true
+ EMUGL_COMMON_CFLAGS += -DGFXSTREAM
endif
# Include common definitions used by all the modules included later
@@ -133,6 +133,11 @@ ifeq (true,$(GOLDFISH_OPENGL_SHOULD_BUILD))
include $(GOLDFISH_OPENGL_PATH)/shared/qemupipe/Android.mk
include $(GOLDFISH_OPENGL_PATH)/shared/gralloc_cb/Android.mk
include $(GOLDFISH_OPENGL_PATH)/shared/GoldfishAddressSpace/Android.mk
+
+ifeq (true,$(GFXSTREAM)) # android-emu
+ include $(GOLDFISH_OPENGL_PATH)/android-emu/Android.mk
+endif
+
include $(GOLDFISH_OPENGL_PATH)/shared/OpenglCodecCommon/Android.mk
# Encoder shared libraries
@@ -140,8 +145,7 @@ include $(GOLDFISH_OPENGL_PATH)/system/GLESv1_enc/Android.mk
include $(GOLDFISH_OPENGL_PATH)/system/GLESv2_enc/Android.mk
include $(GOLDFISH_OPENGL_PATH)/system/renderControl_enc/Android.mk
-ifeq (true,$(BUILD_EMULATOR_VULKAN)) # Vulkan libs
- include $(GOLDFISH_OPENGL_PATH)/android-emu/Android.mk
+ifeq (true,$(GFXSTREAM)) # Vulkan libs
include $(GOLDFISH_OPENGL_PATH)/system/vulkan_enc/Android.mk
endif
@@ -159,7 +163,7 @@ endif
include $(GOLDFISH_OPENGL_PATH)/system/egl/Android.mk
-ifeq (true,$(BUILD_EMULATOR_VULKAN)) # Vulkan libs
+ifeq (true,$(GFXSTREAM)) # Vulkan libs
include $(GOLDFISH_OPENGL_PATH)/system/vulkan/Android.mk
endif
diff --git a/BUILD.gn b/BUILD.gn
index 0d08d953..76bf9047 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -2,32 +2,32 @@ shared_library("libvulkan_goldfish") {
sources = [
"android-emu/android/base/AlignedBuf.cpp",
"android-emu/android/base/AlignedBuf.h",
- "android-emu/android/base/Pool.cpp",
- "android-emu/android/base/Pool.h",
- "android-emu/android/base/ring_buffer.c",
"android-emu/android/base/AndroidSubAllocator.cpp",
"android-emu/android/base/AndroidSubAllocator.h",
+ "android-emu/android/base/Pool.cpp",
+ "android-emu/android/base/Pool.h",
+ "android-emu/android/base/Tracing.cpp",
+ "android-emu/android/base/Tracing.h",
"android-emu/android/base/files/MemStream.cpp",
"android-emu/android/base/files/MemStream.h",
"android-emu/android/base/files/Stream.cpp",
"android-emu/android/base/files/Stream.h",
"android-emu/android/base/files/StreamSerializing.cpp",
"android-emu/android/base/files/StreamSerializing.h",
+ "android-emu/android/base/ring_buffer.c",
"android-emu/android/base/synchronization/AndroidConditionVariable.h",
"android-emu/android/base/synchronization/AndroidLock.h",
- "android-emu/android/base/synchronization/AndroidMessageChannel.h",
"android-emu/android/base/synchronization/AndroidMessageChannel.cpp",
+ "android-emu/android/base/synchronization/AndroidMessageChannel.h",
+ "android-emu/android/base/threads/AndroidFunctorThread.cpp",
"android-emu/android/base/threads/AndroidFunctorThread.h",
"android-emu/android/base/threads/AndroidThread.h",
"android-emu/android/base/threads/AndroidThreadStore.h",
- "android-emu/android/base/threads/AndroidThreadTypes.h",
- "android-emu/android/base/threads/AndroidWorkPool.h",
- "android-emu/android/base/threads/AndroidFunctorThread.cpp",
"android-emu/android/base/threads/AndroidThreadStore.h",
+ "android-emu/android/base/threads/AndroidThreadTypes.h",
"android-emu/android/base/threads/AndroidThread_pthread.cpp",
"android-emu/android/base/threads/AndroidWorkPool.cpp",
- "android-emu/android/base/Tracing.cpp",
- "android-emu/android/base/Tracing.h",
+ "android-emu/android/base/threads/AndroidWorkPool.h",
"shared/GoldfishAddressSpace/goldfish_address_space.cpp",
"shared/GoldfishAddressSpace/goldfish_address_space.h",
"shared/OpenglCodecCommon/ChecksumCalculator.cpp",
@@ -37,8 +37,8 @@ shared_library("libvulkan_goldfish") {
"shared/OpenglCodecCommon/goldfish_dma.cpp",
"shared/OpenglCodecCommon/goldfish_dma.h",
"shared/gralloc_cb/include/gralloc_cb_bp.h",
- "shared/qemupipe/include/qemu_pipe_bp.h",
"shared/qemupipe/include-types/qemu_pipe_types_bp.h",
+ "shared/qemupipe/include/qemu_pipe_bp.h",
"shared/qemupipe/qemu_pipe_common.cpp",
"shared/qemupipe/qemu_pipe_guest.cpp",
"system/OpenglSystemCommon/AddressSpaceStream.cpp",
@@ -95,7 +95,7 @@ shared_library("libvulkan_goldfish") {
defines = [
"LOG_TAG=\"goldfish_vulkan\"",
- "GOLDFISH_VULKAN",
+ "GFXSTREAM",
"GOLDFISH_NO_GL",
"VK_USE_PLATFORM_FUCHSIA",
"PLATFORM_SDK_VERSION=1",
@@ -116,6 +116,7 @@ shared_library("libvulkan_goldfish") {
"-Wno-unused-function",
"-Wno-unused-value",
"-Wno-unused-variable",
+ "-Wno-conversion",
]
ldflags = [ "-static-libstdc++" ]
@@ -131,17 +132,15 @@ shared_library("libvulkan_goldfish") {
include_dirs += [
"fuchsia/include",
- "//third_party/Vulkan-Headers/include"
+ "//third_party/Vulkan-Headers/include",
]
- libs = [
- "zircon"
- ]
+ libs = [ "zircon" ]
deps = [
- "//sdk/fidl/fuchsia.hardware.goldfish",
+ "//sdk/fidl/fuchsia.hardware.goldfish:fuchsia.hardware.goldfish_llcpp",
"//sdk/fidl/fuchsia.logger:fuchsia.logger_llcpp",
- "//sdk/fidl/fuchsia.sysmem",
+ "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_llcpp",
"//zircon/public/lib/zx",
"//zircon/system/ulib/syslog:syslog-static",
"//zircon/system/ulib/trace:trace-with-static-engine",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 80c99c4b..d3442ab9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,15 +2,15 @@
# instead run make from .../device/generic/goldfish-opengl
# which will re-generate this file.
set(GOLDFISH_DEVICE_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
-android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/./Android.mk" "a370ddecca4c7d13811527b2f1f30e2f0ef5153a58edeb36eeb306c41efb9158")
+android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/./Android.mk" "4ef1864208e48039ca8ead2df33a20d5eb6ac512fc456cd2fd701011071c29fe")
add_subdirectory(shared/qemupipe)
add_subdirectory(shared/gralloc_cb)
add_subdirectory(shared/GoldfishAddressSpace)
+add_subdirectory(android-emu)
add_subdirectory(shared/OpenglCodecCommon)
add_subdirectory(system/GLESv1_enc)
add_subdirectory(system/GLESv2_enc)
add_subdirectory(system/renderControl_enc)
-add_subdirectory(android-emu)
add_subdirectory(system/vulkan_enc)
add_subdirectory(system/OpenglSystemCommon)
add_subdirectory(system/GLESv1)
diff --git a/android-emu/CMakeLists.txt b/android-emu/CMakeLists.txt
index cfdf39b0..74d5e466 100644
--- a/android-emu/CMakeLists.txt
+++ b/android-emu/CMakeLists.txt
@@ -5,6 +5,6 @@ android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/android-emu/Android.mk" "bd7f25
set(androidemu_src android/base/AlignedBuf.cpp android/base/files/MemStream.cpp android/base/files/Stream.cpp android/base/files/StreamSerializing.cpp android/base/Pool.cpp android/base/ring_buffer.c android/base/StringFormat.cpp android/base/AndroidSubAllocator.cpp android/base/synchronization/AndroidMessageChannel.cpp android/base/threads/AndroidFunctorThread.cpp android/base/threads/AndroidThreadStore.cpp android/base/threads/AndroidThread_pthread.cpp android/base/threads/AndroidWorkPool.cpp android/base/Tracing.cpp android/utils/debug.c)
android_add_library(TARGET androidemu SHARED LICENSE Apache-2.0 SRC android/base/AlignedBuf.cpp android/base/files/MemStream.cpp android/base/files/Stream.cpp android/base/files/StreamSerializing.cpp android/base/Pool.cpp android/base/ring_buffer.c android/base/StringFormat.cpp android/base/AndroidSubAllocator.cpp android/base/synchronization/AndroidMessageChannel.cpp android/base/threads/AndroidFunctorThread.cpp android/base/threads/AndroidThreadStore.cpp android/base/threads/AndroidThread_pthread.cpp android/base/threads/AndroidWorkPool.cpp android/base/Tracing.cpp android/utils/debug.c)
target_include_directories(androidemu PRIVATE ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(androidemu PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"androidemu\"")
+target_compile_definitions(androidemu PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"androidemu\"")
target_compile_options(androidemu PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-fstrict-aliasing")
-target_link_libraries(androidemu PRIVATE cutils utils log OpenglCodecCommon_host android-emu-shared PRIVATE qemupipe_host) \ No newline at end of file
+target_link_libraries(androidemu PRIVATE cutils utils log android-emu-shared) \ No newline at end of file
diff --git a/android-emu/android/base/Tracing.cpp b/android-emu/android/base/Tracing.cpp
index a4c097ff..59090428 100644
--- a/android-emu/android/base/Tracing.cpp
+++ b/android-emu/android/base/Tracing.cpp
@@ -16,6 +16,8 @@
#if defined(__ANDROID__) || defined(HOST_BUILD)
+#define ATRACE_TAG ATRACE_TAG_GRAPHICS
+
#include <cutils/trace.h>
#define VK_TRACE_TAG ATRACE_TAG_GRAPHICS
diff --git a/android-emu/android/base/containers/EntityManager.h b/android-emu/android/base/containers/EntityManager.h
new file mode 100644
index 00000000..e01496f9
--- /dev/null
+++ b/android-emu/android/base/containers/EntityManager.h
@@ -0,0 +1,585 @@
+// Copyright (C) 2019 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.
+#pragma once
+
+#include "android/base/containers/Lookup.h"
+#include "android/base/Optional.h"
+
+#include <functional>
+#include <unordered_map>
+#include <vector>
+
+#include <inttypes.h>
+#include <stdio.h>
+
+#define ENTITY_MANAGER_DEBUG 0
+
+#if ENTITY_MANAGER_DEBUG
+
+#define EM_DBG(fmt,...) fprintf(stderr, "%s:%d " fmt "\n", __func__, __LINE__, ##__VA_ARGS__);
+
+#else
+#define EM_DBG(...)
+#endif
+
+#define INVALID_ENTITY_HANDLE 0
+#define INVALID_COMPONENT_HANDLE 0
+
+namespace android {
+namespace base {
+
+// EntityManager: A way to represent an abstrat space of objects with handles.
+// Each handle is associated with data of type Item for quick access from handles to data.
+// Otherwise, entity data is spread through ComponentManagers.
+template<size_t indexBits,
+ size_t generationBits,
+ size_t typeBits,
+ class Item>
+class EntityManager {
+public:
+
+ static_assert(indexBits == 64 - generationBits - typeBits,
+ "bits of index, generation, and type must add to 64");
+
+ // https://stackoverflow.com/questions/45225925/create-bitmask-based-on-a-pattern-as-constexpr
+ // There is another answer based on a function that returns constexpr but
+ // it doesn't actually fold to a constant when given a constant argument,
+ // according to godbolt.
+ template<class T, int count> struct bit_repeater;
+ template<class T>
+ struct bit_repeater<T, 1> {
+ static constexpr T value = 0x1;
+ };
+ template<class T, int count>
+ struct bit_repeater {
+ static constexpr T value = (bit_repeater<T, count-1>::value << 1) | 0x1;
+ };
+
+ static constexpr uint64_t indexMaskBase = bit_repeater<uint64_t, indexBits>().value;
+ static constexpr uint64_t generationMaskBase = bit_repeater<uint64_t, generationBits>().value;
+ static constexpr uint64_t typeMaskBase = bit_repeater<uint64_t, typeBits>().value;
+
+ static constexpr uint64_t indexMask = indexMaskBase;
+ static constexpr uint64_t generationMask = generationMaskBase << indexBits;
+ static constexpr uint64_t typeMask = typeMaskBase << (indexBits + generationBits);
+
+ using EntityHandle = uint64_t;
+ using IteratorFunc = std::function<void(bool live, EntityHandle h, Item& item)>;
+ using ConstIteratorFunc = std::function<void(bool live, EntityHandle h, const Item& item)>;
+
+ static size_t getHandleIndex(EntityHandle h) {
+ return static_cast<size_t>(h & indexMask);
+ }
+
+ static size_t getHandleGeneration(EntityHandle h) {
+ return static_cast<size_t>((h & generationMask) >> indexBits);
+ }
+
+ static size_t getHandleType(EntityHandle h) {
+ return static_cast<size_t>((h & typeMask) >> (indexBits + generationBits));
+ }
+
+ static EntityHandle makeHandle(
+ size_t index,
+ size_t generation,
+ size_t type) {
+ EntityHandle res = (index & indexMask);
+ res |= (((uint64_t)generation) << indexBits) & generationMask;
+ res |= (((uint64_t)type) << (indexBits + generationBits)) & typeMask;
+ return res;
+ }
+
+ static EntityHandle withIndex(EntityHandle h, size_t i) {
+ return makeHandle(i, getHandleGeneration(h), getHandleType(h));
+ }
+
+ static EntityHandle withGeneration(EntityHandle h, size_t nextGen) {
+ return makeHandle(getHandleIndex(h), nextGen, getHandleType(h));
+ }
+
+ static EntityHandle withType(EntityHandle h, size_t newType) {
+ return makeHandle(getHandleIndex(h), getHandleGeneration(h), newType);
+ }
+
+ EntityManager() : EntityManager(0) { }
+
+ ~EntityManager() { clear(); }
+
+ struct EntityEntry {
+ EntityHandle handle = 0;
+ size_t nextFreeIndex = 0;
+ // 0 is a special generation for brand new entries
+ // that are not used yet
+ size_t liveGeneration = 1;
+ Item item;
+ };
+
+ void clear() {
+ mEntries.clear();
+ mFirstFreeIndex = 0;
+ mLiveEntries = 0;
+ }
+
+ EntityHandle add(const Item& item, size_t type) {
+
+ if (!type) return INVALID_ENTITY_HANDLE;
+
+ uint64_t maxElements = (1ULL << indexBits);
+ if (mLiveEntries == maxElements) return INVALID_ENTITY_HANDLE;
+
+ uint64_t newIndex = mFirstFreeIndex;
+
+ EM_DBG("newIndex/firstFree: %zu type: %zu", newIndex, type);
+
+ uint64_t neededCapacity = newIndex + 1;
+ if (maxElements < neededCapacity) return INVALID_ENTITY_HANDLE;
+
+ uint64_t currentCapacity = mEntries.size();
+ uint64_t nextCapacity = neededCapacity << 1;
+ if (nextCapacity > maxElements) nextCapacity = maxElements;
+
+ EM_DBG("needed/current/next capacity: %zu %zu %zu",
+ neededCapacity,
+ currentCapacity,
+ nextCapacity);
+
+ if (neededCapacity > mEntries.size()) {
+ mEntries.resize((size_t)nextCapacity);
+ for (size_t i = currentCapacity; i < nextCapacity; ++i) {
+ mEntries[i].handle = makeHandle(i, 0, type);
+ mEntries[i].nextFreeIndex = i + 1;
+ EM_DBG("new un-init entry: index %zu nextFree %zu",
+ i, i + 1);
+ }
+ }
+
+ mEntries[newIndex].handle =
+ makeHandle(newIndex, mEntries[newIndex].liveGeneration, type);
+ mEntries[newIndex].item = item;
+
+ mFirstFreeIndex = mEntries[newIndex].nextFreeIndex;
+ EM_DBG("created. new first free: %zu", mFirstFreeIndex);
+
+ ++mLiveEntries;
+
+ EM_DBG("result handle: 0x%llx", (unsigned long long)mEntries[newIndex].handle);
+
+ return mEntries[newIndex].handle;
+ }
+
+ EntityHandle addFixed(EntityHandle fixedHandle, const Item& item, size_t type) {
+ // 3 cases:
+ // 1. handle is not allocated and doesn't correspond to mFirstFreeIndex
+ bool isFreeListNonHead = false;
+ // 2. handle already exists (replace)
+ bool isAlloced = false;
+ // 3. index(handle) == mFirstFreeIndex
+ bool isFreeListHead = false;
+
+ if (!type) return INVALID_ENTITY_HANDLE;
+
+ uint64_t maxElements = (1ULL << indexBits);
+ if (mLiveEntries == maxElements) return INVALID_ENTITY_HANDLE;
+
+ uint64_t newIndex = getHandleIndex(fixedHandle);
+
+ EM_DBG("newIndex/firstFree: %zu type: %zu", newIndex, type);
+
+ uint64_t neededCapacity = newIndex + 1;
+
+ if (maxElements < neededCapacity) return INVALID_ENTITY_HANDLE;
+
+ uint64_t currentCapacity = mEntries.size();
+ uint64_t nextCapacity = neededCapacity << 1;
+ if (nextCapacity > maxElements) nextCapacity = maxElements;
+
+ EM_DBG("needed/current/next capacity: %zu %zu %zu",
+ neededCapacity,
+ currentCapacity,
+ nextCapacity);
+
+ if (neededCapacity > mEntries.size()) {
+ mEntries.resize((size_t)nextCapacity);
+ for (size_t i = currentCapacity; i < nextCapacity; ++i) {
+ mEntries[i].handle = makeHandle(i, 0, type);
+ mEntries[i].nextFreeIndex = i + 1;
+ EM_DBG("new un-init entry: index %zu nextFree %zu",
+ i, i + 1);
+ }
+ }
+
+ // Now we ensured that there is enough space to talk about the entry of
+ // this |fixedHandle|.
+ if (mFirstFreeIndex == newIndex) {
+ isFreeListHead = true;
+ } else {
+ auto& entry = mEntries[newIndex];
+ if (entry.liveGeneration == getHandleGeneration(entry.handle)) {
+ isAlloced = true;
+ } else {
+ isFreeListNonHead = true;
+ }
+ }
+
+ mEntries[newIndex].handle = fixedHandle;
+ mEntries[newIndex].liveGeneration = getHandleGeneration(fixedHandle);
+ mEntries[newIndex].item = item;
+
+ EM_DBG("new index: %zu", newIndex);
+
+ if (isFreeListHead) {
+
+ EM_DBG("first free index reset from %zu to %zu",
+ mFirstFreeIndex, mEntries[newIndex].nextFreeIndex);
+
+ mFirstFreeIndex = mEntries[newIndex].nextFreeIndex;
+
+ ++mLiveEntries;
+
+ } else if (isAlloced) {
+ // Already replaced whatever is there, and since it's already allocated,
+ // no need to update freelist.
+ EM_DBG("entry at %zu already alloced. replacing.", newIndex);
+ } else if (isFreeListNonHead) {
+ // Go through the freelist and skip over the entry we just added.
+ uint64_t prevEntryIndex = mFirstFreeIndex;
+
+ EM_DBG("in free list but not head. reorganizing freelist. "
+ "start at %zu -> %zu",
+ mFirstFreeIndex, mEntries[prevEntryIndex].nextFreeIndex);
+
+ while (mEntries[prevEntryIndex].nextFreeIndex != newIndex) {
+ EM_DBG("next: %zu -> %zu",
+ prevEntryIndex,
+ mEntries[prevEntryIndex].nextFreeIndex);
+ prevEntryIndex =
+ mEntries[prevEntryIndex].nextFreeIndex;
+ }
+
+ EM_DBG("finished. set prev entry %zu to new entry's next, %zu",
+ prevEntryIndex, mEntries[newIndex].nextFreeIndex);
+
+ mEntries[prevEntryIndex].nextFreeIndex =
+ mEntries[newIndex].nextFreeIndex;
+
+ ++mLiveEntries;
+ }
+
+ return fixedHandle;
+ }
+ void remove(EntityHandle h) {
+
+ if (get(h) == nullptr) return;
+
+ uint64_t index = getHandleIndex(h);
+
+ EM_DBG("remove handle: 0x%llx -> index %zu", (unsigned long long)h, index);
+
+ auto& entry = mEntries[index];
+
+ EM_DBG("handle gen: %zu entry gen: %zu", getHandleGeneration(h), entry.liveGeneration);
+
+ ++entry.liveGeneration;
+ if ((entry.liveGeneration == 0) ||
+ (entry.liveGeneration == (1ULL << generationBits))) {
+ entry.liveGeneration = 1;
+ }
+
+ entry.nextFreeIndex = mFirstFreeIndex;
+
+ mFirstFreeIndex = index;
+
+ EM_DBG("new first free: %zu next free: %zu", mFirstFreeIndex, entry.nextFreeIndex);
+
+ --mLiveEntries;
+ }
+
+ Item* get(EntityHandle h) {
+ uint64_t index = getHandleIndex(h);
+ if (index >= mEntries.size()) return nullptr;
+
+ auto& entry = mEntries[index];
+ if (entry.liveGeneration != getHandleGeneration(h)) return nullptr;
+
+ return &entry.item;
+ }
+
+ bool isLive(EntityHandle h) const {
+ uint64_t index = getHandleIndex(h);
+ if (index >= mEntries.size()) return false;
+
+ const auto& entry = mEntries[index];
+
+ return (entry.liveGeneration == getHandleGeneration(h));
+ }
+
+ void forEachEntry(IteratorFunc func) {
+ for (auto& entry: mEntries) {
+ auto handle = entry.handle;
+ bool live = isLive(handle);
+ auto& item = entry.item;
+ func(live, handle, item);
+ }
+ }
+
+ void forEachLiveEntry(IteratorFunc func) {
+ for (auto& entry: mEntries) {
+ auto handle = entry.handle;
+ bool live = isLive(handle);
+
+ if (!live) continue;
+
+ auto& item = entry.item;
+ func(live, handle, item);
+ }
+ }
+
+ void forEachLiveEntry_const(ConstIteratorFunc func) const {
+ for (auto& entry: mEntries) {
+ auto handle = entry.handle;
+ bool live = isLive(handle);
+
+ if (!live) continue;
+
+ const auto& item = entry.item;
+ func(live, handle, item);
+ }
+ }
+
+private:
+ EntityManager(size_t initialItems) :
+ mEntries(initialItems),
+ mFirstFreeIndex(0),
+ mLiveEntries(0) { }
+
+ std::vector<EntityEntry> mEntries;
+ uint64_t mFirstFreeIndex;
+ uint64_t mLiveEntries;
+};
+
+// Tracks components over a given space of entities.
+// Looking up by entity index is slower, but takes less space overall versus
+// a flat array that parallels the entities.
+template<size_t indexBits,
+ size_t generationBits,
+ size_t typeBits,
+ class Data>
+class ComponentManager {
+public:
+
+ static_assert(64 == (indexBits + generationBits + typeBits),
+ "bits of index, generation, and type must add to 64");
+
+ using ComponentHandle = uint64_t;
+ using EntityHandle = uint64_t;
+ using ComponentIteratorFunc = std::function<void(bool, ComponentHandle componentHandle, EntityHandle entityHandle, Data& data)>;
+ using ConstComponentIteratorFunc = std::function<void(bool, ComponentHandle componentHandle, EntityHandle entityHandle, const Data& data)>;
+
+ // Adds the given |data| and associates it with EntityHandle.
+ // We can also opt-in to immediately tracking the handle in the reverse mapping,
+ // which has an upfront cost in runtime.
+ // Many uses of ComponentManager don't really need to track the associated entity handle,
+ // so it is opt-in.
+
+ ComponentHandle add(
+ EntityHandle h,
+ const Data& data,
+ size_t type,
+ bool tracked = false) {
+
+ InternalItem item = { h, data, tracked };
+ auto res = static_cast<ComponentHandle>(mData.add(item, type));
+
+ if (tracked) {
+ mEntityToComponentMap[h] = res;
+ }
+
+ return res;
+ }
+
+ void clear() {
+ mData.clear();
+ mEntityToComponentMap.clear();
+ }
+
+ // If we didn't explicitly track, just fail.
+ ComponentHandle getComponentHandle(EntityHandle h) const {
+ auto componentHandlePtr = android::base::find(mEntityToComponentMap, h);
+ if (!componentHandlePtr) return INVALID_COMPONENT_HANDLE;
+ return *componentHandlePtr;
+ }
+
+ EntityHandle getEntityHandle(ComponentHandle h) const {
+ return mData.get(h)->entityHandle;
+ }
+
+ void removeByEntity(EntityHandle h) {
+ auto componentHandle = getComponentHandle(h);
+ removeByComponent(componentHandle);
+ }
+
+ void removeByComponent(ComponentHandle h) {
+ auto item = mData.get(h);
+
+ if (!item) return;
+ if (item->tracked) {
+ mEntityToComponentMap.erase(item->entityHandle);
+ }
+
+ mData.remove(h);
+ }
+
+ Data* getByEntity(EntityHandle h) {
+ return getByComponent(getComponentHandle(h));
+ }
+
+ Data* getByComponent(ComponentHandle h) {
+ auto item = mData.get(h);
+ if (!item) return nullptr;
+ return &(item->data);
+ }
+
+ void forEachComponent(ComponentIteratorFunc func) {
+ mData.forEachEntry(
+ [func](bool live, typename InternalEntityManager::EntityHandle componentHandle, InternalItem& item) {
+ func(live, componentHandle, item.entityHandle, item.data);
+ });
+ }
+
+ void forEachLiveComponent(ComponentIteratorFunc func) {
+ mData.forEachLiveEntry(
+ [func](bool live, typename InternalEntityManager::EntityHandle componentHandle, InternalItem& item) {
+ func(live, componentHandle, item.entityHandle, item.data);
+ });
+ }
+
+ void forEachLiveComponent_const(ConstComponentIteratorFunc func) const {
+ mData.forEachLiveEntry_const(
+ [func](bool live, typename InternalEntityManager::EntityHandle componentHandle, const InternalItem& item) {
+ func(live, componentHandle, item.entityHandle, item.data);
+ });
+ }
+
+private:
+ struct InternalItem {
+ EntityHandle entityHandle;
+ Data data;
+ bool tracked;
+ };
+
+ using InternalEntityManager = EntityManager<indexBits, generationBits, typeBits, InternalItem>;
+ using EntityToComponentMap = std::unordered_map<EntityHandle, ComponentHandle>;
+
+ mutable InternalEntityManager mData;
+ EntityToComponentMap mEntityToComponentMap;
+};
+
+// ComponentManager, but unpacked; uses the same index space as the associated
+// entities. Takes more space by default, but not more if all entities have this component.
+template<size_t indexBits,
+ size_t generationBits,
+ size_t typeBits,
+ class Data>
+class UnpackedComponentManager {
+public:
+ using ComponentHandle = uint64_t;
+ using EntityHandle = uint64_t;
+ using ComponentIteratorFunc =
+ std::function<void(bool, ComponentHandle componentHandle, EntityHandle entityHandle, Data& data)>;
+ using ConstComponentIteratorFunc =
+ std::function<void(bool, ComponentHandle componentHandle, EntityHandle entityHandle, const Data& data)>;
+
+ EntityHandle add(EntityHandle h, const Data& data) {
+
+ size_t index = indexOfEntity(h);
+
+ if (index + 1 > mItems.size()) {
+ mItems.resize((index + 1) * 2);
+ }
+
+ mItems[index].live = true;
+ mItems[index].handle = h;
+ mItems[index].data = data;
+
+ return h;
+ }
+
+ void clear() {
+ mItems.clear();
+ }
+
+ void remove(EntityHandle h) {
+ size_t index = indexOfEntity(h);
+ if (index >= mItems.size()) return;
+ mItems[index].live = false;
+ }
+
+ Data* get(EntityHandle h) {
+ size_t index = indexOfEntity(h);
+
+ if (index + 1 > mItems.size()) {
+ mItems.resize((index + 1) * 2);
+ }
+
+ auto item = mItems.data() + index;
+ if (!item->live) return nullptr;
+ return &item->data;
+ }
+
+ const Data* get_const(EntityHandle h) const {
+ size_t index = indexOfEntity(h);
+
+ if (index + 1 > mItems.size()) {
+ return nullptr;
+ }
+
+ auto item = mItems.data() + index;
+ if (!item->live) return nullptr;
+ return &item->data;
+ }
+
+ void forEachComponent(ComponentIteratorFunc func) {
+ for (auto& item : mItems) {
+ func(item.live, item.handle, item.handle, item.data);
+ }
+ }
+
+ void forEachLiveComponent(ComponentIteratorFunc func) {
+ for (auto& item : mItems) {
+ if (item.live) func(item.live, item.handle, item.handle, item.data);
+ }
+ }
+
+ void forEachLiveComponent_const(ConstComponentIteratorFunc func) const {
+ for (auto& item : mItems) {
+ if (item.live) func(item.live, item.handle, item.handle, item.data);
+ }
+ }
+
+private:
+ static size_t indexOfEntity(EntityHandle h) {
+ return EntityManager<indexBits, generationBits, typeBits, int>::getHandleIndex(h);
+ }
+
+ struct InternalItem {
+ bool live = false;
+ EntityHandle handle = 0;
+ Data data;
+ };
+
+ std::vector<InternalItem> mItems;
+};
+
+} // namespace android
+} // namespace base
diff --git a/android-emu/android/base/containers/HybridComponentManager.h b/android-emu/android/base/containers/HybridComponentManager.h
new file mode 100644
index 00000000..02c62249
--- /dev/null
+++ b/android-emu/android/base/containers/HybridComponentManager.h
@@ -0,0 +1,132 @@
+// 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.
+#pragma once
+
+#include "android/base/containers/Lookup.h"
+#include "android/base/containers/EntityManager.h"
+
+#include <unordered_map>
+
+namespace android {
+namespace base {
+
+template <size_t maxIndex,
+ class IndexType, // must be castable to uint64_t
+ class Data>
+class HybridComponentManager {
+public:
+ using UCM = UnpackedComponentManager<32, 16, 16, Data>;
+ using EM = EntityManager<32, 16, 16, Data>;
+ using IterFunc = typename UCM::ComponentIteratorFunc;
+ using ConstIterFunc = typename UCM::ConstComponentIteratorFunc;
+ using Handle = typename EM::EntityHandle;
+
+ void add(IndexType index, const Data& data) {
+ uint64_t index_u64 = (uint64_t)index;
+ if (index_u64 < maxIndex) {
+ auto internal_handle = index2Handle(index_u64);
+ mComponentManager.add(internal_handle, data);
+ } else {
+ mMap[index] = data;
+ }
+
+ }
+
+ void clear() {
+ mComponentManager.clear();
+ mMap.clear();
+ }
+
+ void remove(IndexType index) {
+ uint64_t index_u64 = (uint64_t)index;
+ if (index_u64 < maxIndex) {
+ auto internal_handle = index2Handle(index_u64);
+ mComponentManager.remove(internal_handle);
+ } else {
+ mMap.erase(index);
+ }
+ }
+
+ Data* get(IndexType index) {
+ uint64_t index_u64 = (uint64_t)index;
+ if (index_u64 < maxIndex) {
+ auto internal_handle = index2Handle(index_u64);
+ return mComponentManager.get(internal_handle);
+ } else {
+ return android::base::find(mMap, index);
+ }
+ }
+
+ const Data* get_const(IndexType index) const {
+ uint64_t index_u64 = (uint64_t)index;
+ if (index_u64 < maxIndex) {
+ auto internal_handle = index2Handle(index_u64);
+ return mComponentManager.get_const(internal_handle);
+ } else {
+ return android::base::find(mMap, index);
+ }
+ }
+
+ Data* getExceptZero(IndexType index) {
+ Data* res = get(index);
+ if (!res) return nullptr;
+ if (!(*res)) return nullptr;
+ return res;
+ }
+
+ const Data* getExceptZero_const(IndexType index) const {
+ const Data* res = get_const(index);
+ if (!res) return nullptr;
+ if (!(*res)) return nullptr;
+ return res;
+ }
+
+ void forEach(IterFunc func) {
+ mComponentManager.forEach(func);
+
+ for (auto it : mMap) {
+ auto handle = index2Handle(it.first);
+ func(true /* live */, handle, handle, it.second);
+ }
+ }
+
+ void forEachLive(IterFunc func) {
+ mComponentManager.forEachLiveComponent(func);
+
+ for (auto it : mMap) {
+ auto handle = index2Handle(it.first);
+ func(true /* live */, handle, handle, it.second);
+ }
+ }
+
+ void forEachLive_const(ConstIterFunc func) const {
+ mComponentManager.forEachLiveComponent_const(func);
+
+ for (const auto it : mMap) {
+ auto handle = index2Handle(it.first);
+ func(true /* live */, handle, handle, it.second);
+ }
+ }
+
+private:
+ static Handle index2Handle(uint64_t index) {
+ return EM::makeHandle((uint32_t)index, 1, 1);
+ }
+
+ UCM mComponentManager;
+ std::unordered_map<IndexType, Data> mMap;
+};
+
+} // namespace android
+} // namespace base
diff --git a/android-emu/android/base/containers/Lookup.h b/android-emu/android/base/containers/Lookup.h
new file mode 100644
index 00000000..80432863
--- /dev/null
+++ b/android-emu/android/base/containers/Lookup.h
@@ -0,0 +1,168 @@
+// Copyright 2016 The Android Open Source Project
+//
+// This software is licensed under the terms of the GNU General Public
+// License version 2, as published by the Free Software Foundation, and
+// may be copied, distributed, and modified under those terms.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+#pragma once
+
+#include "android/base/TypeTraits.h"
+
+#include <initializer_list>
+#include <set>
+#include <map>
+#include <unordered_map>
+#include <unordered_set>
+#include <utility>
+
+// A set of convenience functions for map and set lookups. They allow a simpler
+// syntax, e.g.
+// if (auto val = find(map, "key")) {
+// <process the value>
+// }
+// ... or
+// auto value = find(funcThatReturnsMap(), "other_key");
+// if (!value) ...
+//
+// Note: these don't work for multimaps, as there's no single value
+// to return (and, more importantly, as those are completely useless).
+
+namespace android {
+namespace base {
+
+// Helper predicates that check if the template argument is a map / set /
+// a mutlikey collection of any kind.
+// These are used as a constraints for the lookup functions to get better error
+// messages if the arguments don't support the map interface.
+template <class T>
+using is_any_map = std::integral_constant<
+ bool,
+ is_template_instantiation_of<T, std::map>::value ||
+ is_template_instantiation_of<T, std::unordered_map>::value>;
+
+template <class T>
+using is_any_set = std::integral_constant<
+ bool,
+ is_template_instantiation_of<T, std::set>::value ||
+ is_template_instantiation_of<T, std::unordered_set>::value>;
+
+template <class T>
+using is_any_multikey = std::integral_constant<
+ bool,
+ is_template_instantiation_of<T, std::multimap>::value ||
+ is_template_instantiation_of<T, std::unordered_multimap>::value ||
+ is_template_instantiation_of<T, std::multiset>::value ||
+ is_template_instantiation_of<T, std::unordered_multiset>::value>;
+
+template <class T, class = enable_if<is_any_map<T>>>
+const typename T::mapped_type* find(const T& map,
+ const typename T::key_type& key) {
+ const auto it = map.find(key);
+ if (it == map.end()) {
+ return nullptr;
+ }
+
+ return &it->second;
+}
+
+// Version that returns a modifiable value.
+template <class T, class = enable_if<is_any_map<T>>>
+typename T::mapped_type* find(T& map, const typename T::key_type& key) {
+ auto it = map.find(key);
+ if (it == map.end()) {
+ return nullptr;
+ }
+
+ return &it->second;
+}
+
+// Version with a default, returns a _copy_ because of the possible fallback
+// to a default - it might be destroyed after the call.
+template <class T,
+ class U = typename T::mapped_type,
+ class = enable_if_c<
+ is_any_map<T>::value &&
+ std::is_convertible<U, typename T::mapped_type>::value>>
+typename T::mapped_type findOrDefault(const T& map,
+ const typename T::key_type& key,
+ U&& defaultVal = {}) {
+ if (auto valPtr = find(map, key)) {
+ return *valPtr;
+ }
+ return defaultVal;
+}
+
+// Version that finds the first of the values passed in |keys| in the order they
+// are passed. E.g., the following code finds '2' as the first value in |keys|:
+// set<int> s = {1, 2, 3};
+// auto val = findFirstOf(s, {2, 1});
+// EXPECT_EQ(2, *val);
+template <class T, class = enable_if<is_any_map<T>>>
+const typename T::mapped_type* findFirstOf(
+ const T& map,
+ std::initializer_list<typename T::key_type> keys) {
+ for (const auto& key : keys) {
+ if (const auto valPtr = find(map, key)) {
+ return valPtr;
+ }
+ }
+ return nullptr;
+}
+
+template <class T, class = enable_if<is_any_map<T>>>
+typename T::mapped_type* findFirstOf(
+ T& map,
+ std::initializer_list<typename T::key_type> keys) {
+ for (const auto& key : keys) {
+ if (const auto valPtr = find(map, key)) {
+ return valPtr;
+ }
+ }
+ return nullptr;
+}
+
+// Version that finds first of the passed |key| values or returns the
+// |defaultVal| if none were found.
+template <class T,
+ class U,
+ class = enable_if_c<
+ is_any_map<T>::value &&
+ std::is_convertible<U, typename T::mapped_type>::value>>
+typename T::mapped_type findFirstOfOrDefault(
+ const T& map,
+ std::initializer_list<typename T::key_type> keys,
+ U&& defaultVal) {
+ if (const auto valPtr = findFirstOf(map, keys)) {
+ return *valPtr;
+ }
+ return std::forward<U>(defaultVal);
+}
+
+template <class T,
+ class = enable_if_c<is_any_map<T>::value || is_any_set<T>::value ||
+ is_any_multikey<T>::value>>
+bool contains(const T& c, const typename T::key_type& key) {
+ const auto it = c.find(key);
+ return it != c.end();
+}
+
+template <class T,
+ class = enable_if_c<is_any_map<T>::value || is_any_set<T>::value ||
+ is_any_multikey<T>::value>>
+bool containsAnyOf(const T& c,
+ std::initializer_list<typename T::key_type> keys) {
+ for (const auto& key : keys) {
+ if (contains(c, key)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+} // namespace base
+} // namespace android
diff --git a/host/include/libOpenglRender/IOStream.h b/host/include/libOpenglRender/IOStream.h
index 9173d317..c7cc0ea9 100644
--- a/host/include/libOpenglRender/IOStream.h
+++ b/host/include/libOpenglRender/IOStream.h
@@ -17,6 +17,7 @@
#define __IO_STREAM_H__
#include <stdlib.h>
+#include <stdint.h>
#include <stdio.h>
#include "ErrorLog.h"
@@ -28,6 +29,19 @@ public:
m_iostreamBuf = NULL;
m_bufsize = bufSize;
m_free = 0;
+ m_refcount = 1;
+ }
+
+ void incRef() {
+ __atomic_add_fetch(&m_refcount, 1, __ATOMIC_SEQ_CST);
+ }
+
+ bool decRef() {
+ if (0 == __atomic_sub_fetch(&m_refcount, 1, __ATOMIC_SEQ_CST)) {
+ delete this;
+ return true;
+ }
+ return false;
}
virtual size_t idealAllocSize(size_t len) {
@@ -104,6 +118,7 @@ private:
unsigned char *m_iostreamBuf;
size_t m_bufsize;
size_t m_free;
+ uint32_t m_refcount;
};
//
diff --git a/shared/GoldfishAddressSpace/CMakeLists.txt b/shared/GoldfishAddressSpace/CMakeLists.txt
index c89a4365..b14bdfed 100644
--- a/shared/GoldfishAddressSpace/CMakeLists.txt
+++ b/shared/GoldfishAddressSpace/CMakeLists.txt
@@ -5,6 +5,6 @@ android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/And
set(GoldfishAddressSpace_host_src goldfish_address_space.cpp)
android_add_library(TARGET GoldfishAddressSpace_host LICENSE Apache-2.0 SRC goldfish_address_space.cpp)
target_include_directories(GoldfishAddressSpace_host PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(GoldfishAddressSpace_host PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"goldfish-address-space\"")
+target_compile_definitions(GoldfishAddressSpace_host PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"goldfish-address-space\"")
target_compile_options(GoldfishAddressSpace_host PRIVATE "-fvisibility=default" "-Wno-unused-parameter")
target_link_libraries(GoldfishAddressSpace_host PRIVATE log android-emu-shared) \ No newline at end of file
diff --git a/shared/GoldfishAddressSpace/include/goldfish_address_space.h b/shared/GoldfishAddressSpace/include/goldfish_address_space.h
index ad5e3cb9..1d2e14b4 100644
--- a/shared/GoldfishAddressSpace/include/goldfish_address_space.h
+++ b/shared/GoldfishAddressSpace/include/goldfish_address_space.h
@@ -19,7 +19,7 @@
#include <stddef.h>
#ifdef __Fuchsia__
-#include <fuchsia/hardware/goldfish/cpp/fidl.h>
+#include <fuchsia/hardware/goldfish/llcpp/fidl.h>
#endif
class GoldfishAddressSpaceBlock;
@@ -67,8 +67,12 @@ private:
static void closeHandle(address_space_handle_t handle);
#ifdef __Fuchsia__
- fuchsia::hardware::goldfish::AddressSpaceDeviceSyncPtr m_device;
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr m_child_driver;
+ std::unique_ptr<
+ llcpp::fuchsia::hardware::goldfish::AddressSpaceDevice::SyncClient>
+ m_device;
+ std::unique_ptr<
+ llcpp::fuchsia::hardware::goldfish::AddressSpaceChildDriver::SyncClient>
+ m_child_driver;
#else // __Fuchsia__
address_space_handle_t m_handle;
#endif // !__Fuchsia__
@@ -100,7 +104,8 @@ private:
GoldfishAddressSpaceBlock &operator=(const GoldfishAddressSpaceBlock &);
#ifdef __Fuchsia__
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr* m_driver;
+ llcpp::fuchsia::hardware::goldfish::AddressSpaceChildDriver::SyncClient*
+ m_driver;
uint32_t m_vmo;
#else // __Fuchsia__
address_space_handle_t m_handle;
diff --git a/shared/GoldfishAddressSpace/include/goldfish_address_space_android.impl b/shared/GoldfishAddressSpace/include/goldfish_address_space_android.impl
index a8a70af3..e6f7539a 100644
--- a/shared/GoldfishAddressSpace/include/goldfish_address_space_android.impl
+++ b/shared/GoldfishAddressSpace/include/goldfish_address_space_android.impl
@@ -619,9 +619,9 @@ bool virtgpu_address_space_create_context_with_subdevice(
return false;
}
- drm_virtgpu_map map = {
- .handle = create.bo_handle,
- };
+ drm_virtgpu_map map;
+ memset(&map, 0, sizeof(map));
+ map.handle = create.bo_handle;
ret = drmIoctl(fd, DRM_IOCTL_VIRTGPU_MAP, &map);
if (ret) {
@@ -694,18 +694,18 @@ bool virtgpu_address_space_allocate_hostmem(
abort();
}
- struct drm_virtgpu_map map_info = {
- .handle = drm_rc_blob.bo_handle,
- };
+ drm_virtgpu_map map;
+ memset(&map, 0, sizeof(map));
+ map.handle = drm_rc_blob.bo_handle;
- res = drmIoctl(fd, DRM_IOCTL_VIRTGPU_MAP, &map_info);
+ res = drmIoctl(fd, DRM_IOCTL_VIRTGPU_MAP, &map);
if (res) {
ALOGE("%s: Failed to virtgpu map: sterror: %s errno: %d\n", __func__,
strerror(errno), errno);
abort();
}
- void* directMappedAddr = mmap64(0, size, PROT_WRITE, MAP_SHARED, fd, map_info.offset);
+ void* directMappedAddr = mmap64(0, size, PROT_WRITE, MAP_SHARED, fd, map.offset);
if (!directMappedAddr) {
ALOGE("%s: mmap of virtio gpu resource failed\n", __func__);
diff --git a/shared/GoldfishAddressSpace/include/goldfish_address_space_fuchsia.impl b/shared/GoldfishAddressSpace/include/goldfish_address_space_fuchsia.impl
index 9c4f3faf..d4843479 100644
--- a/shared/GoldfishAddressSpace/include/goldfish_address_space_fuchsia.impl
+++ b/shared/GoldfishAddressSpace/include/goldfish_address_space_fuchsia.impl
@@ -32,13 +32,16 @@
#include <unordered_map>
+#define GET_STATUS_SAFE(result, member) \
+ ((result).ok() ? ((result).Unwrap()->member) : ZX_OK)
+
using android::base::guest::AutoLock;
using android::base::guest::Lock;
-using fuchsia::hardware::goldfish::AddressSpaceDeviceSyncPtr;
-using fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr;
-using fuchsia::hardware::goldfish::AddressSpaceChildDriverType;
-using fuchsia::hardware::goldfish::AddressSpaceChildDriverPingMessage;
+using llcpp::fuchsia::hardware::goldfish::AddressSpaceChildDriver;
+using llcpp::fuchsia::hardware::goldfish::AddressSpaceDevice;
+using llcpp::fuchsia::hardware::goldfish::AddressSpaceChildDriverType;
+using llcpp::fuchsia::hardware::goldfish::AddressSpaceChildDriverPingMessage;
GoldfishAddressSpaceBlockProvider::GoldfishAddressSpaceBlockProvider(GoldfishAddressSpaceSubdeviceType subdevice) {
@@ -53,17 +56,24 @@ GoldfishAddressSpaceBlockProvider::GoldfishAddressSpaceBlockProvider(GoldfishAdd
__FUNCTION__);
return;
}
- m_device.Bind(std::move(channel));
-
- zx_status_t status = (*m_device).OpenChildDriver(
- static_cast<fuchsia::hardware::goldfish::AddressSpaceChildDriverType>(0 /* graphics */),
- m_child_driver.NewRequest());
+ m_device = std::make_unique<AddressSpaceDevice::SyncClient>(std::move(channel));
+ zx::channel child_driver_server, child_driver_client;
+ zx_status_t status = zx::channel::create(0, &child_driver_server, &child_driver_client);
if (status != ZX_OK) {
+ ALOGE("%s: zx_channel_create failed: %d", __FUNCTION__, status);
+ return;
+ }
+
+ auto result = m_device->OpenChildDriver(
+ static_cast<AddressSpaceChildDriverType>(0 /* graphics */),
+ std::move(child_driver_server));
+ if (!result.ok()) {
ALOGE("%s: failed to open child driver: %d",
- __FUNCTION__, status);
+ __FUNCTION__, result.status());
return;
}
+ m_child_driver = std::make_unique<AddressSpaceChildDriver::SyncClient>(std::move(child_driver_client));
}
GoldfishAddressSpaceBlockProvider::~GoldfishAddressSpaceBlockProvider()
@@ -72,7 +82,7 @@ GoldfishAddressSpaceBlockProvider::~GoldfishAddressSpaceBlockProvider()
bool GoldfishAddressSpaceBlockProvider::is_opened() const
{
- return m_device.is_bound();
+ return !!m_device;
}
// void GoldfishAddressSpaceBlockProvider::close() - not implemented
@@ -116,18 +126,17 @@ bool GoldfishAddressSpaceBlock::allocate(GoldfishAddressSpaceBlockProvider *prov
return false;
}
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr* driver = &provider->m_child_driver;
+ AddressSpaceChildDriver::SyncClient* driver = provider->m_child_driver.get();
- int32_t res = ZX_OK;
- zx::vmo vmo;
- zx_status_t status = (*driver)->AllocateBlock(size, &res, &m_phys_addr, &vmo);
- if (status != ZX_OK || res != ZX_OK) {
- ALOGE("%s: allocate block failed: %d:%d", __func__, status, res);
+ auto result = driver->AllocateBlock(size);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("%s: allocate block failed: %d:%d", __func__, result.status(), GET_STATUS_SAFE(result, res));
return false;
}
+ m_phys_addr = result.Unwrap()->paddr;
+ m_vmo = result.Unwrap()->vmo.release();
m_size = size;
- m_vmo = vmo.release();
m_offset = 0;
m_is_shared_mapping = false;
@@ -180,11 +189,11 @@ void *GoldfishAddressSpaceBlock::mmap(uint64_t host_addr)
(unsigned long long)m_size,
(unsigned long long)m_offset, status);
return NULL;
- } else {
- m_mmaped_ptr = (void*)ptr;
- m_host_addr = host_addr;
- return guestPtr();
}
+
+ m_mmaped_ptr = (void*)ptr;
+ m_host_addr = host_addr;
+ return guestPtr();
}
void *GoldfishAddressSpaceBlock::guestPtr() const
@@ -209,15 +218,16 @@ void GoldfishAddressSpaceBlock::destroy()
ALOGE("%s: unsupported: GoldfishAddressSpaceBlock destroy() for shared regions\n", __func__);
abort();
// int32_t res = ZX_OK;
- // zx_status_t status = (*m_driver)->UnclaimShared(m_offset, &res);
- // if (status != ZX_OK || res != ZX_OK) {
- // ALOGE("%s: unclaim shared block failed: %d:%d", __func__, status, res);
+ // auto result = m_driver->UnclaimShared(m_offset);
+ // if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ // ALOGE("%s: unclaim shared block failed: %d:%d", __func__,
+ // result.status(), GET_STATUS_SAFE(result, res));
// }
} else {
- int32_t res = ZX_OK;
- zx_status_t status = (*m_driver)->DeallocateBlock(m_phys_addr, &res);
- if (status != ZX_OK || res != ZX_OK) {
- ALOGE("%s: deallocate block failed: %d:%d", __func__, status, res);
+ auto result = m_driver->DeallocateBlock(m_phys_addr);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("%s: deallocate block failed: %d:%d", __func__,
+ result.status(), GET_STATUS_SAFE(result, res));
}
}
m_driver = NULL;
@@ -291,16 +301,15 @@ address_space_handle_t goldfish_address_space_open() {
__FUNCTION__);
return 0;
}
- fuchsia::hardware::goldfish::AddressSpaceDeviceSyncPtr*
- deviceSync = new fuchsia::hardware::goldfish::AddressSpaceDeviceSyncPtr;
- deviceSync->Bind(std::move(channel));
+ AddressSpaceDevice::SyncClient*
+ deviceSync = new AddressSpaceDevice::SyncClient(std::move(channel));
return (address_space_handle_t)deviceSync;
}
void goldfish_address_space_close(address_space_handle_t handle) {
- fuchsia::hardware::goldfish::AddressSpaceDeviceSyncPtr* deviceSync =
+ AddressSpaceDevice::SyncClient* deviceSync =
reinterpret_cast<
- fuchsia::hardware::goldfish::AddressSpaceDeviceSyncPtr*>(handle);
+ AddressSpaceDevice::SyncClient*>(handle);
delete deviceSync;
}
@@ -308,16 +317,23 @@ bool goldfish_address_space_set_subdevice_type(
address_space_handle_t handle, GoldfishAddressSpaceSubdeviceType type,
address_space_handle_t* handle_out) {
- fuchsia::hardware::goldfish::AddressSpaceDeviceSyncPtr* deviceSync =
+ AddressSpaceDevice::SyncClient* deviceSync =
reinterpret_cast<
- fuchsia::hardware::goldfish::AddressSpaceDeviceSyncPtr*>(handle);
+ AddressSpaceDevice::SyncClient*>(handle);
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr*
- childSync = new fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr;
+ zx::channel child_driver_server, child_driver_client;
+ zx_status_t status = zx::channel::create(0, &child_driver_server, &child_driver_client);
+ if (status != ZX_OK) {
+ ALOGE("%s: zx_channel_create failed: %d", __FUNCTION__, status);
+ return false;
+ }
- zx_status_t res = (*(*deviceSync)).OpenChildDriver(
- static_cast<fuchsia::hardware::goldfish::AddressSpaceChildDriverType>(type),
- (*childSync).NewRequest());
+ deviceSync->OpenChildDriver(
+ static_cast<AddressSpaceChildDriverType>(type),
+ std::move(child_driver_server));
+
+ AddressSpaceChildDriver::SyncClient*
+ childSync = new AddressSpaceChildDriver::SyncClient(std::move(child_driver_client));
// On creating a subdevice, in our use cases we wont be needing the
// original device sync anymore, so get rid of it.
@@ -331,17 +347,18 @@ bool goldfish_address_space_set_subdevice_type(
bool goldfish_address_space_allocate(
address_space_handle_t handle,
size_t size, uint64_t* phys_addr, uint64_t* offset) {
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr* deviceSync =
+ AddressSpaceChildDriver::SyncClient* deviceSync =
reinterpret_cast<
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr*>(handle);
+ AddressSpaceChildDriver::SyncClient*>(handle);
- int32_t res = ZX_OK;
zx::vmo vmo;
- zx_status_t status = (*(*deviceSync)).AllocateBlock(size, &res, phys_addr, &vmo);
- if (status != ZX_OK || res != ZX_OK) {
- ALOGE("%s: allocate block failed: %d:%d", __func__, status, res);
+ auto result = deviceSync->AllocateBlock(size);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("%s: allocate block failed: %d:%d", __func__, result.status(), GET_STATUS_SAFE(result, res));
return false;
}
+ *phys_addr = result.Unwrap()->paddr;
+ vmo = std::move(result.Unwrap()->vmo);
*offset = 0;
@@ -360,14 +377,13 @@ bool goldfish_address_space_free(
if (info.vmo == ZX_HANDLE_INVALID) return false;
zx_handle_close(info.vmo);
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr* deviceSync =
+ AddressSpaceChildDriver::SyncClient* deviceSync =
reinterpret_cast<
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr*>(handle);
+ AddressSpaceChildDriver::SyncClient*>(handle);
- int32_t res = ZX_OK;
- zx_status_t status = (*(*deviceSync)).DeallocateBlock(info.phys_addr, &res);
- if (status != ZX_OK || res != ZX_OK) {
- ALOGE("%s: deallocate block failed: %d:%d", __func__, status, res);
+ auto result = deviceSync->DeallocateBlock(info.phys_addr);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("%s: deallocate block failed: %d:%d", __func__, result.status(), GET_STATUS_SAFE(result, res));
return false;
}
@@ -377,12 +393,17 @@ bool goldfish_address_space_free(
bool goldfish_address_space_claim_shared(
address_space_handle_t handle, uint64_t offset, uint64_t size) {
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr* deviceSync =
+ AddressSpaceChildDriver::SyncClient* deviceSync =
reinterpret_cast<
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr*>(handle);
+ AddressSpaceChildDriver::SyncClient*>(handle);
+
zx::vmo vmo;
- zx_status_t res;
- zx_status_t status = (*(*deviceSync)).ClaimSharedBlock(offset, size, &res, &vmo);
+ auto result = deviceSync->ClaimSharedBlock(offset, size);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("%s: claim shared failed: %d:%d", __func__, result.status(), GET_STATUS_SAFE(result, res));
+ return false;
+ }
+ vmo = std::move(result.Unwrap()->vmo);
VmoStore::Info info = {
vmo.release(),
@@ -390,21 +411,20 @@ bool goldfish_address_space_claim_shared(
getVmoStore()->add(offset, info);
- if (status != ZX_OK) return false;
-
return true;
}
bool goldfish_address_space_unclaim_shared(
address_space_handle_t handle, uint64_t offset) {
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr* deviceSync =
+ AddressSpaceChildDriver::SyncClient* deviceSync =
reinterpret_cast<
- fuchsia::hardware::goldfish::AddressSpaceChildDriverSyncPtr*>(handle);
- zx::vmo vmo;
- zx_status_t res;
- zx_status_t status = (*(*deviceSync)).UnclaimSharedBlock(offset, &res);
+ AddressSpaceChildDriver::SyncClient*>(handle);
- if (status != ZX_OK) return false;
+ auto result = deviceSync->UnclaimSharedBlock(offset);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("%s: unclaim shared failed: %d:%d", __func__, result.status(), GET_STATUS_SAFE(result, res));
+ return false;
+ }
getVmoStore()->remove(offset);
return true;
@@ -442,17 +462,16 @@ bool goldfish_address_space_ping(
AddressSpaceChildDriverPingMessage fuchsiaPing =
*(AddressSpaceChildDriverPingMessage*)ping;
- AddressSpaceChildDriverSyncPtr* deviceSync =
+ AddressSpaceChildDriver::SyncClient* deviceSync =
reinterpret_cast<
- AddressSpaceChildDriverSyncPtr*>(handle);
+ AddressSpaceChildDriver::SyncClient*>(handle);
AddressSpaceChildDriverPingMessage res;
- zx_status_t pingStatus;
- zx_status_t status = (*(*deviceSync)).Ping(fuchsiaPing, &pingStatus, &res);
-
- if (pingStatus != ZX_OK) {
+ auto result = deviceSync->Ping(fuchsiaPing);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
return false;
}
+ res = std::move(result.Unwrap()->ping);
*ping = *(struct address_space_ping*)(&res);
return true;
diff --git a/shared/OpenglCodecCommon/Android.mk b/shared/OpenglCodecCommon/Android.mk
index d9970d5c..46d3fda4 100644
--- a/shared/OpenglCodecCommon/Android.mk
+++ b/shared/OpenglCodecCommon/Android.mk
@@ -13,6 +13,7 @@ commonSources := \
SocketStream.cpp \
TcpStream.cpp \
auto_goldfish_dma_context.cpp \
+ etc.cpp \
ifeq (true,$(GOLDFISH_OPENGL_BUILD_FOR_HOST))
@@ -40,10 +41,16 @@ LOCAL_SRC_FILES := $(commonSources)
LOCAL_CFLAGS += -DLOG_TAG=\"eglCodecCommon\"
LOCAL_CFLAGS += -Wno-unused-private-field
-$(call emugl-export,SHARED_LIBRARIES,libcutils libutils liblog)
ifeq (true,$(GOLDFISH_OPENGL_BUILD_FOR_HOST))
-$(call emugl-export,SHARED_LIBRARIES,android-emu-shared)
+$(call emugl-import,libandroidemu)
+$(call emugl-export,SHARED_LIBRARIES,libcutils libutils liblog)
+else
+ifeq (true,$(GFXSTREAM))
+$(call emugl-export,SHARED_LIBRARIES,libcutils libutils liblog libandroidemu)
+else
+$(call emugl-export,SHARED_LIBRARIES,libcutils libutils liblog)
+endif
endif
$(call emugl-export,C_INCLUDES,$(LOCAL_PATH))
diff --git a/shared/OpenglCodecCommon/CMakeLists.txt b/shared/OpenglCodecCommon/CMakeLists.txt
index 6a1ac4ac..545525fb 100644
--- a/shared/OpenglCodecCommon/CMakeLists.txt
+++ b/shared/OpenglCodecCommon/CMakeLists.txt
@@ -1,10 +1,10 @@
# This is an autogenerated file! Do not edit!
# instead run make from .../device/generic/goldfish-opengl
# which will re-generate this file.
-android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon/Android.mk" "87f5c2c694647e3a38b4da1b4c653b99cd27d934b60ecd43aff59d3765daabfd")
-set(OpenglCodecCommon_host_src GLClientState.cpp GLESTextureUtils.cpp ChecksumCalculator.cpp GLSharedGroup.cpp glUtils.cpp IndexRangeCache.cpp SocketStream.cpp TcpStream.cpp auto_goldfish_dma_context.cpp goldfish_dma_host.cpp)
-android_add_library(TARGET OpenglCodecCommon_host SHARED LICENSE Apache-2.0 SRC GLClientState.cpp GLESTextureUtils.cpp ChecksumCalculator.cpp GLSharedGroup.cpp glUtils.cpp IndexRangeCache.cpp SocketStream.cpp TcpStream.cpp auto_goldfish_dma_context.cpp goldfish_dma_host.cpp)
-target_include_directories(OpenglCodecCommon_host PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(OpenglCodecCommon_host PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"eglCodecCommon\"")
+android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon/Android.mk" "a9f19fd167bcc8bf102e288cccc0c4a780fa6671ff52f1f94c3b5b26d7482728")
+set(OpenglCodecCommon_host_src GLClientState.cpp GLESTextureUtils.cpp ChecksumCalculator.cpp GLSharedGroup.cpp glUtils.cpp IndexRangeCache.cpp SocketStream.cpp TcpStream.cpp auto_goldfish_dma_context.cpp etc.cpp goldfish_dma_host.cpp)
+android_add_library(TARGET OpenglCodecCommon_host SHARED LICENSE Apache-2.0 SRC GLClientState.cpp GLESTextureUtils.cpp ChecksumCalculator.cpp GLSharedGroup.cpp glUtils.cpp IndexRangeCache.cpp SocketStream.cpp TcpStream.cpp auto_goldfish_dma_context.cpp etc.cpp goldfish_dma_host.cpp)
+target_include_directories(OpenglCodecCommon_host PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
+target_compile_definitions(OpenglCodecCommon_host PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"eglCodecCommon\"")
target_compile_options(OpenglCodecCommon_host PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-unused-private-field")
-target_link_libraries(OpenglCodecCommon_host PRIVATE android-emu-shared cutils utils log PRIVATE qemupipe_host) \ No newline at end of file
+target_link_libraries(OpenglCodecCommon_host PRIVATE cutils utils log androidemu android-emu-shared PRIVATE qemupipe_host) \ No newline at end of file
diff --git a/shared/OpenglCodecCommon/GLClientState.cpp b/shared/OpenglCodecCommon/GLClientState.cpp
index a31f6975..67758316 100644
--- a/shared/OpenglCodecCommon/GLClientState.cpp
+++ b/shared/OpenglCodecCommon/GLClientState.cpp
@@ -32,12 +32,12 @@
#endif
// Don't include these in the .h file, or we get weird compile errors.
+#include <GLES2/gl2ext.h>
#include <GLES3/gl3.h>
#include <GLES3/gl31.h>
void GLClientState::init() {
m_initialized = false;
- m_nLocations = CODEC_MAX_VERTEX_ATTRIBUTES;
m_arrayBuffer = 0;
m_arrayBuffer_lastEncode = 0;
@@ -48,7 +48,6 @@ void GLClientState::init() {
m_vaoAttribBindingHasVboCache = 0;
m_noClientArraysCache = 0;
- m_max_vertex_attrib_bindings = m_nLocations;
addVertexArrayObject(0);
setVertexArrayObject(0);
// init gl constans;
@@ -78,13 +77,9 @@ void GLClientState::init() {
m_drawIndirectBuffer = 0;
m_shaderStorageBuffer = 0;
- m_transformFeedbackActiveUnpaused = false;
-
- // to be modified later when these are queried from host.
- m_max_transform_feedback_separate_attribs = 0;
- m_max_uniform_buffer_bindings = 0;
- m_max_atomic_counter_buffer_bindings = 0;
- m_max_shader_storage_buffer_bindings = 0;
+ m_transformFeedbackActive = false;
+ m_transformFeedbackUnpaused = false;
+ m_transformFeedbackVaryingsCountForLinking = 0;
m_activeTexture = 0;
m_currentProgram = 0;
@@ -108,14 +103,28 @@ void GLClientState::init() {
m_tex.textureRecs = NULL;
mRboState.boundRenderbuffer = 0;
- mRboState.boundRenderbufferIndex = 0;
mFboState.boundDrawFramebuffer = 0;
mFboState.boundReadFramebuffer = 0;
mFboState.drawFboCheckStatus = GL_NONE;
mFboState.readFboCheckStatus = GL_NONE;
- m_maxVertexAttribsDirty = true;
+ m_extensions_set = false;
+
+#ifdef GFXSTREAM
+ // The default transform feedback buffer object
+ // The default sampler object
+ GLuint defaultId = 0;
+ setExistence(ObjectType::TransformFeedback, true, 1, &defaultId);
+
+ mBoundTransformFeedbackValidity.id = 0;
+ mBoundTransformFeedbackValidity.valid = true;
+
+ // query must take id that was created via glGenQueries
+ mBoundQueryValidity_AnySamplesPassed.valid = false;
+ mBoundQueryValidity_AnySamplesPassedConservative.valid = false;
+ mBoundQueryValidity_TransformFeedbackPrimitivesWritten.valid = false;
+#endif
}
GLClientState::GLClientState()
@@ -225,10 +234,10 @@ void GLClientState::addVertexArrayObject(GLuint name) {
m_vaoMap.insert(
VAOStateMap::value_type(
name,
- VAOState(0, m_nLocations, std::max(m_nLocations, m_max_vertex_attrib_bindings))));
+ VAOState(0, CODEC_MAX_VERTEX_ATTRIBUTES, CODEC_MAX_VERTEX_ATTRIBUTES)));
VertexAttribStateVector& attribState =
m_vaoMap.find(name)->second.attribState;
- for (int i = 0; i < m_nLocations; i++) {
+ for (int i = 0; i < CODEC_MAX_VERTEX_ATTRIBUTES; i++) {
attribState[i].enabled = 0;
attribState[i].enableDirty = false;
attribState[i].data = 0;
@@ -421,6 +430,222 @@ static void sClearIndexedBufferBinding(GLuint id, std::vector<GLClientState::Buf
}
}
+#ifdef GFXSTREAM
+
+void GLClientState::addBuffer(GLuint id) {
+ mBufferIds.add(id);
+ mBufferIds.set(id, true);
+ mHostMappedBufferDirty.add(id);
+}
+
+void GLClientState::removeBuffer(GLuint id) {
+ mHostMappedBufferDirty.remove(id);
+ mBufferIds.remove(id);
+}
+
+bool GLClientState::bufferIdExists(GLuint id) const {
+ return mBufferIds.get(id);
+}
+
+void GLClientState::setBufferHostMapDirty(GLuint id, bool dirty) {
+ mHostMappedBufferDirty.set(id, dirty);
+}
+
+bool GLClientState::isBufferHostMapDirty(GLuint id) const {
+ return mHostMappedBufferDirty.get(id);
+}
+
+void GLClientState::setExistence(ObjectType type, bool exists, GLsizei count, const GLuint* ids) {
+ if (type == ObjectType::Sampler) {
+ SamplerInfo::ScopedView view(mSamplerInfo);
+ if (exists) {
+ for (GLsizei i = 0; i < count; ++i) {
+ view.addFresh(ids[i]);
+ }
+ } else {
+ for (GLsizei i = 0; i < count; ++i) {
+ view.unref(ids[i]);
+ }
+ }
+ } else {
+ ExistenceMap* existenceMap = &mBufferIds;
+
+ switch (type) {
+ case ObjectType::Buffer:
+ existenceMap = &mBufferIds;
+ break;
+ case ObjectType::TransformFeedback:
+ existenceMap = &mTransformFeedbackIds;
+ break;
+ case ObjectType::Query:
+ existenceMap = &mQueryIds;
+ for (GLsizei i = 0; i < count; ++i) {
+ // reset the last query target
+ mLastQueryTargets.add(ids[i], 0);
+ }
+ break;
+ case ObjectType::Sampler:
+ default:
+ ALOGE("%s: Unreachable code\n", __func__);
+ abort();
+ }
+
+ if (exists) {
+ for (GLsizei i = 0; i < count; ++i) {
+ existenceMap->add(ids[i]);
+ existenceMap->set(ids[i], true);
+ }
+ } else {
+ for (GLsizei i = 0; i < count; ++i) {
+ existenceMap->remove(ids[i]);
+ }
+ }
+ }
+}
+
+bool GLClientState::queryExistence(ObjectType type, GLuint id) const {
+ switch (type) {
+ case ObjectType::Buffer:
+ return mBufferIds.get(id);
+ case ObjectType::TransformFeedback:
+ return mTransformFeedbackIds.get(id);
+ case ObjectType::Sampler:
+ return samplerExists(id);
+ case ObjectType::Query:
+ return mQueryIds.get(id);
+ default:
+ ALOGD("%s: unknown object type: 0x%x\n", __func__, type);
+ abort();
+ }
+}
+
+bool GLClientState::samplerExists(GLuint id) const {
+ if (!id) return true;
+ SamplerInfo::ScopedView view(mSamplerInfo);
+ return view.samplerExists(id);
+}
+
+bool GLClientState::tryBind(GLenum target, GLuint id) {
+ if (0 == id) { // unbind operation
+ switch (target) {
+ case GL_TRANSFORM_FEEDBACK:
+ mBoundTransformFeedbackValidity.id = 0;
+ mBoundTransformFeedbackValidity.valid = true;
+ break;
+ case GL_ANY_SAMPLES_PASSED:
+ mBoundQueryValidity_AnySamplesPassed.id = 0;
+ mBoundQueryValidity_AnySamplesPassed.valid = false;
+ break;
+ case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+ mBoundQueryValidity_AnySamplesPassedConservative.id = 0;
+ mBoundQueryValidity_AnySamplesPassedConservative.valid = false;
+ break;
+ case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+ mBoundQueryValidity_TransformFeedbackPrimitivesWritten.id = 0;
+ mBoundQueryValidity_TransformFeedbackPrimitivesWritten.valid = false;
+ break;
+ default:
+ ALOGE("%s: target 0x%x not yet supported in new state tracking model\n", __func__, target);
+ abort();
+ }
+ return true;
+ }
+
+ switch (target) {
+ case GL_TRANSFORM_FEEDBACK:
+ if (!queryExistence(ObjectType::TransformFeedback, id)) return false;
+ break;
+ case GL_ANY_SAMPLES_PASSED:
+ case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+ case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+ if (!queryExistence(ObjectType::Query, id)) {
+ return false;
+ }
+ break;
+ default:
+ ALOGE("%s: target 0x%x not yet supported in new state tracking model\n", __func__, target);
+ abort();
+ }
+
+ // valid bind
+ switch (target) {
+ case GL_TRANSFORM_FEEDBACK:
+ mBoundTransformFeedbackValidity.id = id;
+ mBoundTransformFeedbackValidity.valid = true;
+ break;
+ case GL_ANY_SAMPLES_PASSED:
+ mBoundQueryValidity_AnySamplesPassed.id = id;
+ mBoundQueryValidity_AnySamplesPassed.valid = true;
+ break;
+ case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+ mBoundQueryValidity_AnySamplesPassedConservative.id = id;
+ mBoundQueryValidity_AnySamplesPassedConservative.valid = true;
+ break;
+ case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+ mBoundQueryValidity_TransformFeedbackPrimitivesWritten.id = id;
+ mBoundQueryValidity_TransformFeedbackPrimitivesWritten.valid = true;
+ break;
+ default:
+ ALOGE("%s: target 0x%x not yet supported in new state tracking model\n", __func__, target);
+ abort();
+ }
+ return true;
+}
+
+bool GLClientState::isBoundTargetValid(GLenum target) {
+ switch (target) {
+ case GL_TRANSFORM_FEEDBACK:
+ return mBoundTransformFeedbackValidity.valid;
+ case GL_ANY_SAMPLES_PASSED:
+ return mBoundQueryValidity_AnySamplesPassed.valid;
+ case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+ return mBoundQueryValidity_AnySamplesPassedConservative.valid;
+ case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+ return mBoundQueryValidity_TransformFeedbackPrimitivesWritten.valid;
+ default:
+ ALOGE("%s: target 0x%x not yet supported in new state tracking model\n", __func__, target);
+ abort();
+ }
+}
+
+bool GLClientState::isQueryBound(GLenum target) {
+ switch (target) {
+ case GL_ANY_SAMPLES_PASSED:
+ return mBoundQueryValidity_AnySamplesPassed.valid;
+ case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+ return mBoundQueryValidity_AnySamplesPassedConservative.valid;
+ case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+ return mBoundQueryValidity_TransformFeedbackPrimitivesWritten.valid;
+ default:
+ return false;
+ }
+}
+
+bool GLClientState::isQueryObjectActive(GLuint id) {
+ if (mBoundQueryValidity_AnySamplesPassed.valid &&
+ (id == mBoundQueryValidity_AnySamplesPassed.id))
+ return true;
+ if (mBoundQueryValidity_AnySamplesPassedConservative.valid &&
+ (id == mBoundQueryValidity_AnySamplesPassedConservative.id))
+ return true;
+ if (mBoundQueryValidity_TransformFeedbackPrimitivesWritten.valid &&
+ (id == mBoundQueryValidity_TransformFeedbackPrimitivesWritten.id))
+ return true;
+ return false;
+}
+
+void GLClientState::setLastQueryTarget(GLenum target, GLuint id) {
+ mLastQueryTargets.add(id, target);
+}
+
+GLenum GLClientState::getLastQueryTarget(GLuint id) {
+ auto targetPtr = mLastQueryTargets.get_const(id);
+ if (!targetPtr) return 0;
+ return *targetPtr;
+}
+
+#else // GFXSTREAM
+
void GLClientState::addBuffer(GLuint id) {
mBufferIds.insert(id);
}
@@ -433,6 +658,70 @@ bool GLClientState::bufferIdExists(GLuint id) const {
return mBufferIds.find(id) != mBufferIds.end();
}
+void GLClientState::setBufferHostMapDirty(GLuint id, bool dirty) {
+ (void)id;
+ (void)dirty;
+}
+
+bool GLClientState::isBufferHostMapDirty(GLuint id) const {
+ (void)id;
+ return true;
+}
+
+void GLClientState::setExistence(ObjectType, bool, GLsizei, const GLuint*) {
+ // no-op in non-gfxstream
+}
+
+#endif // !GFXSTREAM
+
+void GLClientState::setBoundPixelPackBufferDirtyForHostMap() {
+ if (m_pixelPackBuffer)
+ setBufferHostMapDirty(m_pixelPackBuffer, true /* dirty */);
+}
+
+void GLClientState::setBoundTransformFeedbackBuffersDirtyForHostMap() {
+ if (m_transformFeedbackBuffer)
+ setBufferHostMapDirty(
+ m_transformFeedbackBuffer,
+ true /* dirty */);
+
+ for (size_t i = 0; i < m_indexedTransformFeedbackBuffers.size(); ++i)
+ if (m_indexedTransformFeedbackBuffers[i].buffer)
+ setBufferHostMapDirty(
+ m_indexedTransformFeedbackBuffers[i].buffer,
+ true /* dirty */);
+}
+
+void GLClientState::setBoundShaderStorageBuffersDirtyForHostMap() {
+ if (m_glesMajorVersion == 3 && m_glesMinorVersion == 0) return;
+
+ if (m_shaderStorageBuffer)
+ setBufferHostMapDirty(
+ m_shaderStorageBuffer,
+ true /* dirty */);
+
+ for (size_t i = 0; i < m_indexedShaderStorageBuffers.size(); ++i)
+ if (m_indexedShaderStorageBuffers[i].buffer)
+ setBufferHostMapDirty(
+ m_indexedShaderStorageBuffers[i].buffer,
+ true /* dirty */);
+}
+
+void GLClientState::setBoundAtomicCounterBuffersDirtyForHostMap() {
+ if (m_glesMajorVersion == 3 && m_glesMinorVersion == 0) return;
+
+ if (m_atomicCounterBuffer)
+ setBufferHostMapDirty(
+ m_atomicCounterBuffer,
+ true /* dirty */);
+
+ for (size_t i = 0; i < m_indexedAtomicCounterBuffers.size(); ++i)
+ if (m_indexedAtomicCounterBuffers[i].buffer)
+ setBufferHostMapDirty(
+ m_indexedAtomicCounterBuffers[i].buffer,
+ true /* dirty */);
+}
+
void GLClientState::unBindBuffer(GLuint id) {
if (m_arrayBuffer == id) {
m_arrayBuffer = 0;
@@ -619,6 +908,47 @@ bool GLClientState::isIndexedBindNoOp(GLenum target, GLuint index, GLuint buffer
}
}
+int GLClientState::getMaxTextureSize() const {
+ return m_hostDriverCaps.max_texture_size;
+}
+
+int GLClientState::getMaxTextureSize3D() const {
+ return m_hostDriverCaps.max_texture_size_3d;
+}
+
+int GLClientState::getMaxTextureSizeCubeMap() const {
+ return m_hostDriverCaps.max_texture_size_cube_map;
+}
+
+int GLClientState::getLog2MaxTextureSize() const {
+ return m_log2MaxTextureSize;
+}
+
+void GLClientState::postDraw() {
+ setBoundTransformFeedbackBuffersDirtyForHostMap();
+ setBoundShaderStorageBuffersDirtyForHostMap();
+ setBoundAtomicCounterBuffersDirtyForHostMap();
+}
+
+void GLClientState::postReadPixels() {
+ setBoundPixelPackBufferDirtyForHostMap();
+}
+
+void GLClientState::postDispatchCompute() {
+ setBoundShaderStorageBuffersDirtyForHostMap();
+ setBoundAtomicCounterBuffersDirtyForHostMap();
+}
+
+bool GLClientState::shouldSkipHostMapBuffer(GLenum target) {
+ GLuint id = getBuffer(target);
+ return !isBufferHostMapDirty(id);
+}
+
+void GLClientState::onHostMappedBuffer(GLenum target) {
+ GLuint id = getBuffer(target);
+ setBufferHostMapDirty(id, false /* not dirty */);
+}
+
int GLClientState::getBuffer(GLenum target) {
int ret=0;
switch (target) {
@@ -699,6 +1029,50 @@ void GLClientState::setLastEncodedBufferBind(GLenum target, GLuint id)
}
}
+bool GLClientState::isTexture(GLuint tex_name) const {
+ return getTextureRec(tex_name);
+}
+
+bool GLClientState::isTextureWithStorage(GLuint tex_name) const {
+ TextureRec* rec = getTextureRec(tex_name);
+ if (!rec) return false;
+ return rec->hasStorage;
+}
+
+bool GLClientState::isTextureCubeMap(GLuint tex_name) const {
+ TextureRec* texrec = getTextureRec(tex_name);
+ if (!texrec) return false;
+ switch (texrec->target) {
+ case GL_TEXTURE_CUBE_MAP:
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool GLClientState::isRenderbuffer(GLuint name) const {
+ if (!name) return false;
+
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ return view.hasRbo(name);
+}
+
+bool GLClientState::isRenderbufferThatWasBound(GLuint name) const {
+ if (!name) return true;
+
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ if (!view.hasRbo(name)) return false;
+
+ const RboProps* props = view.get_const(name);
+ return props->previouslyBound;
+}
+
void GLClientState::getClientStatePointer(GLenum pname, GLvoid** params)
{
GLenum which_state = -1;
@@ -1001,8 +1375,14 @@ void GLClientState::disableTextureTarget(GLenum target)
}
}
-void GLClientState::bindSampler(GLuint unit, GLuint sampler) {
+bool GLClientState::bindSampler(GLuint unit, GLuint sampler) {
+ SamplerInfo::ScopedView view(mSamplerInfo);
+ view.ref(sampler);
+ if (m_tex.unit[unit].boundSampler) {
+ view.unref(sampler);
+ }
m_tex.unit[unit].boundSampler = sampler;
+ return true;
}
bool GLClientState::isSamplerBindNoOp(GLuint unit, GLuint sampler) {
@@ -1052,7 +1432,7 @@ GLenum GLClientState::bindTexture(GLenum target, GLuint texture,
if (texture && target != texrec->target &&
(target != GL_TEXTURE_EXTERNAL_OES &&
texrec->target != GL_TEXTURE_EXTERNAL_OES)) {
- ALOGD("%s: issue GL_INVALID_OPERATION: target 0x%x texrectarget 0x%x texture %u", __FUNCTION__, target, texrec->target, texture);
+ return GL_INVALID_OPERATION;
}
switch (target) {
@@ -1086,10 +1466,23 @@ GLenum GLClientState::bindTexture(GLenum target, GLuint texture,
void GLClientState::setBoundEGLImage(GLenum target, GLeglImageOES image) {
(void)image;
- GLuint texture = getBoundTexture(target);
- TextureRec* texrec = getTextureRec(texture);
- if (!texrec) return;
- texrec->boundEGLImage = true;
+ if (target == GL_RENDERBUFFER) {
+ if (!boundRenderbuffer()) return;
+ setBoundRenderbufferEGLImageBacked();
+ setBoundRenderbufferFormat(GL_RGBA);
+ setBoundRenderbufferSamples(0);
+ setBoundRenderbufferDimensions(1, 1);
+ } else {
+ GLuint texture = getBoundTexture(target);
+ TextureRec* texrec = getTextureRec(texture);
+ if (!texrec) return;
+ texrec->boundEGLImage = true;
+ setBoundTextureInternalFormat(target, GL_RGBA);
+ setBoundTextureFormat(target, GL_RGBA);
+ setBoundTextureType(target, GL_UNSIGNED_BYTE);
+ setBoundTextureSamples(target, 0);
+ setBoundTextureDims(target, target, 0, 1, 1, 1);
+ }
}
TextureRec* GLClientState::addTextureRec(GLuint id, GLenum target)
@@ -1101,7 +1494,14 @@ TextureRec* GLClientState::addTextureRec(GLuint id, GLenum target)
tex->multisamples = 0;
tex->immutable = false;
tex->boundEGLImage = false;
- tex->dims = new TextureDims;
+ tex->hasStorage = false;
+ tex->dims = new TextureDims[6];
+ tex->hasCubeNegX = false;
+ tex->hasCubePosX = false;
+ tex->hasCubeNegY = false;
+ tex->hasCubePosY = false;
+ tex->hasCubeNegZ = false;
+ tex->hasCubePosZ = false;
(*(m_tex.textureRecs))[id] = tex;
return tex;
@@ -1137,13 +1537,49 @@ void GLClientState::setBoundTextureType(GLenum target, GLenum type) {
texrec->type = type;
}
-void GLClientState::setBoundTextureDims(GLenum target, GLsizei level, GLsizei width, GLsizei height, GLsizei depth) {
+static size_t textureDimArrayOfCubeTarget(GLenum cubetarget) {
+ switch (cubetarget) {
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
+ return 0;
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
+ return 1;
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
+ return 2;
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
+ return 3;
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
+ return 4;
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
+ return 5;
+ }
+ return 0;
+}
+
+void GLClientState::setBoundTextureDims(GLenum target, GLenum cubetarget, GLsizei level, GLsizei width, GLsizei height, GLsizei depth) {
GLuint texture = getBoundTexture(target);
TextureRec* texrec = getTextureRec(texture);
if (!texrec) {
return;
}
+ texrec->hasStorage = true;
+
+ size_t indexToSet = 0;
+
+ if (target == GL_TEXTURE_CUBE_MAP) {
+ if (-1 == cubetarget) {
+ setBoundTextureDims(target, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, level, width, height, depth);
+ setBoundTextureDims(target, GL_TEXTURE_CUBE_MAP_POSITIVE_X, level, width, height, depth);
+ setBoundTextureDims(target, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, level, width, height, depth);
+ setBoundTextureDims(target, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, level, width, height, depth);
+ setBoundTextureDims(target, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, level, width, height, depth);
+ setBoundTextureDims(target, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, level, width, height, depth);
+ return;
+ }
+ indexToSet = textureDimArrayOfCubeTarget(cubetarget);
+ }
+
+
if (level == -1) {
GLsizei curr_width = width;
GLsizei curr_height = height;
@@ -1151,9 +1587,9 @@ void GLClientState::setBoundTextureDims(GLenum target, GLsizei level, GLsizei wi
GLsizei curr_level = 0;
while (true) {
- texrec->dims->widths[curr_level] = curr_width;
- texrec->dims->heights[curr_level] = curr_height;
- texrec->dims->depths[curr_level] = curr_depth;
+ texrec->dims[indexToSet].widths[curr_level] = curr_width;
+ texrec->dims[indexToSet].heights[curr_level] = curr_height;
+ texrec->dims[indexToSet].depths[curr_level] = curr_depth;
if (curr_width >> 1 == 0 &&
curr_height >> 1 == 0 &&
((target == GL_TEXTURE_3D && curr_depth == 0) ||
@@ -1169,10 +1605,12 @@ void GLClientState::setBoundTextureDims(GLenum target, GLsizei level, GLsizei wi
}
} else {
- texrec->dims->widths[level] = width;
- texrec->dims->heights[level] = height;
- texrec->dims->depths[level] = depth;
+ texrec->dims[indexToSet].widths[level] = width;
+ texrec->dims[indexToSet].heights[level] = height;
+ texrec->dims[indexToSet].depths[level] = depth;
}
+
+ setFboCompletenessDirtyForTexture(texture);
}
void GLClientState::setBoundTextureSamples(GLenum target, GLsizei samples) {
@@ -1182,11 +1620,48 @@ void GLClientState::setBoundTextureSamples(GLenum target, GLsizei samples) {
texrec->multisamples = samples;
}
+void GLClientState::addTextureCubeMapImage(GLenum stateTarget, GLenum cubeTarget) {
+ if (stateTarget != GL_TEXTURE_CUBE_MAP) return;
+
+ GLuint texture = getBoundTexture(stateTarget);
+ TextureRec* texrec = getTextureRec(texture);
+ if (!texrec) return;
+
+ switch (cubeTarget) {
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:
+ texrec->hasCubeNegX = true;
+ return;
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_X:
+ texrec->hasCubePosX = true;
+ return;
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:
+ texrec->hasCubeNegY = true;
+ return;
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:
+ texrec->hasCubePosY = true;
+ return;
+ case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:
+ texrec->hasCubeNegZ = true;
+ return;
+ case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:
+ texrec->hasCubePosZ = true;
+ return;
+ }
+}
+
void GLClientState::setBoundTextureImmutableFormat(GLenum target) {
GLuint texture = getBoundTexture(target);
TextureRec* texrec = getTextureRec(texture);
if (!texrec) return;
texrec->immutable = true;
+ if (target == GL_TEXTURE_CUBE_MAP) {
+ texrec->hasCubeNegX = true;
+ texrec->hasCubePosX = true;
+ texrec->hasCubeNegY = true;
+ texrec->hasCubePosY = true;
+ texrec->hasCubeNegZ = true;
+ texrec->hasCubePosZ = true;
+ }
}
bool GLClientState::isBoundTextureImmutableFormat(GLenum target) const {
@@ -1196,6 +1671,41 @@ bool GLClientState::isBoundTextureImmutableFormat(GLenum target) const {
return texrec->immutable;
}
+bool GLClientState::isBoundTextureComplete(GLenum target) const {
+ GLuint texture = getBoundTexture(target);
+ TextureRec* texrec = getTextureRec(texture);
+ if (!texrec) return false;
+
+ if (texrec->immutable) return true;
+ if (!texrec->hasStorage) return true;
+
+ if (target == GL_TEXTURE_CUBE_MAP) {
+ if (!(texrec->hasCubeNegX &&
+ texrec->hasCubePosX &&
+ texrec->hasCubeNegY &&
+ texrec->hasCubePosY &&
+ texrec->hasCubeNegZ &&
+ texrec->hasCubePosZ)) return false;
+
+ size_t currBaseLevel = texrec->dims[0].widths.begin()->first;
+ size_t currWidth = texrec->dims[0].widths.begin()->second;
+ size_t currHeight = texrec->dims[0].heights.begin()->second;
+ for (size_t i = 1; i < 6; ++i) {
+ size_t nextLevel = texrec->dims[i].widths.begin()->first;
+ size_t nextWidth = texrec->dims[i].widths.begin()->second;
+ size_t nextHeight = texrec->dims[i].heights.begin()->second;
+ if (currBaseLevel != nextLevel) return false;
+ if (currWidth != nextWidth) return false;
+ if (currHeight != nextHeight) return false;
+ }
+
+ return true;
+ }
+
+ return true;
+}
+
+
GLuint GLClientState::getBoundTexture(GLenum target) const
{
switch (target) {
@@ -1216,6 +1726,219 @@ GLuint GLClientState::getBoundTexture(GLenum target) const
}
}
+GLuint GLClientState::getBoundFramebuffer(GLenum target) const
+{
+ switch (target) {
+ case GL_FRAMEBUFFER:
+ case GL_DRAW_FRAMEBUFFER:
+ return mFboState.boundDrawFramebuffer;
+ case GL_READ_FRAMEBUFFER:
+ return mFboState.boundReadFramebuffer;
+ default:
+ return 0;
+ }
+}
+
+GLenum GLClientState::checkFramebufferCompleteness(GLenum target) {
+ // Default framebuffer is complete
+ // TODO: Check the case where the default framebuffer is 0x0
+ if (0 == boundFramebuffer(target)) return GL_FRAMEBUFFER_COMPLETE;
+
+ bool hasAttachment = false;
+ FboProps& props = boundFboProps(target);
+
+ if (!props.completenessDirty) {
+ return props.cachedCompleteness;
+ }
+
+ int currentSamples = -1;
+
+ for (int i = 0; i < getMaxColorAttachments(); i++) {
+ if (!props.colorAttachmenti_hasTex[i] &&
+ !props.colorAttachmenti_hasRbo[i]) continue;
+
+ GLenum attachmentRes = checkFramebufferAttachmentCompleteness(target, glUtilsColorAttachmentName(i), &currentSamples);
+ if (attachmentRes != GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT) {
+ hasAttachment = true;
+ }
+ if (attachmentRes) {
+ ALOGD("%s: color attachment %d not complete: 0x%x\n", __func__, i, attachmentRes);
+ return attachmentRes;
+ }
+ }
+
+ bool hasDepth = (props.depthAttachment_hasTexObj || props.depthAttachment_hasRbo || props.depthstencilAttachment_hasTexObj || props.depthstencilAttachment_hasRbo);
+ bool hasStencil = (props.stencilAttachment_hasTexObj || props.stencilAttachment_hasRbo || props.depthstencilAttachment_hasTexObj || props.depthstencilAttachment_hasRbo);
+
+ if (hasDepth) {
+ GLenum depthAttachmentRes = checkFramebufferAttachmentCompleteness(target, GL_DEPTH_ATTACHMENT, &currentSamples);
+ if (depthAttachmentRes != GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT) {
+ hasAttachment = true;
+ }
+ if (depthAttachmentRes) {
+ ALOGD("%s: depth attachment not complete: 0x%x\n", __func__, depthAttachmentRes);
+ return depthAttachmentRes;
+ }
+ }
+
+ if (hasStencil) {
+ GLenum stencilAttachmentRes = checkFramebufferAttachmentCompleteness(target, GL_STENCIL_ATTACHMENT, &currentSamples);
+ if (stencilAttachmentRes != GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT) {
+ hasAttachment = true;
+ }
+ if (stencilAttachmentRes) {
+ ALOGD("%s: stencil attachment not complete: 0x%x\n", __func__, stencilAttachmentRes);
+ return stencilAttachmentRes;
+ }
+ }
+
+ if (hasDepth && hasStencil) {
+ // In gles3, depth/stencil must use the same image.
+ if (m_glesMajorVersion > 2) {
+ if ((props.depthAttachment_hasTexObj && props.stencilAttachment_hasRbo) ||
+ (props.stencilAttachment_hasTexObj && props.depthAttachment_hasRbo)) {
+ ALOGD("%s: GL_FRAMEBUFFER_UNSUPPORTED: using different types of depth/stencil attachment images in GLES 3+\n", __func__);
+ return GL_FRAMEBUFFER_UNSUPPORTED;
+ }
+ if (props.depthAttachment_hasTexObj) {
+ if (props.depthAttachment_texture != props.stencilAttachment_texture) {
+ ALOGD("%s: GL_FRAMEBUFFER_UNSUPPORTED: using different texture images for depth and stencil attachments in GLES 3+\n", __func__);
+ return GL_FRAMEBUFFER_UNSUPPORTED;
+ }
+ }
+ if (props.depthAttachment_hasRbo) {
+ if (props.depthAttachment_rbo != props.stencilAttachment_rbo) {
+ ALOGD("%s: GL_FRAMEBUFFER_UNSUPPORTED: using different renderbuffers for depth and stencil attachments in GLES 3+\n", __func__);
+ return GL_FRAMEBUFFER_UNSUPPORTED;
+ }
+ }
+ }
+ }
+
+ if (!hasAttachment) {
+ return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
+ }
+
+ props.completenessDirty = false;
+ props.cachedCompleteness = GL_FRAMEBUFFER_COMPLETE;
+ return GL_FRAMEBUFFER_COMPLETE;
+}
+
+GLenum GLClientState::checkFramebufferAttachmentCompleteness(GLenum target, GLenum attachment, int* currentSamples) const {
+ FboFormatInfo fbo_format_info;
+ getBoundFramebufferFormat(target, attachment, &fbo_format_info);
+
+ // Check format and renderability
+ bool renderable = false;
+ switch (fbo_format_info.type) {
+ case FBO_ATTACHMENT_RENDERBUFFER:
+ switch (attachment) {
+ case GL_DEPTH_ATTACHMENT:
+ renderable = fbo_format_info.rb_external || depthRenderableFormat(fbo_format_info.rb_format);
+ break;
+ case GL_STENCIL_ATTACHMENT:
+ renderable = fbo_format_info.rb_external || stencilRenderableFormat(fbo_format_info.rb_format);
+ break;
+ default:
+ renderable = fbo_format_info.rb_external || colorRenderableFormat(
+ fbo_format_info.rb_format,
+ GL_UNSIGNED_BYTE,
+ m_glesMajorVersion, m_glesMinorVersion,
+ m_has_color_buffer_float_extension,
+ m_has_color_buffer_half_float_extension);
+ if (!renderable) {
+ ALOGD("%s: rbo not color renderable. format: 0x%x\n", __func__, fbo_format_info.rb_format); }
+ break;
+ }
+ break;
+ case FBO_ATTACHMENT_TEXTURE:
+ switch (attachment) {
+ case GL_DEPTH_ATTACHMENT:
+ renderable = fbo_format_info.tex_external || depthRenderableFormat(fbo_format_info.tex_internalformat);
+ break;
+ case GL_STENCIL_ATTACHMENT:
+ renderable = fbo_format_info.tex_external || stencilRenderableFormat(fbo_format_info.tex_internalformat);
+ break;
+ default:
+ renderable = fbo_format_info.tex_external || colorRenderableFormat(
+ fbo_format_info.tex_internalformat,
+ fbo_format_info.tex_type,
+ m_glesMajorVersion, m_glesMinorVersion,
+ m_has_color_buffer_float_extension,
+ m_has_color_buffer_half_float_extension);
+ if (!renderable) {
+ ALOGD("%s: tex not color renderable. format: 0x%x type 0x%x maj min %d %d floatext %d hfloatext %d\n", __func__, fbo_format_info.tex_internalformat, fbo_format_info.tex_type, m_glesMajorVersion, m_glesMinorVersion, m_has_color_buffer_float_extension, m_has_color_buffer_half_float_extension);
+ }
+ break;
+ }
+ break;
+ case FBO_ATTACHMENT_NONE:
+ default:
+ return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
+ }
+
+ if (!renderable) return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
+
+ // Check dimensions
+ GLuint id;
+ switch (fbo_format_info.type) {
+ case FBO_ATTACHMENT_RENDERBUFFER:
+ id = getFboAttachmentRboId(target, attachment);
+ if (!fbo_format_info.rb_external) {
+ if (0 == queryRboWidth(id) || 0 == queryRboHeight(id)) {
+ ALOGD("%s: rbo has zero dimension\n", __func__);
+ return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
+ }
+ }
+ break;
+ case FBO_ATTACHMENT_TEXTURE:
+ id = getFboAttachmentTextureId(target, attachment);
+ if (!fbo_format_info.tex_external) {
+ if (0 == queryTexWidth(fbo_format_info.tex_level, id) || 0 == queryTexHeight(fbo_format_info.tex_level, id)) {
+ ALOGD("%s: texture has zero dimension\n", __func__);
+ return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
+ }
+ GLsizei depth = queryTexDepth(fbo_format_info.tex_level, id);
+ if (fbo_format_info.tex_layer >= depth) {
+ ALOGD("%s: texture layer/zoffset too high, wanted %d but only have %d layers\n", __func__,
+ fbo_format_info.tex_layer, depth);
+ return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
+ }
+ }
+ break;
+ case FBO_ATTACHMENT_NONE:
+ default:
+ return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
+ }
+
+ // Check samples
+ int currSamplesVal = *currentSamples;
+ bool firstTime = -1 == currSamplesVal;
+ int samplesThisAttachment = 0;
+ switch (fbo_format_info.type) {
+ case FBO_ATTACHMENT_RENDERBUFFER:
+ samplesThisAttachment = fbo_format_info.rb_multisamples;
+ break;
+ case FBO_ATTACHMENT_TEXTURE:
+ samplesThisAttachment = fbo_format_info.tex_multisamples;
+ break;
+ case FBO_ATTACHMENT_NONE:
+ break;
+ default:
+ return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
+ }
+
+ if (firstTime) {
+ *currentSamples = samplesThisAttachment;
+ } else {
+ if (samplesThisAttachment != currSamplesVal) {
+ return GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;
+ }
+ }
+
+ return 0;
+}
+
// BEGIN driver workarounds-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
// (>' ')><(' '<)(>' ')><(' '<)(>' ')><(' '<)(>' ')><(' '<)(>' ')><(' '<)(>' ')>
@@ -1284,6 +2007,10 @@ GLenum GLClientState::copyTexImageLuminanceCubeMapAMDWorkaround
void GLClientState::deleteTextures(GLsizei n, const GLuint* textures)
{
+ for (const GLuint* texture = textures; texture != textures + n; texture++) {
+ setFboCompletenessDirtyForTexture(*texture);
+ }
+
// Updating the textures array could be made more efficient when deleting
// several textures:
// - compacting the array could be done in a single pass once the deleted
@@ -1293,7 +2020,7 @@ void GLClientState::deleteTextures(GLsizei n, const GLuint* textures)
for (const GLuint* texture = textures; texture != textures + n; texture++) {
texrec = getTextureRec(*texture);
if (texrec && texrec->dims) {
- delete texrec->dims;
+ delete [] texrec->dims;
}
if (texrec) {
m_tex.textureRecs->erase(*texture);
@@ -1315,20 +2042,10 @@ void GLClientState::deleteTextures(GLsizei n, const GLuint* textures)
// RBO//////////////////////////////////////////////////////////////////////////
void GLClientState::addFreshRenderbuffer(GLuint name) {
- // if underlying opengl says these are fresh names,
- // but we are keeping a stale one, reset it.
- RboProps props;
- props.target = GL_RENDERBUFFER;
- props.name = name;
- props.format = GL_NONE;
- props.multisamples = 0;
- props.previouslyBound = false;
+ if (!name) return;
- if (usedRenderbufferName(name)) {
- mRboState.rboData[getRboIndex(name)] = props;
- } else {
- mRboState.rboData.push_back(props);
- }
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ view.addFresh(name);
}
void GLClientState::addRenderbuffers(GLsizei n, GLuint* renderbuffers) {
@@ -1337,84 +2054,87 @@ void GLClientState::addRenderbuffers(GLsizei n, GLuint* renderbuffers) {
}
}
-size_t GLClientState::getRboIndex(GLuint name) const {
- for (size_t i = 0; i < mRboState.rboData.size(); i++) {
- if (mRboState.rboData[i].name == name) {
- return i;
- }
- }
- return -1;
-}
-
void GLClientState::removeRenderbuffers(GLsizei n, const GLuint* renderbuffers) {
- size_t bound_rbo_idx = getRboIndex(boundRboProps_const().name);
-
std::vector<GLuint> to_remove;
for (size_t i = 0; i < n; i++) {
if (renderbuffers[i] != 0) { // Never remove the zero rb.
- to_remove.push_back(getRboIndex(renderbuffers[i]));
+ to_remove.push_back(renderbuffers[i]);
+ setFboCompletenessDirtyForRbo(renderbuffers[i]);
}
}
- for (size_t i = 0; i < to_remove.size(); i++) {
- mRboState.rboData[to_remove[i]] = mRboState.rboData.back();
- mRboState.rboData.pop_back();
+ bool unbindCurrent = false;
+ {
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ for (size_t i = 0; i < to_remove.size(); i++) {
+ view.unref(to_remove[i]);
+ }
+ for (size_t i = 0; i < to_remove.size(); i++) {
+ if (mRboState.boundRenderbuffer == renderbuffers[i]) {
+ unbindCurrent = true;
+ break;
+ }
+ }
}
- // If we just deleted the currently bound rb,
- // bind the zero rb
- if (getRboIndex(boundRboProps_const().name) != bound_rbo_idx) {
+ if (unbindCurrent) {
bindRenderbuffer(GL_RENDERBUFFER, 0);
}
}
bool GLClientState::usedRenderbufferName(GLuint name) const {
- for (size_t i = 0; i < mRboState.rboData.size(); i++) {
- if (mRboState.rboData[i].name == name) {
- return true;
- }
- }
- return false;
-}
-
-void GLClientState::setBoundRenderbufferIndex() {
- for (size_t i = 0; i < mRboState.rboData.size(); i++) {
- if (mRboState.rboData[i].name == mRboState.boundRenderbuffer) {
- mRboState.boundRenderbufferIndex = i;
- break;
- }
- }
-}
+ if (!name) return false;
-RboProps& GLClientState::boundRboProps() {
- return mRboState.rboData[mRboState.boundRenderbufferIndex];
-}
-
-const RboProps& GLClientState::boundRboProps_const() const {
- return mRboState.rboData[mRboState.boundRenderbufferIndex];
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ return view.get_const(name) != 0;
}
void GLClientState::bindRenderbuffer(GLenum target, GLuint name) {
- // If unused, add it.
- if (!usedRenderbufferName(name)) {
- addFreshRenderbuffer(name);
+
+ (void)target; // Must be GL_RENDERBUFFER
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ if (name != mRboState.boundRenderbuffer) {
+ view.unref(mRboState.boundRenderbuffer);
}
+
mRboState.boundRenderbuffer = name;
- setBoundRenderbufferIndex();
- boundRboProps().target = target;
- boundRboProps().previouslyBound = true;
+
+ if (!name) return;
+
+ view.bind(name);
}
GLuint GLClientState::boundRenderbuffer() const {
- return boundRboProps_const().name;
+ return mRboState.boundRenderbuffer;
}
void GLClientState::setBoundRenderbufferFormat(GLenum format) {
- boundRboProps().format = format;
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ RboProps* props = view.get(mRboState.boundRenderbuffer);
+ if (!props) return;
+ props->format = format;
}
void GLClientState::setBoundRenderbufferSamples(GLsizei samples) {
- boundRboProps().multisamples = samples;
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ RboProps* props = view.get(mRboState.boundRenderbuffer);
+ if (!props) return;
+ props->multisamples = samples;
+}
+
+void GLClientState::setBoundRenderbufferDimensions(GLsizei width, GLsizei height) {
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ RboProps* props = view.get(mRboState.boundRenderbuffer);
+ if (!props) return;
+ props->width = width;
+ props->height = height;
+}
+
+void GLClientState::setBoundRenderbufferEGLImageBacked() {
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ RboProps* props = view.get(mRboState.boundRenderbuffer);
+ if (!props) return;
+ props->boundEGLImage = true;
}
// FBO//////////////////////////////////////////////////////////////////////////
@@ -1422,11 +2142,38 @@ void GLClientState::setBoundRenderbufferSamples(GLsizei samples) {
// Format querying
GLenum GLClientState::queryRboFormat(GLuint rbo_name) const {
- return mRboState.rboData[getRboIndex(rbo_name)].format;
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ const RboProps* props = view.get(rbo_name);
+ if (!props) return 0;
+ return props->format;
}
GLsizei GLClientState::queryRboSamples(GLuint rbo_name) const {
- return mRboState.rboData[getRboIndex(rbo_name)].multisamples;
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ const RboProps* props = view.get(rbo_name);
+ if (!props) return 0;
+ return props->multisamples;
+}
+
+GLsizei GLClientState::queryRboWidth(GLuint rbo_name) const {
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ const RboProps* props = view.get(rbo_name);
+ if (!props) return 0;
+ return props->width;
+}
+
+GLsizei GLClientState::queryRboHeight(GLuint rbo_name) const {
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ const RboProps* props = view.get(rbo_name);
+ if (!props) return 0;
+ return props->height;
+}
+
+bool GLClientState::queryRboEGLImageBacked(GLuint rbo_name) const {
+ RenderbufferInfo::ScopedView view(mRboState.rboData);
+ const RboProps* props = view.get(rbo_name);
+ if (!props) return 0;
+ return props->boundEGLImage;
}
GLint GLClientState::queryTexInternalFormat(GLuint tex_name) const {
@@ -1493,10 +2240,12 @@ void GLClientState::getBoundFramebufferFormat(
res_info->type = FBO_ATTACHMENT_NONE;
res_info->rb_format = GL_NONE;
res_info->rb_multisamples = 0;
+ res_info->rb_external = false;
res_info->tex_internalformat = -1;
res_info->tex_format = GL_NONE;
res_info->tex_type = GL_NONE;
res_info->tex_multisamples = 0;
+ res_info->tex_external = false;
int colorAttachmentIndex =
glUtilsColorAttachmentIndex(attachment);
@@ -1510,8 +2259,13 @@ void GLClientState::getBoundFramebufferFormat(
res_info->rb_multisamples =
queryRboSamples(
props.colorAttachmenti_rbos[colorAttachmentIndex]);
+ res_info->rb_external =
+ queryRboEGLImageBacked(
+ props.colorAttachmenti_rbos[colorAttachmentIndex]);
} else if (props.colorAttachmenti_hasTex[colorAttachmentIndex]) {
res_info->type = FBO_ATTACHMENT_TEXTURE;
+ res_info->tex_external = queryTexEGLImageBacked(
+ props.colorAttachmenti_textures[colorAttachmentIndex]);
res_info->tex_internalformat =
queryTexInternalFormat(
props.colorAttachmenti_textures[colorAttachmentIndex]);
@@ -1522,6 +2276,8 @@ void GLClientState::getBoundFramebufferFormat(
queryTexType(props.colorAttachmenti_textures[colorAttachmentIndex]);
res_info->tex_multisamples =
queryTexSamples(props.colorAttachmenti_textures[colorAttachmentIndex]);
+ res_info->tex_level = props.colorAttachmenti_texture_levels[colorAttachmentIndex];
+ res_info->tex_layer = props.colorAttachmenti_texture_layers[colorAttachmentIndex];
} else {
res_info->type = FBO_ATTACHMENT_NONE;
}
@@ -1535,13 +2291,19 @@ void GLClientState::getBoundFramebufferFormat(
res_info->rb_multisamples =
queryRboSamples(
props.depthAttachment_rbo);
+ res_info->rb_external =
+ queryRboEGLImageBacked(
+ props.depthAttachment_rbo);
} else if (props.depthAttachment_hasTexObj) {
res_info->type = FBO_ATTACHMENT_TEXTURE;
+ res_info->tex_external = queryTexEGLImageBacked(props.depthAttachment_texture);
res_info->tex_internalformat = queryTexInternalFormat(props.depthAttachment_texture);
res_info->tex_format = queryTexFormat(props.depthAttachment_texture);
res_info->tex_type = queryTexType(props.depthAttachment_texture);
res_info->tex_multisamples =
queryTexSamples(props.depthAttachment_texture);
+ res_info->tex_level = props.depthAttachment_texture_level;
+ res_info->tex_layer = props.depthAttachment_texture_layer;
} else {
res_info->type = FBO_ATTACHMENT_NONE;
}
@@ -1553,13 +2315,19 @@ void GLClientState::getBoundFramebufferFormat(
res_info->rb_multisamples =
queryRboSamples(
props.stencilAttachment_rbo);
+ res_info->rb_external =
+ queryRboEGLImageBacked(
+ props.stencilAttachment_rbo);
} else if (props.stencilAttachment_hasTexObj) {
res_info->type = FBO_ATTACHMENT_TEXTURE;
+ res_info->tex_external = queryTexEGLImageBacked(props.stencilAttachment_texture);
res_info->tex_internalformat = queryTexInternalFormat(props.stencilAttachment_texture);
res_info->tex_format = queryTexFormat(props.stencilAttachment_texture);
res_info->tex_type = queryTexType(props.stencilAttachment_texture);
res_info->tex_multisamples =
queryTexSamples(props.stencilAttachment_texture);
+ res_info->tex_level = props.depthAttachment_texture_level;
+ res_info->tex_layer = props.depthAttachment_texture_layer;
} else {
res_info->type = FBO_ATTACHMENT_NONE;
}
@@ -1571,13 +2339,19 @@ void GLClientState::getBoundFramebufferFormat(
res_info->rb_multisamples =
queryRboSamples(
props.depthstencilAttachment_rbo);
+ res_info->rb_external =
+ queryRboEGLImageBacked(
+ props.depthstencilAttachment_rbo);
} else if (props.depthstencilAttachment_hasTexObj) {
res_info->type = FBO_ATTACHMENT_TEXTURE;
+ res_info->tex_external = queryTexEGLImageBacked(props.depthstencilAttachment_texture);
res_info->tex_internalformat = queryTexInternalFormat(props.depthstencilAttachment_texture);
res_info->tex_format = queryTexFormat(props.depthstencilAttachment_texture);
res_info->tex_type = queryTexType(props.depthstencilAttachment_texture);
res_info->tex_multisamples =
queryTexSamples(props.depthstencilAttachment_texture);
+ res_info->tex_level = props.depthAttachment_texture_level;
+ res_info->tex_layer = props.depthAttachment_texture_layer;
} else {
res_info->type = FBO_ATTACHMENT_NONE;
}
@@ -1591,13 +2365,52 @@ FboAttachmentType GLClientState::getBoundFramebufferAttachmentType(GLenum target
return info.type;
}
-
int GLClientState::getMaxColorAttachments() const {
- return m_max_color_attachments;
+ return m_hostDriverCaps.max_color_attachments;
}
int GLClientState::getMaxDrawBuffers() const {
- return m_max_draw_buffers;
+ return m_hostDriverCaps.max_draw_buffers;
+}
+
+#define UNIFORM_VALIDATION_ERR_COND(cond, code) if (cond) { *err = code; return; }
+
+#define UNIFORM_VALIDATION_INFO_VAR_NAME info
+
+#define UNIFORM_VALIDATION_TYPE_VIOLATION_FOR_FLOATS \
+ (!(UNIFORM_VALIDATION_INFO_VAR_NAME->isBool) && (UNIFORM_VALIDATION_INFO_VAR_NAME->isInt || UNIFORM_VALIDATION_INFO_VAR_NAME->isSampler))
+
+#define UNIFORM_VALIDATION_TYPE_VIOLATION_FOR_INTS \
+ (!(UNIFORM_VALIDATION_INFO_VAR_NAME->isBool) && (!UNIFORM_VALIDATION_TYPE_VIOLATION_FOR_FLOATS || UNIFORM_VALIDATION_INFO_VAR_NAME->isUnsigned))
+
+#define UNIFORM_VALIDATION_TYPE_VIOLATION_FOR_UNSIGNED_INTS \
+ (!(UNIFORM_VALIDATION_INFO_VAR_NAME->isBool) && (!UNIFORM_VALIDATION_TYPE_VIOLATION_FOR_FLOATS || !(UNIFORM_VALIDATION_INFO_VAR_NAME->isUnsigned)))
+
+#define UNIFORM_VALIDATION_INLINING
+
+void GLClientState::validateUniform(bool isFloat, bool isUnsigned, GLint columns, GLint rows, GLint location, GLsizei count, GLenum* err) {
+ UNIFORM_VALIDATION_ERR_COND(!m_currentProgram && !m_currentShaderProgram, GL_INVALID_OPERATION);
+ if (-1 == location) return; \
+ auto info = currentUniformValidationInfo.get_const(location); \
+ UNIFORM_VALIDATION_ERR_COND(!info || !info->valid, GL_INVALID_OPERATION); \
+ UNIFORM_VALIDATION_ERR_COND(columns != info->columns || rows != info->rows, GL_INVALID_OPERATION); \
+ UNIFORM_VALIDATION_ERR_COND(count > 1 && !info->isArray, GL_INVALID_OPERATION);
+ if (isFloat) {
+ UNIFORM_VALIDATION_ERR_COND(UNIFORM_VALIDATION_TYPE_VIOLATION_FOR_FLOATS, GL_INVALID_OPERATION);
+ } else {
+ if (isUnsigned) {
+ UNIFORM_VALIDATION_ERR_COND(UNIFORM_VALIDATION_TYPE_VIOLATION_FOR_UNSIGNED_INTS, GL_INVALID_OPERATION);
+ } else {
+ UNIFORM_VALIDATION_ERR_COND(UNIFORM_VALIDATION_TYPE_VIOLATION_FOR_INTS, GL_INVALID_OPERATION);
+ }
+ }
+}
+
+bool GLClientState::isAttribIndexUsedByProgram(int index) {
+ auto info = currentAttribValidationInfo.get_const(index);
+ if (!info) return false;
+ if (!info->validInProgram) return false;
+ return true;
}
void GLClientState::addFreshFramebuffer(GLuint name) {
@@ -1605,22 +2418,32 @@ void GLClientState::addFreshFramebuffer(GLuint name) {
props.name = name;
props.previouslyBound = false;
- props.colorAttachmenti_textures.resize(m_max_color_attachments, 0);
+ props.completenessDirty = true;
+
+ props.colorAttachmenti_textures.resize(m_hostDriverCaps.max_color_attachments, 0);
+ props.colorAttachmenti_texture_levels.resize(m_hostDriverCaps.max_color_attachments, 0);
+ props.colorAttachmenti_texture_layers.resize(m_hostDriverCaps.max_color_attachments, 0);
+
+ props.depthAttachment_texture_level = 0;
+ props.depthAttachment_texture_layer = 0;
+ props.stencilAttachment_texture_level = 0;
+ props.stencilAttachment_texture_layer = 0;
+
props.depthAttachment_texture = 0;
props.stencilAttachment_texture = 0;
props.depthstencilAttachment_texture = 0;
- props.colorAttachmenti_hasTex.resize(m_max_color_attachments, false);
+ props.colorAttachmenti_hasTex.resize(m_hostDriverCaps.max_color_attachments, false);
props.depthAttachment_hasTexObj = false;
props.stencilAttachment_hasTexObj = false;
props.depthstencilAttachment_hasTexObj = false;
- props.colorAttachmenti_rbos.resize(m_max_color_attachments, 0);
+ props.colorAttachmenti_rbos.resize(m_hostDriverCaps.max_color_attachments, 0);
props.depthAttachment_rbo = 0;
props.stencilAttachment_rbo = 0;
props.depthstencilAttachment_rbo = 0;
- props.colorAttachmenti_hasRbo.resize(m_max_color_attachments, false);
+ props.colorAttachmenti_hasRbo.resize(m_hostDriverCaps.max_color_attachments, false);
props.depthAttachment_hasRbo = false;
props.stencilAttachment_hasRbo = false;
props.depthstencilAttachment_hasRbo = false;
@@ -1729,32 +2552,46 @@ GLuint GLClientState::boundFramebuffer(GLenum target) const {
void GLClientState::attachTextureObject(
GLenum target,
- GLenum attachment, GLuint texture) {
+ GLenum attachment, GLuint texture, GLint level, GLint layer) {
+
+ bool attach = texture != 0;
int colorAttachmentIndex =
glUtilsColorAttachmentIndex(attachment);
+ boundFboProps(target).completenessDirty = true;
+
if (colorAttachmentIndex != -1) {
boundFboProps(target).colorAttachmenti_textures[colorAttachmentIndex] = texture;
- boundFboProps(target).colorAttachmenti_hasTex[colorAttachmentIndex] = true;
+ boundFboProps(target).colorAttachmenti_texture_levels[colorAttachmentIndex] = level;
+ boundFboProps(target).colorAttachmenti_texture_layers[colorAttachmentIndex] = layer;
+ boundFboProps(target).colorAttachmenti_hasTex[colorAttachmentIndex] = attach;
}
switch (attachment) {
case GL_DEPTH_ATTACHMENT:
boundFboProps(target).depthAttachment_texture = texture;
- boundFboProps(target).depthAttachment_hasTexObj = true;
+ boundFboProps(target).depthAttachment_texture_level = level;
+ boundFboProps(target).depthAttachment_texture_layer = layer;
+ boundFboProps(target).depthAttachment_hasTexObj = attach;
break;
case GL_STENCIL_ATTACHMENT:
boundFboProps(target).stencilAttachment_texture = texture;
- boundFboProps(target).stencilAttachment_hasTexObj = true;
+ boundFboProps(target).stencilAttachment_texture_level = level;
+ boundFboProps(target).stencilAttachment_texture_layer = layer;
+ boundFboProps(target).stencilAttachment_hasTexObj = attach;
break;
case GL_DEPTH_STENCIL_ATTACHMENT:
boundFboProps(target).depthstencilAttachment_texture = texture;
- boundFboProps(target).depthstencilAttachment_hasTexObj = true;
+ boundFboProps(target).depthstencilAttachment_hasTexObj = attach;
boundFboProps(target).stencilAttachment_texture = texture;
- boundFboProps(target).stencilAttachment_hasTexObj = true;
+ boundFboProps(target).stencilAttachment_hasTexObj = attach;
boundFboProps(target).depthAttachment_texture = texture;
- boundFboProps(target).depthAttachment_hasTexObj = true;
+ boundFboProps(target).depthAttachment_hasTexObj = attach;
+ boundFboProps(target).depthAttachment_texture_level = level;
+ boundFboProps(target).depthAttachment_texture_layer = layer;
+ boundFboProps(target).stencilAttachment_texture_level = level;
+ boundFboProps(target).stencilAttachment_texture_layer = layer;
break;
}
}
@@ -1786,7 +2623,7 @@ GLuint GLClientState::getFboAttachmentTextureId(GLenum target, GLenum attachment
// RBOs for FBOs////////////////////////////////////////////////////////////////
void GLClientState::detachRbo(GLuint renderbuffer) {
- for (int i = 0; i < m_max_color_attachments; i++) {
+ for (int i = 0; i < m_hostDriverCaps.max_color_attachments; i++) {
detachRboFromFbo(GL_DRAW_FRAMEBUFFER, glUtilsColorAttachmentName(i), renderbuffer);
detachRboFromFbo(GL_READ_FRAMEBUFFER, glUtilsColorAttachmentName(i), renderbuffer);
}
@@ -1805,6 +2642,8 @@ void GLClientState::detachRboFromFbo(GLenum target, GLenum attachment, GLuint re
int colorAttachmentIndex =
glUtilsColorAttachmentIndex(attachment);
+ boundFboProps(target).completenessDirty = true;
+
if (colorAttachmentIndex != -1) {
if (boundFboProps(target).colorAttachmenti_hasRbo[colorAttachmentIndex] &&
boundFboProps(target).colorAttachmenti_rbos[colorAttachmentIndex] == renderbuffer) {
@@ -1850,30 +2689,34 @@ void GLClientState::detachRboFromFbo(GLenum target, GLenum attachment, GLuint re
void GLClientState::attachRbo(GLenum target, GLenum attachment, GLuint renderbuffer) {
+ bool attach = 0 != renderbuffer;
+
int colorAttachmentIndex =
glUtilsColorAttachmentIndex(attachment);
+ boundFboProps(target).completenessDirty = true;
+
if (colorAttachmentIndex != -1) {
boundFboProps(target).colorAttachmenti_rbos[colorAttachmentIndex] = renderbuffer;
- boundFboProps(target).colorAttachmenti_hasRbo[colorAttachmentIndex] = true;
+ boundFboProps(target).colorAttachmenti_hasRbo[colorAttachmentIndex] = attach;
}
switch (attachment) {
case GL_DEPTH_ATTACHMENT:
boundFboProps(target).depthAttachment_rbo = renderbuffer;
- boundFboProps(target).depthAttachment_hasRbo = true;
+ boundFboProps(target).depthAttachment_hasRbo = attach;
break;
case GL_STENCIL_ATTACHMENT:
boundFboProps(target).stencilAttachment_rbo = renderbuffer;
- boundFboProps(target).stencilAttachment_hasRbo = true;
+ boundFboProps(target).stencilAttachment_hasRbo = attach;
break;
case GL_DEPTH_STENCIL_ATTACHMENT:
boundFboProps(target).depthAttachment_rbo = renderbuffer;
- boundFboProps(target).depthAttachment_hasRbo = true;
+ boundFboProps(target).depthAttachment_hasRbo = attach;
boundFboProps(target).stencilAttachment_rbo = renderbuffer;
- boundFboProps(target).stencilAttachment_hasRbo = true;
+ boundFboProps(target).stencilAttachment_hasRbo = attach;
boundFboProps(target).depthstencilAttachment_rbo = renderbuffer;
- boundFboProps(target).depthstencilAttachment_hasRbo = true;
+ boundFboProps(target).depthstencilAttachment_hasRbo = attach;
break;
}
}
@@ -1902,6 +2745,80 @@ GLuint GLClientState::getFboAttachmentRboId(GLenum target, GLenum attachment) co
return res;
}
+void GLClientState::setFboCompletenessDirtyForTexture(GLuint texture) {
+ std::map<GLuint, FboProps>::iterator it = mFboState.fboData.begin();
+ while (it != mFboState.fboData.end()) {
+ FboProps& props = it->second;
+ for (int i = 0; i < m_hostDriverCaps.max_color_attachments; ++i) {
+ if (props.colorAttachmenti_hasTex[i]) {
+ if (texture == props.colorAttachmenti_textures[i]) {
+ props.completenessDirty = true;
+ return;
+ }
+ }
+ }
+
+ if (props.depthAttachment_hasTexObj) {
+ if (texture == props.depthAttachment_texture) {
+ props.completenessDirty = true;
+ return;
+ }
+ }
+
+ if (props.stencilAttachment_hasTexObj) {
+ if (texture == props.stencilAttachment_texture) {
+ props.completenessDirty = true;
+ return;
+ }
+ }
+
+ if (props.depthstencilAttachment_hasTexObj) {
+ if (texture == props.depthstencilAttachment_texture) {
+ props.completenessDirty = true;
+ return;
+ }
+ }
+ ++it;
+ }
+}
+
+void GLClientState::setFboCompletenessDirtyForRbo(GLuint rbo) {
+ std::map<GLuint, FboProps>::iterator it = mFboState.fboData.begin();
+ while (it != mFboState.fboData.end()) {
+ FboProps& props = it->second;
+ for (int i = 0; i < m_hostDriverCaps.max_color_attachments; ++i) {
+ if (props.colorAttachmenti_hasTex[i]) {
+ if (rbo == props.colorAttachmenti_rbos[i]) {
+ props.completenessDirty = true;
+ return;
+ }
+ }
+ }
+
+ if (props.depthAttachment_hasTexObj) {
+ if (rbo == props.depthAttachment_rbo) {
+ props.completenessDirty = true;
+ return;
+ }
+ }
+
+ if (props.stencilAttachment_hasTexObj) {
+ if (rbo == props.stencilAttachment_rbo) {
+ props.completenessDirty = true;
+ return;
+ }
+ }
+
+ if (props.depthstencilAttachment_hasRbo) {
+ if (rbo == props.depthstencilAttachment_rbo) {
+ props.completenessDirty = true;
+ return;
+ }
+ }
+ ++it;
+ }
+}
+
bool GLClientState::attachmentHasObject(GLenum target, GLenum attachment) const {
bool res = true; // liberal
@@ -1977,22 +2894,63 @@ GLuint GLClientState::objectOfAttachment(GLenum target, GLenum attachment) const
return 0;
}
-void GLClientState::setTransformFeedbackActiveUnpaused(bool activeUnpaused) {
- m_transformFeedbackActiveUnpaused = activeUnpaused;
+void GLClientState::setTransformFeedbackActive(bool active) {
+ m_transformFeedbackActive = active;
+}
+
+void GLClientState::setTransformFeedbackUnpaused(bool unpaused) {
+ m_transformFeedbackUnpaused = unpaused;
+}
+
+void GLClientState::setTransformFeedbackVaryingsCountForLinking(uint32_t count) {
+ m_transformFeedbackVaryingsCountForLinking = count;
+}
+
+bool GLClientState::getTransformFeedbackActive() const {
+ return m_transformFeedbackActive;
+}
+
+bool GLClientState::getTransformFeedbackUnpaused() const {
+ return m_transformFeedbackUnpaused;
}
bool GLClientState::getTransformFeedbackActiveUnpaused() const {
- return m_transformFeedbackActiveUnpaused;
+ return m_transformFeedbackActive && m_transformFeedbackUnpaused;
+}
+
+uint32_t GLClientState::getTransformFeedbackVaryingsCountForLinking() const {
+ return m_transformFeedbackVaryingsCountForLinking;
}
void GLClientState::setTextureData(SharedTextureDataMap* sharedTexData) {
m_tex.textureRecs = sharedTexData;
}
+void GLClientState::setRenderbufferInfo(RenderbufferInfo* rbInfo) {
+ mRboState.rboData = rbInfo;
+}
+
+void GLClientState::setSamplerInfo(SamplerInfo* samplerInfo) {
+ mSamplerInfo = samplerInfo;
+}
+
+bool GLClientState::compressedTexImageSizeCompatible(GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize) {
+ bool error = false;
+ GLsizei compressedSize = GLESTextureUtils::getCompressedImageSize(internalformat, width, height, depth, &error);
+ if (error) return false;
+ return imageSize == compressedSize;
+}
+
void GLClientState::fromMakeCurrent() {
if (mFboState.fboData.find(0) == mFboState.fboData.end()) {
addFreshFramebuffer(0);
}
+
+ if (!samplerExists(0)) {
+ GLuint id = 0;
+ setExistence(ObjectType::Sampler, true, 1, &id);
+ }
+
FboProps& default_fb_props = mFboState.fboData[0];
default_fb_props.colorAttachmenti_hasRbo[0] = true;
default_fb_props.depthAttachment_hasRbo = true;
@@ -2001,30 +2959,30 @@ void GLClientState::fromMakeCurrent() {
}
void GLClientState::initFromCaps(
- int max_transform_feedback_separate_attribs,
- int max_uniform_buffer_bindings,
- int max_atomic_counter_buffer_bindings,
- int max_shader_storage_buffer_bindings,
- int max_vertex_attrib_bindings,
- int max_color_attachments,
- int max_draw_buffers) {
+ const HostDriverCaps& caps) {
+ m_hostDriverCaps = caps;
+
+ // Override some of them
+ m_hostDriverCaps.max_vertex_attribs = CODEC_MAX_VERTEX_ATTRIBUTES;
+ m_hostDriverCaps.max_vertex_attrib_bindings = m_hostDriverCaps.max_vertex_attribs;
- m_max_vertex_attrib_bindings = max_vertex_attrib_bindings;
+ // Derive some other settings
+ m_log2MaxTextureSize = 0;
+ uint32_t current = 1;
+ while (current < m_hostDriverCaps.max_texture_size) {
+ current = current << 1;
+ ++m_log2MaxTextureSize;
+ }
if (m_glesMajorVersion >= 3) {
- m_max_transform_feedback_separate_attribs = max_transform_feedback_separate_attribs;
- m_max_uniform_buffer_bindings = max_uniform_buffer_bindings;
- m_max_atomic_counter_buffer_bindings = max_atomic_counter_buffer_bindings;
- m_max_shader_storage_buffer_bindings = max_shader_storage_buffer_bindings;
-
- if (m_max_transform_feedback_separate_attribs)
- m_indexedTransformFeedbackBuffers.resize(m_max_transform_feedback_separate_attribs);
- if (m_max_uniform_buffer_bindings)
- m_indexedUniformBuffers.resize(m_max_uniform_buffer_bindings);
- if (m_max_atomic_counter_buffer_bindings)
- m_indexedAtomicCounterBuffers.resize(m_max_atomic_counter_buffer_bindings);
- if (m_max_shader_storage_buffer_bindings)
- m_indexedShaderStorageBuffers.resize(m_max_shader_storage_buffer_bindings);
+ if (m_hostDriverCaps.max_transform_feedback_separate_attribs)
+ m_indexedTransformFeedbackBuffers.resize(m_hostDriverCaps.max_transform_feedback_separate_attribs);
+ if (m_hostDriverCaps.max_uniform_buffer_bindings)
+ m_indexedUniformBuffers.resize(m_hostDriverCaps.max_uniform_buffer_bindings);
+ if (m_hostDriverCaps.max_atomic_counter_buffer_bindings)
+ m_indexedAtomicCounterBuffers.resize(m_hostDriverCaps.max_atomic_counter_buffer_bindings);
+ if (m_hostDriverCaps.max_shader_storage_buffer_bindings)
+ m_indexedShaderStorageBuffers.resize(m_hostDriverCaps.max_shader_storage_buffer_bindings);
BufferBinding buf0Binding;
buf0Binding.buffer = 0;
@@ -2043,10 +3001,6 @@ void GLClientState::initFromCaps(
m_indexedShaderStorageBuffers[i] = buf0Binding;
}
- m_max_color_attachments = max_color_attachments;
- m_max_draw_buffers = max_draw_buffers;
-
- addFreshRenderbuffer(0);
addFreshFramebuffer(0);
m_initialized = true;
@@ -2055,3 +3009,60 @@ void GLClientState::initFromCaps(
bool GLClientState::needsInitFromCaps() const {
return !m_initialized;
}
+
+void GLClientState::setExtensions(const std::string& extensions) {
+ if (!m_extensions_set) m_extensions = extensions;
+
+ m_has_color_buffer_float_extension =
+ hasExtension("GL_EXT_color_buffer_float");
+ m_has_color_buffer_half_float_extension =
+ hasExtension("GL_EXT_color_buffer_half_float");
+ m_extensions_set = true;
+}
+
+bool GLClientState::hasExtension(const char* ext) const {
+ return m_extensions.find(ext) != std::string::npos;
+}
+
+using android::base::guest::AutoLock;
+using android::base::guest::Lock;
+
+// A process-wide fence registry (because we can use fence sync objects across multiple contexts)
+struct FenceRegistry {
+ Lock lock;
+ PredicateMap<uint64_t, false> existence;
+
+ void onFenceCreated(GLsync sync) {
+ AutoLock scopedLock(lock);
+ uint64_t asUint64 = (uint64_t)(uintptr_t)(sync);
+ existence.add(asUint64);
+ existence.set(asUint64, true);
+ }
+
+ void onFenceDestroyed(GLsync sync) {
+ AutoLock scopedLock(lock);
+ uint64_t asUint64 = (uint64_t)(uintptr_t)(sync);
+ existence.remove(asUint64);
+ }
+
+ bool exists(GLsync sync) {
+ AutoLock scopedLock(lock);
+ uint64_t asUint64 = (uint64_t)(uintptr_t)(sync);
+ return existence.get(asUint64);
+ }
+};
+
+static FenceRegistry sFenceRegistry;
+
+void GLClientState::onFenceCreated(GLsync sync) {
+ sFenceRegistry.onFenceCreated(sync);
+}
+
+void GLClientState::onFenceDestroyed(GLsync sync) {
+ sFenceRegistry.onFenceDestroyed(sync);
+}
+
+bool GLClientState::fenceExists(GLsync sync) {
+ return sFenceRegistry.exists(sync);
+}
+
diff --git a/shared/OpenglCodecCommon/GLClientState.h b/shared/OpenglCodecCommon/GLClientState.h
index b7f56559..6beeb962 100644
--- a/shared/OpenglCodecCommon/GLClientState.h
+++ b/shared/OpenglCodecCommon/GLClientState.h
@@ -22,6 +22,10 @@
#define GL_APIENTRYP
#endif
+#ifdef GFXSTREAM
+#include "StateTrackingSupport.h"
+#endif
+
#include "TextureSharedData.h"
#include <GLES/gl.h>
@@ -37,6 +41,36 @@
#include <vector>
#include <map>
#include <set>
+#include <string>
+
+// Caps of host driver that make it easy to validate stuff
+struct HostDriverCaps {
+ // ES 2
+ int max_vertex_attribs;
+ int max_combined_texture_image_units;
+ int max_color_attachments;
+
+ int max_texture_size;
+ int max_texture_size_cube_map;
+ int max_renderbuffer_size;
+
+ // ES 3.0
+ int max_draw_buffers;
+
+ int ubo_offset_alignment;
+ int max_uniform_buffer_bindings;
+ int max_transform_feedback_separate_attribs;
+
+ int max_texture_size_3d;
+ int max_array_texture_layers;
+
+ // ES 3.1
+ int max_atomic_counter_buffer_bindings;
+ int max_shader_storage_buffer_bindings;
+ int max_vertex_attrib_bindings;
+ int max_vertex_attrib_stride;
+ int ssbo_offset_alignment;
+};
// Tracking framebuffer objects:
// which framebuffer is bound,
@@ -45,7 +79,17 @@
struct FboProps {
GLuint name;
bool previouslyBound;
+ bool completenessDirty;
+ GLenum cachedCompleteness;
std::vector<GLuint> colorAttachmenti_textures;
+ std::vector<GLint> colorAttachmenti_texture_levels;
+ std::vector<GLint> colorAttachmenti_texture_layers;
+
+ GLint depthAttachment_texture_level;
+ GLint depthAttachment_texture_layer;
+ GLint stencilAttachment_texture_level;
+ GLint stencilAttachment_texture_layer;
+
GLuint depthAttachment_texture;
GLuint stencilAttachment_texture;
GLuint depthstencilAttachment_texture;
@@ -66,15 +110,6 @@ struct FboProps {
bool depthstencilAttachment_hasRbo;
};
-// Same for Rbo's
-struct RboProps {
- GLenum target;
- GLuint name;
- GLenum format;
- GLsizei multisamples;
- bool previouslyBound;
-};
-
// Enum for describing whether a framebuffer attachment
// is a texture or renderbuffer.
enum FboAttachmentType {
@@ -88,15 +123,27 @@ struct FboFormatInfo {
FboAttachmentType type;
GLenum rb_format;
GLsizei rb_multisamples;
+ bool rb_external;
GLint tex_internalformat;
GLenum tex_format;
GLenum tex_type;
GLsizei tex_multisamples;
+ GLint tex_level;
+ GLint tex_layer;
+ bool tex_external;
};
class GLClientState {
public:
+ // TODO: Unify everything in here
+ typedef enum {
+ Buffer,
+ TransformFeedback,
+ Sampler,
+ Query,
+ } ObjectType;
+
typedef enum {
VERTEX_LOCATION = 0,
NORMAL_LOCATION = 1,
@@ -199,7 +246,7 @@ public:
GLClientState();
GLClientState(int majorVersion, int minorVersion);
~GLClientState();
- int nLocations() { return m_nLocations; }
+ int nLocations() { return CODEC_MAX_VERTEX_ATTRIBUTES; }
const PixelStoreState *pixelStoreState() { return &m_pixelStore; }
int setPixelStore(GLenum param, GLint value);
GLuint currentVertexArrayObject() const { return m_currVaoState.vaoId(); }
@@ -230,22 +277,52 @@ public:
int getLocation(GLenum loc);
void setActiveTexture(int texUnit) {m_activeTexture = texUnit; };
int getActiveTexture() const { return m_activeTexture; }
- void setMaxVertexAttribs(int val) {
- m_maxVertexAttribs = val;
- m_maxVertexAttribsDirty = false;
- }
void addBuffer(GLuint id);
void removeBuffer(GLuint id);
bool bufferIdExists(GLuint id) const;
void unBindBuffer(GLuint id);
+ void setBufferHostMapDirty(GLuint id, bool dirty);
+ bool isBufferHostMapDirty(GLuint id) const;
+
+ void setExistence(ObjectType type, bool exists, GLsizei count, const GLuint* ids);
+ bool queryExistence(ObjectType type, GLuint id) const;
+ bool samplerExists(GLuint id) const;
+ bool tryBind(GLenum target, GLuint id);
+ bool isBoundTargetValid(GLenum target);
+ bool isQueryBound(GLenum target);
+ bool isQueryObjectActive(GLuint id);
+ void setLastQueryTarget(GLenum target, GLuint id);
+ GLenum getLastQueryTarget(GLuint id);
+
+ static void onFenceCreated(GLsync sync);
+ static void onFenceDestroyed(GLsync sync);
+ static bool fenceExists(GLsync sync);
+
+ void setBoundPixelPackBufferDirtyForHostMap();
+ void setBoundTransformFeedbackBuffersDirtyForHostMap();
+ void setBoundShaderStorageBuffersDirtyForHostMap();
+ void setBoundAtomicCounterBuffersDirtyForHostMap();
+
int bindBuffer(GLenum target, GLuint id);
void bindIndexedBuffer(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size, GLintptr stride, GLintptr effectiveStride);
int getMaxIndexedBufferBindings(GLenum target) const;
bool isNonIndexedBindNoOp(GLenum target, GLuint buffer);
bool isIndexedBindNoOp(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size, GLintptr stride, GLintptr effectiveStride);
+ int getMaxTextureSize() const;
+ int getMaxTextureSize3D() const;
+ int getMaxTextureSizeCubeMap() const;
+ int getLog2MaxTextureSize() const;
+
+ void postDraw();
+ void postReadPixels();
+ void postDispatchCompute();
+
+ bool shouldSkipHostMapBuffer(GLenum target);
+ void onHostMappedBuffer(GLenum target);
+
int getBuffer(GLenum target);
GLuint getLastEncodedBufferBind(GLenum target);
void setLastEncodedBufferBind(GLenum target, GLuint id);
@@ -313,7 +390,7 @@ public:
// glDisable(GL_TEXTURE_(2D|EXTERNAL_OES))
void disableTextureTarget(GLenum target);
- void bindSampler(GLuint unit, GLuint sampler);
+ bool bindSampler(GLuint unit, GLuint sampler);
bool isSamplerBindNoOp(GLuint unit, GLuint sampler);
void onDeleteSamplers(GLsizei n, const GLuint* samplers);
@@ -338,6 +415,15 @@ public:
// Return the texture currently bound to GL_TEXTURE_(2D|EXTERNAL_OES).
GLuint getBoundTexture(GLenum target) const;
+ // Return bound framebuffer for target
+ GLuint getBoundFramebuffer(GLenum target) const;
+
+ // Check framebuffer completeness
+ GLenum checkFramebufferCompleteness(GLenum target);
+ // |currentSamples|: threads through the current sample count of attachments so far,
+ // for validating consistent number of samples across attachments
+ GLenum checkFramebufferAttachmentCompleteness(GLenum target, GLenum attachment, int* currentSamples) const;
+
// Other publicly-visible texture queries
GLenum queryTexLastBoundTarget(GLuint name) const;
GLenum queryTexFormat(GLuint name) const;
@@ -364,12 +450,14 @@ public:
void setBoundTextureInternalFormat(GLenum target, GLint format);
void setBoundTextureFormat(GLenum target, GLenum format);
void setBoundTextureType(GLenum target, GLenum type);
- void setBoundTextureDims(GLenum target, GLsizei level, GLsizei width, GLsizei height, GLsizei depth);
+ void setBoundTextureDims(GLenum target, GLenum cubetarget, GLsizei level, GLsizei width, GLsizei height, GLsizei depth);
void setBoundTextureSamples(GLenum target, GLsizei samples);
+ void addTextureCubeMapImage(GLenum stateTarget, GLenum cubeTarget);
// glTexStorage2D disallows any change in texture format after it is set for a particular texture.
void setBoundTextureImmutableFormat(GLenum target);
bool isBoundTextureImmutableFormat(GLenum target) const;
+ bool isBoundTextureComplete(GLenum target) const;
// glDeleteTextures(...)
// Remove references to the to-be-deleted textures.
@@ -383,6 +471,8 @@ public:
GLuint boundRenderbuffer() const;
void setBoundRenderbufferFormat(GLenum format);
void setBoundRenderbufferSamples(GLsizei samples);
+ void setBoundRenderbufferDimensions(GLsizei width, GLsizei height);
+ void setBoundRenderbufferEGLImageBacked();
// Frame buffer objects
void addFramebuffers(GLsizei n, GLuint* framebuffers);
@@ -394,7 +484,7 @@ public:
GLuint boundFramebuffer(GLenum target) const;
// Texture object -> FBO
- void attachTextureObject(GLenum target, GLenum attachment, GLuint texture);
+ void attachTextureObject(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
GLuint getFboAttachmentTextureId(GLenum target, GLenum attachment) const;
// RBO -> FBO
@@ -407,11 +497,24 @@ public:
bool attachmentHasObject(GLenum target, GLenum attachment) const;
GLuint objectOfAttachment(GLenum target, GLenum attachment) const;
+ // Dirty FBO completeness
+ void setFboCompletenessDirtyForTexture(GLuint texture);
+ void setFboCompletenessDirtyForRbo(GLuint rbo_name);
+
// Transform feedback state
- void setTransformFeedbackActiveUnpaused(bool activeUnpaused);
+ void setTransformFeedbackActive(bool active);
+ void setTransformFeedbackUnpaused(bool unpaused);
+ void setTransformFeedbackVaryingsCountForLinking(uint32_t count);
+ bool getTransformFeedbackActive() const;
+ bool getTransformFeedbackUnpaused() const;
bool getTransformFeedbackActiveUnpaused() const;
+ uint32_t getTransformFeedbackVaryingsCountForLinking() const;
void setTextureData(SharedTextureDataMap* sharedTexData);
+ void setRenderbufferInfo(RenderbufferInfo* rbInfo);
+ void setSamplerInfo(SamplerInfo* samplerInfo);
+
+ bool compressedTexImageSizeCompatible(GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize);
// set eglsurface property on default framebuffer
// if coming from eglMakeCurrent
void fromMakeCurrent();
@@ -420,14 +523,10 @@ public:
// accurate values for indexed buffers
// and # render targets.
void initFromCaps(
- int max_transform_feedback_separate_attribs,
- int max_uniform_buffer_bindings,
- int max_atomic_counter_buffer_bindings,
- int max_shader_storage_buffer_bindings,
- int max_vertex_attrib_bindings,
- int max_color_attachments,
- int max_draw_buffers);
+ const HostDriverCaps& caps);
bool needsInitFromCaps() const;
+ void setExtensions(const std::string& extensions);
+ bool hasExtension(const char* ext) const;
// Queries the format backing the current framebuffer.
// Type differs depending on whether the attachment
@@ -441,12 +540,52 @@ public:
GLenum attachment) const;
int getMaxColorAttachments() const;
int getMaxDrawBuffers() const;
+
+ // Uniform/attribute validation info
+ UniformValidationInfo currentUniformValidationInfo;
+ AttribValidationInfo currentAttribValidationInfo;;
+
+ // Uniform validation api
+ void validateUniform(bool isFloat, bool isUnsigned, GLint columns, GLint rows, GLint location, GLsizei count, GLenum* err);
+ // Attrib validation
+ bool isAttribIndexUsedByProgram(int attribIndex);
+
private:
void init();
bool m_initialized;
PixelStoreState m_pixelStore;
+#ifdef GFXSTREAM
+ using DirtyMap = PredicateMap<uint32_t, true>;
+
+ ExistenceMap mBufferIds;
+ ExistenceMap mTransformFeedbackIds;
+ SamplerInfo* mSamplerInfo;
+ ExistenceMap mQueryIds;
+ LastQueryTargetInfo mLastQueryTargets;
+
+ // Bound query target validity and tracking
+ struct BoundTargetInfo {
+ GLuint id;
+ bool valid;
+ };
+
+ // Transform feedback
+ BoundTargetInfo mBoundTransformFeedbackValidity;
+
+ // Queries
+ // GL_ANY_SAMPLES_PASSED
+ BoundTargetInfo mBoundQueryValidity_AnySamplesPassed;
+ // GL_ANY_SAMPLES_PASSED_CONSERVATIVE
+ BoundTargetInfo mBoundQueryValidity_AnySamplesPassedConservative;
+ // GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+ BoundTargetInfo mBoundQueryValidity_TransformFeedbackPrimitivesWritten;
+
+ // Dirty maps
+ DirtyMap mHostMappedBufferDirty;
+#else
std::set<GLuint> mBufferIds;
+#endif
// GL_ARRAY_BUFFER_BINDING is separate from VAO state
GLuint m_arrayBuffer;
@@ -475,23 +614,23 @@ private:
GLuint m_drawIndirectBuffer;
GLuint m_shaderStorageBuffer;
- bool m_transformFeedbackActiveUnpaused;
+ bool m_transformFeedbackActive;
+ bool m_transformFeedbackUnpaused;
+ uint32_t m_transformFeedbackVaryingsCountForLinking;
- int m_max_transform_feedback_separate_attribs;
- int m_max_uniform_buffer_bindings;
- int m_max_atomic_counter_buffer_bindings;
- int m_max_shader_storage_buffer_bindings;
- int m_max_vertex_attrib_bindings;
+ HostDriverCaps m_hostDriverCaps;
+ bool m_extensions_set;
+ std::string m_extensions;
+ bool m_has_color_buffer_float_extension;
+ bool m_has_color_buffer_half_float_extension;
std::vector<BufferBinding> m_indexedTransformFeedbackBuffers;
std::vector<BufferBinding> m_indexedUniformBuffers;
std::vector<BufferBinding> m_indexedAtomicCounterBuffers;
std::vector<BufferBinding> m_indexedShaderStorageBuffers;
+ int m_log2MaxTextureSize;
int m_glesMajorVersion;
int m_glesMinorVersion;
- int m_maxVertexAttribs;
- bool m_maxVertexAttribsDirty;
- int m_nLocations;
int m_activeTexture;
GLint m_currentProgram;
GLint m_currentShaderProgram;
@@ -546,19 +685,14 @@ private:
GLenum copyTexImageNeededTarget(GLenum target, GLint level,
GLenum internalformat);
- int m_max_color_attachments;
- int m_max_draw_buffers;
struct RboState {
GLuint boundRenderbuffer;
- size_t boundRenderbufferIndex;
- std::vector<RboProps> rboData;
+ // Connects to share group.
+ // Expected that share group lifetime outlives this context.
+ RenderbufferInfo* rboData;
};
RboState mRboState;
void addFreshRenderbuffer(GLuint name);
- void setBoundRenderbufferIndex();
- size_t getRboIndex(GLuint name) const;
- RboProps& boundRboProps();
- const RboProps& boundRboProps_const() const;
struct FboState {
GLuint boundDrawFramebuffer;
@@ -576,6 +710,9 @@ private:
// Querying framebuffer format
GLenum queryRboFormat(GLuint name) const;
GLsizei queryRboSamples(GLuint name) const;
+ GLsizei queryRboWidth(GLuint name) const;
+ GLsizei queryRboHeight(GLuint name) const;
+ bool queryRboEGLImageBacked(GLuint name) const;
GLenum queryTexType(GLuint name) const;
GLsizei queryTexSamples(GLuint name) const;
@@ -584,6 +721,13 @@ private:
TextureRec* getTextureRec(GLuint id) const;
public:
+ bool isTexture(GLuint name) const;
+ bool isTextureWithStorage(GLuint name) const;
+ bool isTextureWithTarget(GLuint name) const;
+ bool isTextureCubeMap(GLuint name) const;
+ bool isRenderbuffer(GLuint name) const;
+ bool isRenderbufferThatWasBound(GLuint name) const;
+
void getClientStatePointer(GLenum pname, GLvoid** params);
template <class T>
@@ -815,12 +959,8 @@ public:
break;
}
case GL_MAX_VERTEX_ATTRIBS: {
- if (m_maxVertexAttribsDirty) {
- isClientStateParam = false;
- } else {
- *out = m_maxVertexAttribs;
- isClientStateParam = true;
- }
+ *out = CODEC_MAX_VERTEX_ATTRIBUTES;
+ isClientStateParam = true;
break;
}
}
diff --git a/shared/OpenglCodecCommon/GLESTextureUtils.cpp b/shared/OpenglCodecCommon/GLESTextureUtils.cpp
index cedcda86..8b4c0c2f 100644
--- a/shared/OpenglCodecCommon/GLESTextureUtils.cpp
+++ b/shared/OpenglCodecCommon/GLESTextureUtils.cpp
@@ -1,6 +1,8 @@
#include "GLESTextureUtils.h"
#include "glUtils.h"
+#include "etc.h"
+#include "astc-codec.h"
#if PLATFORM_SDK_VERSION < 26
#include <cutils/log.h>
@@ -8,6 +10,36 @@
#include <log/log.h>
#endif
+#define ASTC_FORMATS_LIST(EXPAND_MACRO) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_4x4_KHR, astc_codec::FootprintType::k4x4, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_5x4_KHR, astc_codec::FootprintType::k5x4, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_5x5_KHR, astc_codec::FootprintType::k5x5, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_6x5_KHR, astc_codec::FootprintType::k6x5, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_6x6_KHR, astc_codec::FootprintType::k6x6, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_8x5_KHR, astc_codec::FootprintType::k8x5, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_8x6_KHR, astc_codec::FootprintType::k8x6, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_8x8_KHR, astc_codec::FootprintType::k8x8, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_10x5_KHR, astc_codec::FootprintType::k10x5, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_10x6_KHR, astc_codec::FootprintType::k10x6, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_10x8_KHR, astc_codec::FootprintType::k10x8, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_10x10_KHR, astc_codec::FootprintType::k10x10, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_12x10_KHR, astc_codec::FootprintType::k12x10, false) \
+ EXPAND_MACRO(GL_COMPRESSED_RGBA_ASTC_12x12_KHR, astc_codec::FootprintType::k12x12, false) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, astc_codec::FootprintType::k4x4, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, astc_codec::FootprintType::k5x4, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, astc_codec::FootprintType::k5x5, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, astc_codec::FootprintType::k6x5, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, astc_codec::FootprintType::k6x6, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, astc_codec::FootprintType::k8x5, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, astc_codec::FootprintType::k8x6, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, astc_codec::FootprintType::k8x8, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, astc_codec::FootprintType::k10x5, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, astc_codec::FootprintType::k10x6, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, astc_codec::FootprintType::k10x8, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, astc_codec::FootprintType::k10x10, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, astc_codec::FootprintType::k12x10, true) \
+ EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, astc_codec::FootprintType::k12x12, true) \
+
namespace GLESTextureUtils {
// Based on computations in
@@ -332,6 +364,8 @@ void computePackingOffsets3D(
int* packingPixelImageSize,
int* packingTotalImageSize) {
+ (void)depth;
+
int widthTotal = (packRowLength == 0) ? width : packRowLength;
int totalRowSize = computePitch(widthTotal, format, type, packAlignment);
int pixelsOnlyRowSize = computePitch(width, format, type, packAlignment);
@@ -352,4 +386,184 @@ void computePackingOffsets3D(
if (packingTotalImageSize) *packingTotalImageSize = totalImageSize;
}
+bool isEtcFormat(GLenum internalformat) {
+ switch (internalformat) {
+ case GL_ETC1_RGB8_OES:
+ case GL_COMPRESSED_RGB8_ETC2:
+ case GL_COMPRESSED_SRGB8_ETC2:
+ case GL_COMPRESSED_RGBA8_ETC2_EAC:
+ case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
+ case GL_COMPRESSED_R11_EAC:
+ case GL_COMPRESSED_SIGNED_R11_EAC:
+ case GL_COMPRESSED_RG11_EAC:
+ case GL_COMPRESSED_SIGNED_RG11_EAC:
+ case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ return true;
+ }
+ return false;
+}
+
+bool isEtc2Format(GLenum internalformat) {
+ return internalformat != GL_ETC1_RGB8_OES &&
+ isEtcFormat(internalformat);
+}
+
+ETC2ImageFormat getEtcFormat(GLenum internalformat) {
+ ETC2ImageFormat etcFormat = EtcRGB8;
+ switch (internalformat) {
+ case GL_COMPRESSED_RGB8_ETC2:
+ case GL_ETC1_RGB8_OES:
+ break;
+ case GL_COMPRESSED_RGBA8_ETC2_EAC:
+ etcFormat = EtcRGBA8;
+ break;
+ case GL_COMPRESSED_SRGB8_ETC2:
+ break;
+ case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
+ etcFormat = EtcRGBA8;
+ break;
+ case GL_COMPRESSED_R11_EAC:
+ etcFormat = EtcR11;
+ break;
+ case GL_COMPRESSED_SIGNED_R11_EAC:
+ etcFormat = EtcSignedR11;
+ break;
+ case GL_COMPRESSED_RG11_EAC:
+ etcFormat = EtcRG11;
+ break;
+ case GL_COMPRESSED_SIGNED_RG11_EAC:
+ etcFormat = EtcSignedRG11;
+ break;
+ case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ etcFormat = EtcRGB8A1;
+ break;
+ case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ etcFormat = EtcRGB8A1;
+ break;
+ }
+ return etcFormat;
+}
+
+bool isAstcFormat(GLenum internalformat) {
+ switch (internalformat) {
+#define ASTC_FORMAT(typeName, footprintType, srgbValue) \
+ case typeName:
+
+ ASTC_FORMATS_LIST(ASTC_FORMAT)
+#undef ASTC_FORMAT
+ return true;
+ default:
+ return false;
+ }
+}
+
+void getAstcFormatInfo(GLenum internalformat,
+ astc_codec::FootprintType* footprint,
+ bool* srgb) {
+ switch (internalformat) {
+#define ASTC_FORMAT(typeName, footprintType, srgbValue) \
+ case typeName: \
+ *footprint = footprintType; *srgb = srgbValue; break; \
+
+ ASTC_FORMATS_LIST(ASTC_FORMAT)
+#undef ASTC_FORMAT
+ default:
+ ALOGE("%s: invalid astc format: 0x%x\n", __func__, internalformat);
+ abort();
+ }
+}
+
+int getAstcFootprintWidth(astc_codec::FootprintType footprint) {
+ switch (footprint) {
+ case astc_codec::FootprintType::k4x4: return 4;
+ case astc_codec::FootprintType::k5x4: return 5;
+ case astc_codec::FootprintType::k5x5: return 5;
+ case astc_codec::FootprintType::k6x5: return 6;
+ case astc_codec::FootprintType::k6x6: return 6;
+ case astc_codec::FootprintType::k8x5: return 8;
+ case astc_codec::FootprintType::k8x6: return 8;
+ case astc_codec::FootprintType::k10x5: return 10;
+ case astc_codec::FootprintType::k10x6: return 10;
+ case astc_codec::FootprintType::k8x8: return 8;
+ case astc_codec::FootprintType::k10x8: return 10;
+ case astc_codec::FootprintType::k10x10: return 10;
+ case astc_codec::FootprintType::k12x10: return 12;
+ case astc_codec::FootprintType::k12x12: return 12;
+ default:
+ ALOGE("%s: invalid astc footprint: 0x%x\n", __func__, footprint);
+ abort();
+ }
+}
+
+int getAstcFootprintHeight(astc_codec::FootprintType footprint) {
+ switch (footprint) {
+ case astc_codec::FootprintType::k4x4: return 4;
+ case astc_codec::FootprintType::k5x4: return 4;
+ case astc_codec::FootprintType::k5x5: return 5;
+ case astc_codec::FootprintType::k6x5: return 5;
+ case astc_codec::FootprintType::k6x6: return 6;
+ case astc_codec::FootprintType::k8x5: return 5;
+ case astc_codec::FootprintType::k8x6: return 6;
+ case astc_codec::FootprintType::k10x5: return 5;
+ case astc_codec::FootprintType::k10x6: return 6;
+ case astc_codec::FootprintType::k8x8: return 8;
+ case astc_codec::FootprintType::k10x8: return 8;
+ case astc_codec::FootprintType::k10x10: return 10;
+ case astc_codec::FootprintType::k12x10: return 10;
+ case astc_codec::FootprintType::k12x12: return 12;
+ default:
+ ALOGE("%s: invalid astc footprint: 0x%x\n", __func__, footprint);
+ abort();
+ }
+}
+
+GLsizei getAstcCompressedSize(GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, bool* error) {
+ bool srgb;
+ astc_codec::FootprintType footprintType;
+ getAstcFormatInfo(internalformat, &footprintType, &srgb);
+
+ int fpWidth = getAstcFootprintWidth(footprintType);
+ int fpHeight = getAstcFootprintHeight(footprintType);
+
+ if (width == 0 || height == 0 || depth == 0) {
+ *error = true;
+ return 0;
+ }
+
+ const size_t blocks_wide = (width + fpWidth - 1) / fpWidth;
+ if (blocks_wide == 0) {
+ *error = true;
+ return 0;
+ }
+
+ const size_t expected_block_count =
+ ((width + fpWidth - 1) / fpWidth) *
+ ((height + fpHeight - 1) / fpHeight);
+
+ const size_t kPhysBlockSizeBytes = 16;
+
+ GLsizei res = kPhysBlockSizeBytes * expected_block_count * depth;
+
+ return res;
+}
+
+GLsizei getCompressedImageSize(GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, bool* error) {
+ if (isEtcFormat(internalformat)) {
+ GLsizei total = 0;
+ GLsizei one = etc_get_encoded_data_size(getEtcFormat(internalformat), width, height);
+ for (GLsizei i = 0; i < depth; ++i) {
+ total += one;
+ }
+ return total;
+ }
+
+ if (isAstcFormat(internalformat)) {
+ return getAstcCompressedSize(internalformat, width, height, depth, error);
+ }
+
+ ALOGE("%s: Unknown compressed internal format: 0x%x\n", __func__, internalformat);
+ abort();
+}
+
} // namespace GLESTextureUtils
diff --git a/shared/OpenglCodecCommon/GLESTextureUtils.h b/shared/OpenglCodecCommon/GLESTextureUtils.h
index 1d26b3a5..c2948bd5 100644
--- a/shared/OpenglCodecCommon/GLESTextureUtils.h
+++ b/shared/OpenglCodecCommon/GLESTextureUtils.h
@@ -71,5 +71,12 @@ void computePackingOffsets3D(
int* packingPixelImageSize,
int* packingTotalImageSize);
+// For calculating compressed sizes of ETC/EAC formatted images in the guest.
+GLsizei getCompressedImageSize(GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, bool* error);
+
+// Format queries
+bool isEtc2Format(GLenum internalformat);
+bool isAstcFormat(GLenum internalformat);
+
} // namespace GLESTextureUtils
#endif
diff --git a/shared/OpenglCodecCommon/GLSharedGroup.cpp b/shared/OpenglCodecCommon/GLSharedGroup.cpp
index 5273e4c6..e2ed36cb 100755
--- a/shared/OpenglCodecCommon/GLSharedGroup.cpp
+++ b/shared/OpenglCodecCommon/GLSharedGroup.cpp
@@ -17,6 +17,7 @@
#include "GLSharedGroup.h"
#include "KeyedVectorUtils.h"
+#include "glUtils.h"
/**** BufferData ****/
@@ -36,17 +37,26 @@ BufferData::BufferData(GLsizeiptr size, const void* data) :
/**** ProgramData ****/
ProgramData::ProgramData() : m_numIndexes(0),
+ m_numAttributes(0),
m_initialized(false) {
m_Indexes = NULL;
+ m_attribIndexes = NULL;
+ m_refcount = 1;
+ m_linkStatus = 0;
+ m_activeUniformBlockCount = 0;
+ m_transformFeedbackVaryingsCount = 0;
}
-void ProgramData::initProgramData(GLuint numIndexes) {
+void ProgramData::initProgramData(GLuint numIndexes, GLuint numAttributes) {
m_initialized = true;
m_numIndexes = numIndexes;
+ m_numAttributes = numAttributes;
delete [] m_Indexes;
+ delete [] m_attribIndexes;
m_Indexes = new IndexInfo[numIndexes];
+ m_attribIndexes = new AttribInfo[m_numAttributes];
}
bool ProgramData::isInitialized() {
@@ -56,6 +66,7 @@ bool ProgramData::isInitialized() {
ProgramData::~ProgramData() {
delete [] m_Indexes;
+ delete [] m_attribIndexes;
m_Indexes = NULL;
}
@@ -73,6 +84,16 @@ void ProgramData::setIndexInfo(
m_Indexes[index].samplerValue = 0;
}
+void ProgramData::setAttribInfo(
+ GLuint index, GLint attribLoc, GLint size, GLenum type) {
+
+ if (index >= m_numAttributes) return;
+
+ m_attribIndexes[index].attribLoc = attribLoc;
+ m_attribIndexes[index].size = size;
+ m_attribIndexes[index].type = type;
+}
+
void ProgramData::setIndexFlags(GLuint index, GLuint flags) {
if (index >= m_numIndexes) return;
@@ -104,6 +125,16 @@ GLenum ProgramData::getTypeForLocation(GLint location) {
return 0;
}
+bool ProgramData::isValidUniformLocation(GLint location) {
+ for (GLuint i = 0; i < m_numIndexes; ++i) {
+ if (location >= m_Indexes[i].base &&
+ location < m_Indexes[i].base + m_Indexes[i].size)
+ return true;
+ }
+
+ return false;
+}
+
GLint ProgramData::getNextSamplerUniform(
GLint index, GLint* val, GLenum* target) {
@@ -154,15 +185,18 @@ bool ProgramData::setSamplerUniform(GLint appLoc, GLint val, GLenum* target) {
return false;
}
-bool ProgramData::attachShader(GLuint shader) {
+bool ProgramData::attachShader(GLuint shader, GLenum shaderType) {
size_t n = m_shaders.size();
for (size_t i = 0; i < n; i++) {
if (m_shaders[i] == shader) {
return false;
+ } else if (m_shaderTypes[i] == shaderType) {
+ return false;
}
}
m_shaders.push_back(shader);
+ m_shaderTypes.push_back(shaderType);
return true;
}
@@ -172,6 +206,7 @@ bool ProgramData::detachShader(GLuint shader) {
for (size_t i = 0; i < n; i++) {
if (m_shaders[i] == shader) {
m_shaders.erase(m_shaders.begin() + i);
+ m_shaderTypes.erase(m_shaderTypes.begin() + i);
return true;
}
}
@@ -179,6 +214,55 @@ bool ProgramData::detachShader(GLuint shader) {
return false;
}
+UniformValidationInfo ProgramData::compileValidationInfo(bool* error) const {
+ UniformValidationInfo res;
+ if (!m_Indexes) {
+ *error = true;
+ return res;
+ }
+
+ for (GLuint i = 0; i < m_numIndexes; ++i) {
+ if (m_Indexes[i].base < 0) continue;
+
+ UniformLocationInfo info = {
+ .valid = true,
+ .columns = getColumnsOfType(m_Indexes[i].type),
+ .rows = getRowsOfType(m_Indexes[i].type),
+ .isSampler = isSamplerType(m_Indexes[i].type),
+ .isInt = isIntegerType(m_Indexes[i].type),
+ .isArray = m_Indexes[i].size > 1,
+ .isUnsigned = isUnsignedIntType(m_Indexes[i].type),
+ .isBool = isBoolType(m_Indexes[i].type),
+ };
+ for (GLuint j = 0; j < m_Indexes[i].size; ++j) {
+ res.add(m_Indexes[i].base + j, info);
+ }
+ }
+
+ return res;
+}
+
+AttribValidationInfo ProgramData::compileAttribValidationInfo(bool* error) const {
+ AttribValidationInfo res;
+ if (!m_attribIndexes) {
+ *error = true;
+ return res;
+ }
+
+ for (GLuint i = 0; i < m_numAttributes; ++i) {
+ if (m_attribIndexes[i].attribLoc < 0) continue;
+
+ AttribIndexInfo info = {
+ .validInProgram = true,
+ };
+
+ for (GLuint j = 0; j < getAttributeCountOfType(m_attribIndexes[i].type) * m_attribIndexes[i].size ; ++j) {
+ res.add(m_attribIndexes[i].attribLoc + j, info);
+ }
+ }
+
+ return res;
+}
/***** GLSharedGroup ****/
GLSharedGroup::GLSharedGroup() { }
@@ -212,6 +296,14 @@ SharedTextureDataMap* GLSharedGroup::getTextureData() {
return &m_textureRecs;
}
+RenderbufferInfo* GLSharedGroup::getRenderbufferInfo() {
+ return &m_renderbufferInfo;
+}
+
+SamplerInfo* GLSharedGroup::getSamplerInfo() {
+ return &m_samplerInfo;
+}
+
void GLSharedGroup::addBufferData(GLuint bufferId, GLsizeiptr size, const void* data) {
android::AutoMutex _lock(m_lock);
@@ -302,16 +394,37 @@ void GLSharedGroup::addProgramData(GLuint program) {
m_programs[program] = new ProgramData();
}
-void GLSharedGroup::initProgramData(GLuint program, GLuint numIndexes) {
+void GLSharedGroup::initProgramData(GLuint program, GLuint numIndexes, GLuint numAttributes) {
android::AutoMutex _lock(m_lock);
ProgramData* pData = findObjectOrDefault(m_programs, program);
if (pData) {
- pData->initProgramData(numIndexes);
+ pData->initProgramData(numIndexes, numAttributes);
}
}
+void GLSharedGroup::refProgramData(GLuint program) {
+ android::AutoMutex _lock(m_lock);
+ ProgramData* pData = findObjectOrDefault(m_programs, program);
+ if (!pData) return;
+ pData->incRef();
+}
+
+void GLSharedGroup::onUseProgram(GLuint previous, GLuint next) {
+ if (previous == next) return;
+
+ android::AutoMutex _lock(m_lock);
+
+ if (previous) {
+ deleteProgramDataLocked(previous);
+ }
+
+ ProgramData* pData = findObjectOrDefault(m_programs, next);
+ if (!pData) return;
+ pData->incRef();
+}
+
bool GLSharedGroup::isProgramInitialized(GLuint program) {
android::AutoMutex _lock(m_lock);
@@ -337,14 +450,23 @@ bool GLSharedGroup::isProgramInitialized(GLuint program) {
}
void GLSharedGroup::deleteProgramData(GLuint program) {
-
android::AutoMutex _lock(m_lock);
+ deleteProgramDataLocked(program);
+}
- ProgramData* pData = findObjectOrDefault(m_programs, program);
+void GLSharedGroup::deleteProgramDataLocked(GLuint program) {
- if (pData) delete pData;
+ ProgramData* pData = findObjectOrDefault(m_programs, program);
- m_programs.erase(program);
+ if (pData && pData->decRef()) {
+ size_t numShaders = pData->getNumShaders();
+ for (size_t i = 0; i < numShaders; ++i) {
+ // changes the first one
+ detachShaderLocked(program, pData->getShader(0));
+ }
+ delete pData;
+ m_programs.erase(program);
+ }
if (m_shaderProgramIdMap.find(program) ==
m_shaderProgramIdMap.end()) return;
@@ -360,31 +482,43 @@ void GLSharedGroup::deleteProgramData(GLuint program) {
}
// No such thing for separable shader programs.
-void GLSharedGroup::attachShader(GLuint program, GLuint shader) {
-
+bool GLSharedGroup::attachShader(GLuint program, GLuint shader) {
android::AutoMutex _lock(m_lock);
ProgramData* pData = findObjectOrDefault(m_programs, program);
ShaderData* sData = findObjectOrDefault(m_shaders, shader);
+ bool res = false;
+
if (pData && sData) {
- if (pData->attachShader(shader)) {
+ res = pData->attachShader(shader, sData->shaderType);
+ if (res) {
refShaderDataLocked(shader);
}
}
-}
-void GLSharedGroup::detachShader(GLuint program, GLuint shader) {
+ return res;
+}
+bool GLSharedGroup::detachShader(GLuint program, GLuint shader) {
android::AutoMutex _lock(m_lock);
+ return detachShaderLocked(program, shader);
+}
+bool GLSharedGroup::detachShaderLocked(GLuint program, GLuint shader) {
ProgramData* pData = findObjectOrDefault(m_programs, program);
ShaderData* sData = findObjectOrDefault(m_shaders, shader);
+
+ bool res = false;
+
if (pData && sData) {
- if (pData->detachShader(shader)) {
+ res = pData->detachShader(shader);
+ if (res) {
unrefShaderDataLocked(shader);
}
}
+
+ return res;
}
// Not needed/used for separate shader programs.
@@ -422,6 +556,19 @@ void GLSharedGroup::setProgramIndexInfo(
}
}
+void GLSharedGroup::setProgramAttribInfo(
+ GLuint program, GLuint index, GLint attribLoc,
+ GLint size, GLenum type, const char* name) {
+
+ android::AutoMutex _lock(m_lock);
+
+ ProgramData* pData = getProgramDataLocked(program);
+
+ if (pData) {
+ pData->setAttribInfo(index,attribLoc,size,type);
+ }
+}
+
GLenum GLSharedGroup::getProgramUniformType(GLuint program, GLint location) {
android::AutoMutex _lock(m_lock);
@@ -509,6 +656,19 @@ bool GLSharedGroup::setSamplerUniform(
return false;
}
+bool GLSharedGroup::isProgramUniformLocationValid(GLuint program, GLint location) {
+ if (location < 0) return false;
+
+ android::AutoMutex _lock(m_lock);
+
+ ProgramData* pData =
+ findObjectOrDefault(m_programs, program);
+
+ if (!pData) return false;
+
+ return pData->isValidUniformLocation(location);
+}
+
bool GLSharedGroup::isShader(GLuint shader) {
android::AutoMutex _lock(m_lock);
@@ -518,7 +678,7 @@ bool GLSharedGroup::isShader(GLuint shader) {
return pData != NULL;
}
-bool GLSharedGroup::addShaderData(GLuint shader) {
+bool GLSharedGroup::addShaderData(GLuint shader, GLenum shaderType) {
android::AutoMutex _lock(m_lock);
@@ -527,6 +687,7 @@ bool GLSharedGroup::addShaderData(GLuint shader) {
if (data) {
m_shaders[shader] = data;
data->refcount = 1;
+ data->shaderType = shaderType;
}
return data != NULL;
@@ -562,6 +723,21 @@ void GLSharedGroup::unrefShaderDataLocked(GLuint shaderId) {
}
}
+ProgramData* GLSharedGroup::getProgramDataLocked(GLuint program) {
+ // Check the space of normal programs, then separable ones
+ ProgramData* pData = findObjectOrDefault(m_programs, program);
+
+ if (pData) return pData;
+
+ std::map<GLuint, uint32_t>::const_iterator it =
+ m_shaderProgramIdMap.find(program);
+ if (it == m_shaderProgramIdMap.end()) return NULL;
+
+ ShaderProgramData* spData = findObjectOrDefault(m_shaderPrograms, it->second);
+ if (!spData) return NULL;
+ return &spData->programData;
+}
+
uint32_t GLSharedGroup::addNewShaderProgramData() {
android::AutoMutex _lock(m_lock);
@@ -569,8 +745,6 @@ uint32_t GLSharedGroup::addNewShaderProgramData() {
ShaderProgramData* data = new ShaderProgramData;
uint32_t currId = m_shaderProgramId;
- ALOGD("%s: new data %p id %u", __FUNCTION__, data, currId);
-
m_shaderPrograms[currId] = data;
m_shaderProgramId++;
return currId;
@@ -590,8 +764,6 @@ ShaderProgramData* GLSharedGroup::getShaderProgramDataById(uint32_t id) {
ShaderProgramData* res = findObjectOrDefault(m_shaderPrograms, id);
- ALOGD("%s: id=%u res=%p", __FUNCTION__, id, res);
-
return res;
}
@@ -630,9 +802,9 @@ void GLSharedGroup::deleteShaderProgramData(GLuint shaderProgramName) {
m_shaderProgramIdMap.erase(shaderProgramName);
}
-void GLSharedGroup::initShaderProgramData(GLuint shaderProgram, GLuint numIndices) {
+void GLSharedGroup::initShaderProgramData(GLuint shaderProgram, GLuint numIndices, GLuint numAttributes) {
ShaderProgramData* spData = getShaderProgramData(shaderProgram);
- spData->programData.initProgramData(numIndices);
+ spData->programData.initProgramData(numIndices, numAttributes);
}
void GLSharedGroup::setShaderProgramIndexInfo(
@@ -662,3 +834,101 @@ void GLSharedGroup::setShaderProgramIndexInfo(
}
}
}
+
+UniformValidationInfo GLSharedGroup::getUniformValidationInfo(GLuint program) {
+ UniformValidationInfo res;
+
+ android::AutoMutex _lock(m_lock);
+
+ ProgramData* pData =
+ getProgramDataLocked(program);
+
+ if (!pData) return res;
+
+ bool error; (void)error;
+ return pData->compileValidationInfo(&error);
+}
+
+AttribValidationInfo GLSharedGroup::getAttribValidationInfo(GLuint program) {
+ AttribValidationInfo res;
+
+ android::AutoMutex _lock(m_lock);
+
+ ProgramData* pData =
+ getProgramDataLocked(program);
+
+ if (!pData) return res;
+
+ bool error; (void)error;
+ return pData->compileAttribValidationInfo(&error);
+}
+
+void GLSharedGroup::setProgramLinkStatus(GLuint program, GLint linkStatus) {
+ android::AutoMutex _lock(m_lock);
+ ProgramData* pData =
+ getProgramDataLocked(program);
+ if (!pData) return;
+ pData->setLinkStatus(linkStatus);
+}
+
+GLint GLSharedGroup::getProgramLinkStatus(GLuint program) {
+ android::AutoMutex _lock(m_lock);
+ ProgramData* pData = getProgramDataLocked(program);
+ if (!pData) return 0;
+ return pData->getLinkStatus();
+}
+
+void GLSharedGroup::setActiveUniformBlockCountForProgram(GLuint program, GLint count) {
+ android::AutoMutex _lock(m_lock);
+ ProgramData* pData =
+ getProgramDataLocked(program);
+
+ if (!pData) return;
+
+ pData->setActiveUniformBlockCount(count);
+}
+
+GLint GLSharedGroup::getActiveUniformBlockCount(GLuint program) {
+ android::AutoMutex _lock(m_lock);
+ ProgramData* pData =
+ getProgramDataLocked(program);
+
+ if (!pData) return 0;
+
+ return pData->getActiveUniformBlockCount();
+}
+
+void GLSharedGroup::setTransformFeedbackVaryingsCountForProgram(GLuint program, GLint count) {
+ android::AutoMutex _lock(m_lock);
+ ProgramData* pData = getProgramDataLocked(program);
+ if (!pData) return;
+ pData->setTransformFeedbackVaryingsCount(count);
+}
+
+GLint GLSharedGroup::getTransformFeedbackVaryingsCountForProgram(GLuint program) {
+ android::AutoMutex _lock(m_lock);
+ ProgramData* pData = getProgramDataLocked(program);
+ if (!pData) return 0;
+ return pData->getTransformFeedbackVaryingsCount();
+}
+
+int GLSharedGroup::getActiveUniformsCountForProgram(GLuint program) {
+ android::AutoMutex _lock(m_lock);
+ ProgramData* pData =
+ getProgramDataLocked(program);
+
+ if (!pData) return 0;
+
+ return pData->getActiveUniformsCount();
+}
+
+int GLSharedGroup::getActiveAttributesCountForProgram(GLuint program) {
+ android::AutoMutex _lock(m_lock);
+ ProgramData* pData =
+ getProgramDataLocked(program);
+
+ if (!pData) return 0;
+
+ return pData->getActiveAttributesCount();
+}
+
diff --git a/shared/OpenglCodecCommon/GLSharedGroup.h b/shared/OpenglCodecCommon/GLSharedGroup.h
index bbee27a2..807a0065 100755
--- a/shared/OpenglCodecCommon/GLSharedGroup.h
+++ b/shared/OpenglCodecCommon/GLSharedGroup.h
@@ -40,6 +40,7 @@
#include "auto_goldfish_dma_context.h"
#include "IndexRangeCache.h"
#include "SmartPtr.h"
+#include "StateTrackingSupport.h"
struct BufferData {
BufferData();
@@ -75,11 +76,26 @@ private:
GLint samplerValue; // only set for sampler uniforms
} IndexInfo;
+ typedef struct _AttribInfo {
+ GLint attribLoc;
+ GLint size;
+ GLenum type;
+ } AttribInfo;
+
GLuint m_numIndexes;
+ GLuint m_numAttributes;
IndexInfo* m_Indexes;
+ AttribInfo* m_attribIndexes;
bool m_initialized;
std::vector<GLuint> m_shaders;
+ std::vector<GLenum> m_shaderTypes;
+
+ uint32_t m_refcount;
+ GLint m_linkStatus;
+
+ uint32_t m_activeUniformBlockCount;
+ uint32_t m_transformFeedbackVaryingsCount;;
public:
enum {
@@ -87,21 +103,58 @@ public:
};
ProgramData();
- void initProgramData(GLuint numIndexes);
+ void initProgramData(GLuint numIndexes, GLuint numAttributes);
bool isInitialized();
virtual ~ProgramData();
void setIndexInfo(GLuint index, GLint base, GLint size, GLenum type);
+ void setAttribInfo(GLuint index, GLint base, GLint size, GLenum type);
void setIndexFlags(GLuint index, GLuint flags);
GLuint getIndexForLocation(GLint location);
GLenum getTypeForLocation(GLint location);
+ bool isValidUniformLocation(GLint location);
GLint getNextSamplerUniform(GLint index, GLint* val, GLenum* target);
bool setSamplerUniform(GLint appLoc, GLint val, GLenum* target);
- bool attachShader(GLuint shader);
+ bool attachShader(GLuint shader, GLenum shaderType);
bool detachShader(GLuint shader);
size_t getNumShaders() const { return m_shaders.size(); }
GLuint getShader(size_t i) const { return m_shaders[i]; }
+
+ void incRef() { ++m_refcount; }
+ bool decRef() {
+ --m_refcount;
+ return 0 == m_refcount;
+ }
+
+ UniformValidationInfo compileValidationInfo(bool* error) const;
+ AttribValidationInfo compileAttribValidationInfo(bool* error) const;
+ void setLinkStatus(GLint status) { m_linkStatus = status; }
+ GLint getLinkStatus() { return m_linkStatus; }
+
+ void setActiveUniformBlockCount(uint32_t count) {
+ m_activeUniformBlockCount = count;
+ }
+
+ uint32_t getActiveUniformBlockCount() const {
+ return m_activeUniformBlockCount;
+ }
+
+ void setTransformFeedbackVaryingsCount(uint32_t count) {
+ m_transformFeedbackVaryingsCount = count;
+ }
+
+ uint32_t getTransformFeedbackVaryingsCount() const {
+ return m_transformFeedbackVaryingsCount;
+ }
+
+ GLuint getActiveUniformsCount() const {
+ return m_numIndexes;
+ }
+
+ GLuint getActiveAttributesCount() const {
+ return m_numAttributes;
+ }
};
struct ShaderData {
@@ -109,6 +162,7 @@ struct ShaderData {
StringList samplerExternalNames;
int refcount;
std::vector<std::string> sources;
+ GLenum shaderType;
};
class ShaderProgramData {
@@ -125,6 +179,8 @@ private:
std::map<GLuint, ShaderData*> m_shaders;
std::map<uint32_t, ShaderProgramData*> m_shaderPrograms;
std::map<GLuint, uint32_t> m_shaderProgramIdMap;
+ RenderbufferInfo m_renderbufferInfo;
+ SamplerInfo m_samplerInfo;
mutable android::Mutex m_lock;
@@ -133,12 +189,15 @@ private:
uint32_t m_shaderProgramId;
+ ProgramData* getProgramDataLocked(GLuint program);
public:
GLSharedGroup();
~GLSharedGroup();
bool isShaderOrProgramObject(GLuint obj);
BufferData * getBufferData(GLuint bufferId);
SharedTextureDataMap* getTextureData();
+ RenderbufferInfo* getRenderbufferInfo();
+ SamplerInfo* getSamplerInfo();
void addBufferData(GLuint bufferId, GLsizeiptr size, const void* data);
void updateBufferData(GLuint bufferId, GLsizeiptr size, const void* data);
void setBufferUsage(GLuint bufferId, GLenum usage);
@@ -151,17 +210,23 @@ public:
bool isProgram(GLuint program);
bool isProgramInitialized(GLuint program);
void addProgramData(GLuint program);
- void initProgramData(GLuint program, GLuint numIndexes);
- void attachShader(GLuint program, GLuint shader);
- void detachShader(GLuint program, GLuint shader);
+ void initProgramData(GLuint program, GLuint numIndexes, GLuint numAttributes);
+ void refProgramData(GLuint program);
+ void onUseProgram(GLuint previous, GLuint next);
+ bool attachShader(GLuint program, GLuint shader);
+ bool detachShader(GLuint program, GLuint shader);
+ bool detachShaderLocked(GLuint program, GLuint shader);
void deleteProgramData(GLuint program);
+ void deleteProgramDataLocked(GLuint program);
void setProgramIndexInfo(GLuint program, GLuint index, GLint base, GLint size, GLenum type, const char* name);
+ void setProgramAttribInfo(GLuint program, GLuint index, GLint attribLoc, GLint size, GLenum type, const char* name);
GLenum getProgramUniformType(GLuint program, GLint location);
GLint getNextSamplerUniform(GLuint program, GLint index, GLint* val, GLenum* target) const;
bool setSamplerUniform(GLuint program, GLint appLoc, GLint val, GLenum* target);
+ bool isProgramUniformLocationValid(GLuint program, GLint location);
bool isShader(GLuint shader);
- bool addShaderData(GLuint shader);
+ bool addShaderData(GLuint shader, GLenum shaderType);
// caller must hold a reference to the shader as long as it holds the pointer
ShaderData* getShaderData(GLuint shader);
void unrefShaderData(GLuint shader);
@@ -173,8 +238,24 @@ public:
ShaderProgramData* getShaderProgramData(GLuint shaderProgramName);
void deleteShaderProgramDataById(uint32_t id);
void deleteShaderProgramData(GLuint shaderProgramName);
- void initShaderProgramData(GLuint shaderProgram, GLuint numIndices);
+ void initShaderProgramData(GLuint shaderProgram, GLuint numIndices, GLuint numAttributes);
void setShaderProgramIndexInfo(GLuint shaderProgram, GLuint index, GLint base, GLint size, GLenum type, const char* name);
+
+ // Validation info
+ UniformValidationInfo getUniformValidationInfo(GLuint program);
+ AttribValidationInfo getAttribValidationInfo(GLuint program);
+
+ void setProgramLinkStatus(GLuint program, GLint linkStatus);
+ GLint getProgramLinkStatus(GLuint program);
+
+ void setActiveUniformBlockCountForProgram(GLuint program, GLint numBlocks);
+ GLint getActiveUniformBlockCount(GLuint program);
+
+ void setTransformFeedbackVaryingsCountForProgram(GLuint program, GLint count);
+ GLint getTransformFeedbackVaryingsCountForProgram(GLuint program);
+
+ int getActiveUniformsCountForProgram(GLuint program);
+ int getActiveAttributesCountForProgram(GLuint program);
};
typedef SmartPtr<GLSharedGroup> GLSharedGroupPtr;
diff --git a/shared/OpenglCodecCommon/StateTrackingSupport.h b/shared/OpenglCodecCommon/StateTrackingSupport.h
new file mode 100644
index 00000000..b742c131
--- /dev/null
+++ b/shared/OpenglCodecCommon/StateTrackingSupport.h
@@ -0,0 +1,245 @@
+/*
+* 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 _STATE_TRACKING_SUPPORT_H_
+#define _STATE_TRACKING_SUPPORT_H_
+
+#include "android/base/containers/HybridComponentManager.h"
+#include "android/base/synchronization/AndroidLock.h"
+
+#include <GLES2/gl2.h>
+
+template <class IndexType, bool initialIsTrue>
+class PredicateMap {
+public:
+ static const uint64_t kBitsPerEntry = 64;
+ void add(IndexType objId) {
+ static const uint64_t kNone = 0ULL;
+ static const uint64_t kAll = ~kNone;
+ IndexType index = objId / kBitsPerEntry;
+ if (!mStorage.get_const(index)) {
+ mStorage.add(index, initialIsTrue ? kAll : kNone);
+ }
+ }
+
+ void remove(IndexType objId) {
+ if (initialIsTrue) {
+ set(objId, true);
+ } else {
+ set(objId, false);
+ }
+ }
+
+ void set(IndexType objId, bool predicate) {
+ IndexType index = objId / kBitsPerEntry;
+
+ if (!mStorage.get_const(index)) return;
+
+ uint64_t* current = mStorage.get(index);
+
+ uint64_t flag = 1ULL << (objId % kBitsPerEntry);
+
+ if (predicate) {
+ *current = *current | flag;
+ } else {
+ *current = *current & (~flag);
+ }
+ }
+
+ bool get(IndexType objId) const {
+ IndexType index = objId / kBitsPerEntry;
+
+ const uint64_t* current = mStorage.get_const(index);
+
+ if (!current) return initialIsTrue;
+
+ uint64_t flag = 1ULL << (objId % kBitsPerEntry);
+ return (flag & (*current)) != 0;
+ }
+
+private:
+ using Storage = android::base::HybridComponentManager<10000, IndexType, uint64_t>;
+ Storage mStorage;
+};
+
+// Structures for fast validation of uniforms/attribs.
+
+struct UniformLocationInfo {
+ bool valid = false;
+ uint32_t columns;
+ uint32_t rows;
+ bool isSampler;
+ bool isInt;
+ bool isArray;
+ bool isUnsigned;
+ bool isBool;
+};
+
+struct AttribIndexInfo {
+ bool validInProgram = false;
+};
+
+using UniformValidationInfo = android::base::HybridComponentManager<1000, uint32_t, UniformLocationInfo>;
+using AttribValidationInfo = android::base::HybridComponentManager<16, uint32_t, AttribIndexInfo>;
+
+using LastQueryTargetInfo = android::base::HybridComponentManager<1000, uint32_t, uint32_t>;
+
+using ExistenceMap = PredicateMap<uint32_t, false>;
+
+struct RboProps {
+ GLenum format;
+ GLsizei multisamples;
+ GLsizei width;
+ GLsizei height;
+ bool previouslyBound;
+ uint32_t refcount;
+ bool boundEGLImage;
+};
+
+struct SamplerProps {
+ uint32_t refcount;
+};
+
+template <class T>
+class ScopedLockedView {
+public:
+ ScopedLockedView(T* info) : mInfo(info) {
+ mInfo->lock();
+ }
+ virtual ~ScopedLockedView() {
+ mInfo->unlock();
+ }
+protected:
+ T* mInfo;
+
+ T* internalInfo() { return mInfo; }
+ const T* internalInfo_const() const { return mInfo; }
+};
+
+struct RenderbufferInfo {
+ android::base::guest::Lock infoLock;
+ android::base::HybridComponentManager<1000, uint32_t, RboProps> component;
+
+ void lock() { infoLock.lock(); }
+ void unlock() { infoLock.unlock(); }
+
+ class ScopedView : public ScopedLockedView<RenderbufferInfo> {
+ public:
+ ScopedView(RenderbufferInfo* info) : ScopedLockedView<RenderbufferInfo>(info) { }
+ bool hasRbo(GLuint id) const {
+ const RboProps* info = internalInfo_const()->component.get_const(id);
+ if (!info) return false;
+ return 0 != info->refcount;
+ }
+ virtual ~ScopedView() = default;
+ RboProps* get(GLuint id) {
+ return internalInfo()->component.get(id);
+ }
+ const RboProps* get_const(GLuint id) {
+ return internalInfo_const()->component.get_const(id);
+ }
+ void addFresh(GLuint id) {
+ RboProps props;
+ props.format = GL_NONE;
+ props.multisamples = 0;
+ props.width = 0;
+ props.height = 0;
+ props.previouslyBound = false;
+ props.refcount = 1;
+ props.boundEGLImage = false;
+ internalInfo()->component.add(id, props);
+ }
+ RboProps* bind(GLuint id) {
+ if (!hasRbo(id)) addFresh(id);
+ ref(id);
+ RboProps* res = get(id);
+ res->previouslyBound = true;
+ return res;
+ }
+ void ref(GLuint id) {
+ RboProps* props = get(id);
+ if (!props) return;
+ ++props->refcount;
+ }
+ bool unref(GLuint id) {
+ RboProps* props = get(id);
+ if (!props) return false;
+ if (!props->refcount) return false;
+ --props->refcount;
+ bool gone = 0 == props->refcount;
+ if (gone) {
+ props->format = 0;
+ props->multisamples = 0;
+ props->width = 0;
+ props->height = 0;
+ props->previouslyBound = false;
+ props->boundEGLImage = false;
+ }
+ return gone;
+ }
+ };
+};
+
+struct SamplerInfo {
+ android::base::guest::Lock infoLock;
+ android::base::HybridComponentManager<1000, uint32_t, SamplerProps> component;
+
+ void lock() { infoLock.lock(); }
+ void unlock() { infoLock.unlock(); }
+
+ class ScopedView : public ScopedLockedView<SamplerInfo> {
+ public:
+ ScopedView(SamplerInfo* info) : ScopedLockedView<SamplerInfo>(info) { }
+ bool samplerExists(GLuint id) const {
+ const SamplerProps* info = internalInfo_const()->component.get_const(id);
+ if (!info) return false;
+ return 0 != info->refcount;
+ }
+ virtual ~ScopedView() = default;
+ SamplerProps* get(GLuint id) {
+ return internalInfo()->component.get(id);
+ }
+ const SamplerProps* get_const(GLuint id) {
+ return internalInfo_const()->component.get_const(id);
+ }
+ void addFresh(GLuint id) {
+ SamplerProps props;
+ props.refcount = 1;
+ internalInfo()->component.add(id, props);
+ }
+ SamplerProps* bind(GLuint id) {
+ if (!samplerExists(id)) return 0;
+ ref(id);
+ SamplerProps* res = get(id);
+ return res;
+ }
+ void ref(GLuint id) {
+ SamplerProps* props = get(id);
+ if (!props) return;
+ ++props->refcount;
+ }
+ bool unref(GLuint id) {
+ SamplerProps* props = get(id);
+ if (!props) return false;
+ if (!props->refcount) return false;
+ --props->refcount;
+ bool gone = 0 == props->refcount;
+ return gone;
+ }
+ };
+};
+
+
+#endif
diff --git a/shared/OpenglCodecCommon/TextureSharedData.h b/shared/OpenglCodecCommon/TextureSharedData.h
index 1372f7a0..96827efe 100644
--- a/shared/OpenglCodecCommon/TextureSharedData.h
+++ b/shared/OpenglCodecCommon/TextureSharedData.h
@@ -35,6 +35,13 @@ struct TextureRec {
TextureDims* dims;
bool immutable;
bool boundEGLImage;
+ bool hasStorage;
+ bool hasCubeNegX;
+ bool hasCubePosX;
+ bool hasCubeNegY;
+ bool hasCubePosY;
+ bool hasCubeNegZ;
+ bool hasCubePosZ;
};
typedef std::map<GLuint, TextureRec*> SharedTextureDataMap;
diff --git a/shared/OpenglCodecCommon/astc-codec.h b/shared/OpenglCodecCommon/astc-codec.h
new file mode 100644
index 00000000..e15fe47d
--- /dev/null
+++ b/shared/OpenglCodecCommon/astc-codec.h
@@ -0,0 +1,47 @@
+// Copyright 2018 Google LLC
+//
+// 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
+//
+// https://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 ASTC_CODEC_ASTC_CODEC_H_
+#define ASTC_CODEC_ASTC_CODEC_H_
+
+namespace astc_codec {
+
+// These are the valid ASTC footprints according to the specification in
+// Section C.2.7.
+enum FootprintType {
+ k4x4,
+ k5x4,
+ k5x5,
+ k6x5,
+ k6x6,
+ k8x5,
+ k8x6,
+ k10x5,
+ k10x6,
+ k8x8,
+ k10x8,
+ k10x10,
+ k12x10,
+ k12x12,
+
+ kCount
+};
+
+struct AstcFootprint {
+ AstcFootprint(int width, int height);
+};
+
+} // namespace astc_codec
+
+#endif // ASTC_CODEC_ASTC_CODEC_H_
diff --git a/shared/OpenglCodecCommon/etc.cpp b/shared/OpenglCodecCommon/etc.cpp
new file mode 100644
index 00000000..dea32282
--- /dev/null
+++ b/shared/OpenglCodecCommon/etc.cpp
@@ -0,0 +1,1031 @@
+// Copyright 2009 Google Inc.
+//
+// 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.
+
+#include "etc.h"
+
+#include <algorithm>
+#include <assert.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdio.h>
+
+typedef uint16_t etc1_uint16;
+
+/* From http://www.khronos.org/registry/gles/extensions/OES/OES_compressed_ETC1_RGB8_texture.txt
+
+ The number of bits that represent a 4x4 texel block is 64 bits if
+ <internalformat> is given by ETC1_RGB8_OES.
+
+ The data for a block is a number of bytes,
+
+ {q0, q1, q2, q3, q4, q5, q6, q7}
+
+ where byte q0 is located at the lowest memory address and q7 at
+ the highest. The 64 bits specifying the block is then represented
+ by the following 64 bit integer:
+
+ int64bit = 256*(256*(256*(256*(256*(256*(256*q0+q1)+q2)+q3)+q4)+q5)+q6)+q7;
+
+ ETC1_RGB8_OES:
+
+ a) bit layout in bits 63 through 32 if diffbit = 0
+
+ 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
+ -----------------------------------------------
+ | base col1 | base col2 | base col1 | base col2 |
+ | R1 (4bits)| R2 (4bits)| G1 (4bits)| G2 (4bits)|
+ -----------------------------------------------
+
+ 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
+ ---------------------------------------------------
+ | base col1 | base col2 | table | table |diff|flip|
+ | B1 (4bits)| B2 (4bits)| cw 1 | cw 2 |bit |bit |
+ ---------------------------------------------------
+
+
+ b) bit layout in bits 63 through 32 if diffbit = 1
+
+ 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
+ -----------------------------------------------
+ | base col1 | dcol 2 | base col1 | dcol 2 |
+ | R1' (5 bits) | dR2 | G1' (5 bits) | dG2 |
+ -----------------------------------------------
+
+ 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32
+ ---------------------------------------------------
+ | base col 1 | dcol 2 | table | table |diff|flip|
+ | B1' (5 bits) | dB2 | cw 1 | cw 2 |bit |bit |
+ ---------------------------------------------------
+
+
+ c) bit layout in bits 31 through 0 (in both cases)
+
+ 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
+ -----------------------------------------------
+ | most significant pixel index bits |
+ | p| o| n| m| l| k| j| i| h| g| f| e| d| c| b| a|
+ -----------------------------------------------
+
+ 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+ --------------------------------------------------
+ | least significant pixel index bits |
+ | p| o| n| m| l| k| j| i| h| g| f| e| d| c | b | a |
+ --------------------------------------------------
+
+
+ Add table 3.17.2: Intensity modifier sets for ETC1 compressed textures:
+
+ table codeword modifier table
+ ------------------ ----------------------
+ 0 -8 -2 2 8
+ 1 -17 -5 5 17
+ 2 -29 -9 9 29
+ 3 -42 -13 13 42
+ 4 -60 -18 18 60
+ 5 -80 -24 24 80
+ 6 -106 -33 33 106
+ 7 -183 -47 47 183
+
+
+ Add table 3.17.3 Mapping from pixel index values to modifier values for
+ ETC1 compressed textures:
+
+ pixel index value
+ ---------------
+ msb lsb resulting modifier value
+ ----- ----- -------------------------
+ 1 1 -b (large negative value)
+ 1 0 -a (small negative value)
+ 0 0 a (small positive value)
+ 0 1 b (large positive value)
+
+ ETC2 codec:
+ from https://www.khronos.org/registry/gles/specs/3.0/es_spec_3.0.4.pdf
+ page 289
+ */
+
+static const int kRGBModifierTable[] = {
+/* 0 */2, 8, -2, -8,
+/* 1 */5, 17, -5, -17,
+/* 2 */9, 29, -9, -29,
+/* 3 */13, 42, -13, -42,
+/* 4 */18, 60, -18, -60,
+/* 5 */24, 80, -24, -80,
+/* 6 */33, 106, -33, -106,
+/* 7 */47, 183, -47, -183 };
+
+static const int kRGBOpaqueModifierTable[] = {
+/* 0 */0, 8, 0, -8,
+/* 1 */0, 17, 0, -17,
+/* 2 */0, 29, 0, -29,
+/* 3 */0, 42, 0, -42,
+/* 4 */0, 60, 0, -60,
+/* 5 */0, 80, 0, -80,
+/* 6 */0, 106, 0, -106,
+/* 7 */0, 183, 0, -183 };
+
+static const int kAlphaModifierTable[] = {
+/* 0 */ -3, -6, -9, -15, 2, 5, 8, 14,
+/* 1 */ -3, -7, -10, -13, 2, 6, 9, 12,
+/* 2 */ -2, -5, -8, -13, 1, 4, 7, 12,
+/* 3 */ -2, -4, -6, -13, 1, 3, 5, 12,
+/* 4 */ -3, -6, -8, -12, 2, 5, 7, 11,
+/* 5 */ -3, -7, -9, -11, 2, 6, 8, 10,
+/* 6 */ -4, -7, -8, -11, 3, 6, 7, 10,
+/* 7 */ -3, -5, -8, -11, 2, 4, 7, 10,
+/* 8 */ -2, -6, -8, -10, 1, 5, 7, 9,
+/* 9 */ -2, -5, -8, -10, 1, 4, 7, 9,
+/* 10 */ -2, -4, -8, -10, 1, 3, 7, 9,
+/* 11 */ -2, -5, -7, -10, 1, 4, 6, 9,
+/* 12 */ -3, -4, -7, -10, 2, 3, 6, 9,
+/* 13 */ -1, -2, -3, -10, 0, 1, 2, 9,
+/* 14 */ -4, -6, -8, -9, 3, 5, 7, 8,
+/* 15 */ -3, -5, -7, -9, 2, 4, 6, 8
+};
+
+static const int kLookup[8] = { 0, 1, 2, 3, -4, -3, -2, -1 };
+
+static inline int clamp(int x) {
+ return (x >= 0 ? (x < 255 ? x : 255) : 0);
+}
+
+static inline int clamp2047(int x) {
+ return (x >= 0 ? (x < 2047 ? x : 2047) : 0);
+}
+
+static inline int clampSigned1023(int x) {
+ return (x >= -1023 ? (x < 1023 ? x : 1023) : -1023);
+}
+
+static
+inline int convert4To8(int b) {
+ int c = b & 0xf;
+ return (c << 4) | c;
+}
+
+static
+inline int convert5To8(int b) {
+ int c = b & 0x1f;
+ return (c << 3) | (c >> 2);
+}
+
+static
+inline int convert6To8(int b) {
+ int c = b & 0x3f;
+ return (c << 2) | (c >> 4);
+}
+
+static
+inline int convert7To8(int b) {
+ int c = b & 0x7f;
+ return (c << 1) | (c >> 6);
+}
+
+static
+inline int divideBy255(int d) {
+ return (d + 128 + (d >> 8)) >> 8;
+}
+
+static
+inline int convert8To4(int b) {
+ int c = b & 0xff;
+ return divideBy255(c * 15);
+}
+
+static
+inline int convert8To5(int b) {
+ int c = b & 0xff;
+ return divideBy255(c * 31);
+}
+
+static
+inline int convertDiff(int base, int diff) {
+ return convert5To8((0x1f & base) + kLookup[0x7 & diff]);
+}
+static
+int isOverflowed(int base, int diff) {
+ int val = (0x1f & base) + kLookup[0x7 & diff];
+ return val < 0 || val >= 32;
+}
+
+static
+void decode_subblock(etc1_byte* pOut, int r, int g, int b, const int* table,
+ etc1_uint32 low, bool second, bool flipped, bool isPunchthroughAlpha,
+ bool opaque) {
+ int baseX = 0;
+ int baseY = 0;
+ int channels = isPunchthroughAlpha ? 4 : 3;
+ if (second) {
+ if (flipped) {
+ baseY = 2;
+ } else {
+ baseX = 2;
+ }
+ }
+ for (int i = 0; i < 8; i++) {
+ int x, y;
+ if (flipped) {
+ x = baseX + (i >> 1);
+ y = baseY + (i & 1);
+ } else {
+ x = baseX + (i >> 2);
+ y = baseY + (i & 3);
+ }
+ int k = y + (x * 4);
+ int msb = ((low >> (k + 15)) & 2);
+ int lsb = ((low >> k) & 1);
+ etc1_byte* q = pOut + channels * (x + 4 * y);
+ if (isPunchthroughAlpha && !opaque && msb && !lsb) {
+ // rgba all 0
+ memset(q, 0, 4);
+ q += 4;
+ } else {
+ int offset = lsb | msb;
+ int delta = table[offset];
+ *q++ = clamp(r + delta);
+ *q++ = clamp(g + delta);
+ *q++ = clamp(b + delta);
+ if (isPunchthroughAlpha) {
+ *q++ = 255;
+ }
+ }
+ }
+}
+
+static void etc2_T_H_index(const int* clrTable, etc1_uint32 low,
+ bool isPunchthroughAlpha, bool opaque,
+ etc1_byte* pOut) {
+ etc1_byte* q = pOut;
+ for (int y = 0; y < 4; y++) {
+ for (int x = 0; x < 4; x++) {
+ int k = y + x * 4;
+ int msb = (low >> (k + 15)) & 2;
+ int lsb = (low >> k) & 1;
+ if (isPunchthroughAlpha && !opaque && msb && !lsb) {
+ // rgba all 0
+ memset(q, 0, 4);
+ q += 4;
+ } else {
+ int offset = lsb | msb;
+ for (int c = 0; c < 3; c++) {
+ *q++ = clrTable[offset*3 + c];
+ }
+ if (isPunchthroughAlpha) {
+ *q++ = 255;
+ }
+ }
+ }
+ }
+}
+
+// ETC2 codec:
+// from https://www.khronos.org/registry/gles/specs/3.0/es_spec_3.0.4.pdf
+// page 289
+
+static void etc2_decode_block_T(etc1_uint32 high, etc1_uint32 low,
+ bool isPunchthroughAlpha, bool opaque, etc1_byte* pOut) {
+ const int LUT[] = {3, 6, 11, 16, 23, 32, 41, 64};
+ int r1, r2, g1, g2, b1, b2;
+ r1 = convert4To8((((high >> 27) & 3) << 2) | ((high >> 24) & 3));
+ g1 = convert4To8(high >> 20);
+ b1 = convert4To8(high >> 16);
+ r2 = convert4To8(high >> 12);
+ g2 = convert4To8(high >> 8);
+ b2 = convert4To8(high >> 4);
+ // 3 bits intense modifier
+ int intenseIdx = (((high >> 2) & 3) << 1) | (high & 1);
+ int intenseMod = LUT[intenseIdx];
+ int clrTable[12];
+ clrTable[0] = r1;
+ clrTable[1] = g1;
+ clrTable[2] = b1;
+ clrTable[3] = clamp(r2 + intenseMod);
+ clrTable[4] = clamp(g2 + intenseMod);
+ clrTable[5] = clamp(b2 + intenseMod);
+ clrTable[6] = r2;
+ clrTable[7] = g2;
+ clrTable[8] = b2;
+ clrTable[9] = clamp(r2 - intenseMod);
+ clrTable[10] = clamp(g2 - intenseMod);
+ clrTable[11] = clamp(b2 - intenseMod);
+ etc2_T_H_index(clrTable, low, isPunchthroughAlpha, opaque, pOut);
+}
+
+static void etc2_decode_block_H(etc1_uint32 high, etc1_uint32 low,
+ bool isPunchthroughAlpha, bool opaque, etc1_byte* pOut) {
+ const int LUT[] = {3, 6, 11, 16, 23, 32, 41, 64};
+ int r1, r2, g1, g2, b1, b2;
+ r1 = convert4To8(high >> 27);
+ g1 = convert4To8((high >> 24) << 1 | ((high >> 20) & 1));
+ b1 = convert4To8((high >> 19) << 3 | ((high >> 15) & 7));
+ r2 = convert4To8(high >> 11);
+ g2 = convert4To8(high >> 7);
+ b2 = convert4To8(high >> 3);
+ // 3 bits intense modifier
+ int intenseIdx = high & 4;
+ intenseIdx |= (high & 1) << 1;
+ intenseIdx |= (((r1 << 16) | (g1 << 8) | b1) >= ((r2 << 16) | (g2 << 8) | b2));
+ int intenseMod = LUT[intenseIdx];
+ int clrTable[12];
+ clrTable[0] = clamp(r1 + intenseMod);
+ clrTable[1] = clamp(g1 + intenseMod);
+ clrTable[2] = clamp(b1 + intenseMod);
+ clrTable[3] = clamp(r1 - intenseMod);
+ clrTable[4] = clamp(g1 - intenseMod);
+ clrTable[5] = clamp(b1 - intenseMod);
+ clrTable[6] = clamp(r2 + intenseMod);
+ clrTable[7] = clamp(g2 + intenseMod);
+ clrTable[8] = clamp(b2 + intenseMod);
+ clrTable[9] = clamp(r2 - intenseMod);
+ clrTable[10] = clamp(g2 - intenseMod);
+ clrTable[11] = clamp(b2 - intenseMod);
+ etc2_T_H_index(clrTable, low, isPunchthroughAlpha, opaque, pOut);
+}
+
+static void etc2_decode_block_P(etc1_uint32 high, etc1_uint32 low,
+ bool isPunchthroughAlpha, etc1_byte* pOut) {
+ int ro, go, bo, rh, gh, bh, rv, gv, bv;
+ uint64_t data = high;
+ data = data << 32 | low;
+ ro = convert6To8(data >> 57);
+ go = convert7To8((data >> 56 << 6) | ((data >> 49) & 63));
+ bo = convert6To8((data >> 48 << 5)
+ | (((data >> 43) & 3 ) << 3)
+ | ((data >> 39) & 7));
+ rh = convert6To8((data >> 34 << 1) | ((data >> 32) & 1));
+ gh = convert7To8(data >> 25);
+ bh = convert6To8(data >> 19);
+ rv = convert6To8(data >> 13);
+ gv = convert7To8(data >> 6);
+ bv = convert6To8(data);
+ etc1_byte* q = pOut;
+ for (int i = 0; i < 16; i++) {
+ int y = i >> 2;
+ int x = i & 3;
+ *q++ = clamp((x * (rh - ro) + y * (rv - ro) + 4 * ro + 2) >> 2);
+ *q++ = clamp((x * (gh - go) + y * (gv - go) + 4 * go + 2) >> 2);
+ *q++ = clamp((x * (bh - bo) + y * (bv - bo) + 4 * bo + 2) >> 2);
+ if (isPunchthroughAlpha) *q++ = 255;
+ }
+}
+
+// Input is an ETC1 / ETC2 compressed version of the data.
+// Output is a 4 x 4 square of 3-byte pixels in form R, G, B
+// ETC2 codec:
+// from https://www.khronos.org/registry/gles/specs/3.0/es_spec_3.0.4.pdf
+// page 289
+
+void etc2_decode_rgb_block(const etc1_byte* pIn, bool isPunchthroughAlpha,
+ etc1_byte* pOut) {
+ etc1_uint32 high = (pIn[0] << 24) | (pIn[1] << 16) | (pIn[2] << 8) | pIn[3];
+ etc1_uint32 low = (pIn[4] << 24) | (pIn[5] << 16) | (pIn[6] << 8) | pIn[7];
+ bool opaque = (high >> 1) & 1;
+ int r1, r2, g1, g2, b1, b2;
+ if (isPunchthroughAlpha || high & 2) {
+ // differential
+ int rBase = high >> 27;
+ int gBase = high >> 19;
+ int bBase = high >> 11;
+ if (isOverflowed(rBase, high >> 24)) {
+ etc2_decode_block_T(high, low, isPunchthroughAlpha, opaque, pOut);
+ return;
+ }
+ if (isOverflowed(gBase, high >> 16)) {
+ etc2_decode_block_H(high, low, isPunchthroughAlpha, opaque, pOut);
+ return;
+ }
+ if (isOverflowed(bBase, high >> 8)) {
+ etc2_decode_block_P(high, low, isPunchthroughAlpha, pOut);
+ return;
+ }
+ r1 = convert5To8(rBase);
+ r2 = convertDiff(rBase, high >> 24);
+ g1 = convert5To8(gBase);
+ g2 = convertDiff(gBase, high >> 16);
+ b1 = convert5To8(bBase);
+ b2 = convertDiff(bBase, high >> 8);
+ } else {
+ // not differential
+ r1 = convert4To8(high >> 28);
+ r2 = convert4To8(high >> 24);
+ g1 = convert4To8(high >> 20);
+ g2 = convert4To8(high >> 16);
+ b1 = convert4To8(high >> 12);
+ b2 = convert4To8(high >> 8);
+ }
+ int tableIndexA = 7 & (high >> 5);
+ int tableIndexB = 7 & (high >> 2);
+ const int* rgbModifierTable = opaque || !isPunchthroughAlpha ?
+ kRGBModifierTable : kRGBOpaqueModifierTable;
+ const int* tableA = rgbModifierTable + tableIndexA * 4;
+ const int* tableB = rgbModifierTable + tableIndexB * 4;
+ bool flipped = (high & 1) != 0;
+ decode_subblock(pOut, r1, g1, b1, tableA, low, false, flipped,
+ isPunchthroughAlpha, opaque);
+ decode_subblock(pOut, r2, g2, b2, tableB, low, true, flipped,
+ isPunchthroughAlpha, opaque);
+}
+
+void eac_decode_single_channel_block(const etc1_byte* pIn,
+ int decodedElementBytes, bool isSigned,
+ etc1_byte* pOut) {
+ assert(decodedElementBytes == 1 || decodedElementBytes == 2 || decodedElementBytes == 4);
+ int base_codeword = isSigned ? reinterpret_cast<const char*>(pIn)[0]
+ : pIn[0];
+ if (base_codeword == -128) base_codeword = -127;
+ int multiplier = pIn[1] >> 4;
+ int tblIdx = pIn[1] & 15;
+ const int* table = kAlphaModifierTable + tblIdx * 8;
+ const etc1_byte* p = pIn + 2;
+ // position in a byte of the next 3-bit index:
+ // | a a a | b b b | c c c | d d d ...
+ // | byte | byte...
+ int bitOffset = 5;
+ for (int i = 0; i < 16; i ++) {
+ // flip x, y in output
+ int outIdx = (i % 4) * 4 + i / 4;
+ etc1_byte* q = pOut + outIdx * decodedElementBytes;
+
+ int modifier = 0;
+ if (bitOffset < 0) { // (Part of) the index is in the next byte.
+ modifier += p[0] << (-bitOffset);
+ p ++;
+ bitOffset += 8;
+ }
+ modifier += p[0] >> bitOffset;
+ modifier &= 7;
+ bitOffset -= 3; // move to the next index
+ if (bitOffset == -3) {
+ bitOffset = 5;
+ p++;
+ }
+ int modifierValue = table[modifier];
+ int decoded = base_codeword + modifierValue * multiplier;
+ if (decodedElementBytes == 1) {
+ *q = clamp(decoded);
+ } else { // decodedElementBytes == 4
+ decoded *= 8;
+ if (multiplier == 0) {
+ decoded += modifierValue;
+ }
+ if (isSigned) {
+ decoded = clampSigned1023(decoded);
+ reinterpret_cast<float*>(q)[0] = (float)decoded / 1023.0;
+ } else {
+ decoded += 4;
+ decoded = clamp2047(decoded);
+ reinterpret_cast<float*>(q)[0] = (float)decoded / 2047.0;
+ }
+ }
+ }
+}
+
+typedef struct {
+ etc1_uint32 high;
+ etc1_uint32 low;
+ etc1_uint32 score; // Lower is more accurate
+} etc_compressed;
+
+static
+inline void take_best(etc_compressed* a, const etc_compressed* b) {
+ if (a->score > b->score) {
+ *a = *b;
+ }
+}
+
+static
+void etc_average_colors_subblock(const etc1_byte* pIn, etc1_uint32 inMask,
+ etc1_byte* pColors, bool flipped, bool second) {
+ int r = 0;
+ int g = 0;
+ int b = 0;
+
+ if (flipped) {
+ int by = 0;
+ if (second) {
+ by = 2;
+ }
+ for (int y = 0; y < 2; y++) {
+ int yy = by + y;
+ for (int x = 0; x < 4; x++) {
+ int i = x + 4 * yy;
+ if (inMask & (1 << i)) {
+ const etc1_byte* p = pIn + i * 3;
+ r += *(p++);
+ g += *(p++);
+ b += *(p++);
+ }
+ }
+ }
+ } else {
+ int bx = 0;
+ if (second) {
+ bx = 2;
+ }
+ for (int y = 0; y < 4; y++) {
+ for (int x = 0; x < 2; x++) {
+ int xx = bx + x;
+ int i = xx + 4 * y;
+ if (inMask & (1 << i)) {
+ const etc1_byte* p = pIn + i * 3;
+ r += *(p++);
+ g += *(p++);
+ b += *(p++);
+ }
+ }
+ }
+ }
+ pColors[0] = (etc1_byte)((r + 4) >> 3);
+ pColors[1] = (etc1_byte)((g + 4) >> 3);
+ pColors[2] = (etc1_byte)((b + 4) >> 3);
+}
+
+static
+inline int square(int x) {
+ return x * x;
+}
+
+static etc1_uint32 chooseModifier(const etc1_byte* pBaseColors,
+ const etc1_byte* pIn, etc1_uint32 *pLow, int bitIndex,
+ const int* pModifierTable) {
+ etc1_uint32 bestScore = ~0;
+ int bestIndex = 0;
+ int pixelR = pIn[0];
+ int pixelG = pIn[1];
+ int pixelB = pIn[2];
+ int r = pBaseColors[0];
+ int g = pBaseColors[1];
+ int b = pBaseColors[2];
+ for (int i = 0; i < 4; i++) {
+ int modifier = pModifierTable[i];
+ int decodedG = clamp(g + modifier);
+ etc1_uint32 score = (etc1_uint32) (6 * square(decodedG - pixelG));
+ if (score >= bestScore) {
+ continue;
+ }
+ int decodedR = clamp(r + modifier);
+ score += (etc1_uint32) (3 * square(decodedR - pixelR));
+ if (score >= bestScore) {
+ continue;
+ }
+ int decodedB = clamp(b + modifier);
+ score += (etc1_uint32) square(decodedB - pixelB);
+ if (score < bestScore) {
+ bestScore = score;
+ bestIndex = i;
+ }
+ }
+ etc1_uint32 lowMask = (((bestIndex >> 1) << 16) | (bestIndex & 1))
+ << bitIndex;
+ *pLow |= lowMask;
+ return bestScore;
+}
+
+static
+void etc_encode_subblock_helper(const etc1_byte* pIn, etc1_uint32 inMask,
+ etc_compressed* pCompressed, bool flipped, bool second,
+ const etc1_byte* pBaseColors, const int* pModifierTable) {
+ int score = pCompressed->score;
+ if (flipped) {
+ int by = 0;
+ if (second) {
+ by = 2;
+ }
+ for (int y = 0; y < 2; y++) {
+ int yy = by + y;
+ for (int x = 0; x < 4; x++) {
+ int i = x + 4 * yy;
+ if (inMask & (1 << i)) {
+ score += chooseModifier(pBaseColors, pIn + i * 3,
+ &pCompressed->low, yy + x * 4, pModifierTable);
+ }
+ }
+ }
+ } else {
+ int bx = 0;
+ if (second) {
+ bx = 2;
+ }
+ for (int y = 0; y < 4; y++) {
+ for (int x = 0; x < 2; x++) {
+ int xx = bx + x;
+ int i = xx + 4 * y;
+ if (inMask & (1 << i)) {
+ score += chooseModifier(pBaseColors, pIn + i * 3,
+ &pCompressed->low, y + xx * 4, pModifierTable);
+ }
+ }
+ }
+ }
+ pCompressed->score = score;
+}
+
+static bool inRange4bitSigned(int color) {
+ return color >= -4 && color <= 3;
+}
+
+static void etc_encodeBaseColors(etc1_byte* pBaseColors,
+ const etc1_byte* pColors, etc_compressed* pCompressed) {
+ int r1, g1, b1, r2, g2, b2; // 8 bit base colors for sub-blocks
+ bool differential;
+ {
+ int r51 = convert8To5(pColors[0]);
+ int g51 = convert8To5(pColors[1]);
+ int b51 = convert8To5(pColors[2]);
+ int r52 = convert8To5(pColors[3]);
+ int g52 = convert8To5(pColors[4]);
+ int b52 = convert8To5(pColors[5]);
+
+ r1 = convert5To8(r51);
+ g1 = convert5To8(g51);
+ b1 = convert5To8(b51);
+
+ int dr = r52 - r51;
+ int dg = g52 - g51;
+ int db = b52 - b51;
+
+ differential = inRange4bitSigned(dr) && inRange4bitSigned(dg)
+ && inRange4bitSigned(db);
+ if (differential) {
+ r2 = convert5To8(r51 + dr);
+ g2 = convert5To8(g51 + dg);
+ b2 = convert5To8(b51 + db);
+ pCompressed->high |= (r51 << 27) | ((7 & dr) << 24) | (g51 << 19)
+ | ((7 & dg) << 16) | (b51 << 11) | ((7 & db) << 8) | 2;
+ }
+ }
+
+ if (!differential) {
+ int r41 = convert8To4(pColors[0]);
+ int g41 = convert8To4(pColors[1]);
+ int b41 = convert8To4(pColors[2]);
+ int r42 = convert8To4(pColors[3]);
+ int g42 = convert8To4(pColors[4]);
+ int b42 = convert8To4(pColors[5]);
+ r1 = convert4To8(r41);
+ g1 = convert4To8(g41);
+ b1 = convert4To8(b41);
+ r2 = convert4To8(r42);
+ g2 = convert4To8(g42);
+ b2 = convert4To8(b42);
+ pCompressed->high |= (r41 << 28) | (r42 << 24) | (g41 << 20) | (g42
+ << 16) | (b41 << 12) | (b42 << 8);
+ }
+ pBaseColors[0] = r1;
+ pBaseColors[1] = g1;
+ pBaseColors[2] = b1;
+ pBaseColors[3] = r2;
+ pBaseColors[4] = g2;
+ pBaseColors[5] = b2;
+}
+
+static
+void etc_encode_block_helper(const etc1_byte* pIn, etc1_uint32 inMask,
+ const etc1_byte* pColors, etc_compressed* pCompressed, bool flipped) {
+ pCompressed->score = ~0;
+ pCompressed->high = (flipped ? 1 : 0);
+ pCompressed->low = 0;
+
+ etc1_byte pBaseColors[6];
+
+ etc_encodeBaseColors(pBaseColors, pColors, pCompressed);
+
+ int originalHigh = pCompressed->high;
+
+ const int* pModifierTable = kRGBModifierTable;
+ for (int i = 0; i < 8; i++, pModifierTable += 4) {
+ etc_compressed temp;
+ temp.score = 0;
+ temp.high = originalHigh | (i << 5);
+ temp.low = 0;
+ etc_encode_subblock_helper(pIn, inMask, &temp, flipped, false,
+ pBaseColors, pModifierTable);
+ take_best(pCompressed, &temp);
+ }
+ pModifierTable = kRGBModifierTable;
+ etc_compressed firstHalf = *pCompressed;
+ for (int i = 0; i < 8; i++, pModifierTable += 4) {
+ etc_compressed temp;
+ temp.score = firstHalf.score;
+ temp.high = firstHalf.high | (i << 2);
+ temp.low = firstHalf.low;
+ etc_encode_subblock_helper(pIn, inMask, &temp, flipped, true,
+ pBaseColors + 3, pModifierTable);
+ if (i == 0) {
+ *pCompressed = temp;
+ } else {
+ take_best(pCompressed, &temp);
+ }
+ }
+}
+
+static void writeBigEndian(etc1_byte* pOut, etc1_uint32 d) {
+ pOut[0] = (etc1_byte)(d >> 24);
+ pOut[1] = (etc1_byte)(d >> 16);
+ pOut[2] = (etc1_byte)(d >> 8);
+ pOut[3] = (etc1_byte) d;
+}
+
+// Input is a 4 x 4 square of 3-byte pixels in form R, G, B
+// inmask is a 16-bit mask where bit (1 << (x + y * 4)) tells whether the corresponding (x,y)
+// pixel is valid or not. Invalid pixel color values are ignored when compressing.
+// Output is an ETC1 compressed version of the data.
+
+void etc1_encode_block(const etc1_byte* pIn, etc1_uint32 inMask,
+ etc1_byte* pOut) {
+ etc1_byte colors[6];
+ etc1_byte flippedColors[6];
+ etc_average_colors_subblock(pIn, inMask, colors, false, false);
+ etc_average_colors_subblock(pIn, inMask, colors + 3, false, true);
+ etc_average_colors_subblock(pIn, inMask, flippedColors, true, false);
+ etc_average_colors_subblock(pIn, inMask, flippedColors + 3, true, true);
+
+ etc_compressed a, b;
+ etc_encode_block_helper(pIn, inMask, colors, &a, false);
+ etc_encode_block_helper(pIn, inMask, flippedColors, &b, true);
+ take_best(&a, &b);
+ writeBigEndian(pOut, a.high);
+ writeBigEndian(pOut + 4, a.low);
+}
+
+// Return the size of the encoded image data (does not include size of PKM header).
+
+etc1_uint32 etc1_get_encoded_data_size(etc1_uint32 width, etc1_uint32 height) {
+ return (((width + 3) & ~3) * ((height + 3) & ~3)) >> 1;
+}
+
+etc1_uint32 etc_get_encoded_data_size(ETC2ImageFormat format, etc1_uint32 width,
+ etc1_uint32 height) {
+ etc1_uint32 size = ((width + 3) & ~3) * ((height + 3) & ~3);
+ switch (format) {
+ case EtcRGB8:
+ case EtcRGB8A1:
+ case EtcR11:
+ case EtcSignedR11:
+ return size >> 1;
+ case EtcRG11:
+ case EtcSignedRG11:
+ case EtcRGBA8:
+ return size;
+ default:
+ assert(0);
+ return 0;
+ }
+}
+
+etc1_uint32 etc_get_decoded_pixel_size(ETC2ImageFormat format) {
+ switch (format) {
+ case EtcRGB8:
+ return 3;
+ case EtcRGBA8:
+ return 4;
+ case EtcRGB8A1:
+ case EtcR11:
+ case EtcSignedR11:
+ return 4;
+ case EtcRG11:
+ case EtcSignedRG11:
+ return 8;
+ default:
+ assert(0);
+ return 0;
+ }
+}
+
+// Encode an entire image.
+// pIn - pointer to the image data. Formatted such that the Red component of
+// pixel (x,y) is at pIn + pixelSize * x + stride * y + redOffset;
+// pOut - pointer to encoded data. Must be large enough to store entire encoded image.
+
+int etc1_encode_image(const etc1_byte* pIn, etc1_uint32 width, etc1_uint32 height,
+ etc1_uint32 pixelSize, etc1_uint32 stride, etc1_byte* pOut) {
+ if (pixelSize < 2 || pixelSize > 3) {
+ return -1;
+ }
+ static const unsigned short kYMask[] = { 0x0, 0xf, 0xff, 0xfff, 0xffff };
+ static const unsigned short kXMask[] = { 0x0, 0x1111, 0x3333, 0x7777,
+ 0xffff };
+ etc1_byte block[ETC1_DECODED_BLOCK_SIZE];
+ etc1_byte encoded[ETC1_ENCODED_BLOCK_SIZE];
+
+ etc1_uint32 encodedWidth = (width + 3) & ~3;
+ etc1_uint32 encodedHeight = (height + 3) & ~3;
+
+ for (etc1_uint32 y = 0; y < encodedHeight; y += 4) {
+ etc1_uint32 yEnd = height - y;
+ if (yEnd > 4) {
+ yEnd = 4;
+ }
+ int ymask = kYMask[yEnd];
+ for (etc1_uint32 x = 0; x < encodedWidth; x += 4) {
+ etc1_uint32 xEnd = width - x;
+ if (xEnd > 4) {
+ xEnd = 4;
+ }
+ int mask = ymask & kXMask[xEnd];
+ for (etc1_uint32 cy = 0; cy < yEnd; cy++) {
+ etc1_byte* q = block + (cy * 4) * 3;
+ const etc1_byte* p = pIn + pixelSize * x + stride * (y + cy);
+ if (pixelSize == 3) {
+ memcpy(q, p, xEnd * 3);
+ } else {
+ for (etc1_uint32 cx = 0; cx < xEnd; cx++) {
+ int pixel = (p[1] << 8) | p[0];
+ *q++ = convert5To8(pixel >> 11);
+ *q++ = convert6To8(pixel >> 5);
+ *q++ = convert5To8(pixel);
+ p += pixelSize;
+ }
+ }
+ }
+ etc1_encode_block(block, mask, encoded);
+ memcpy(pOut, encoded, sizeof(encoded));
+ pOut += sizeof(encoded);
+ }
+ }
+ return 0;
+}
+
+// Decode an entire image.
+// pIn - pointer to encoded data.
+// pOut - pointer to the image data. Will be written such that the Red component of
+// pixel (x,y) is at pIn + pixelSize * x + stride * y + redOffset. Must be
+// large enough to store entire image.
+
+
+int etc2_decode_image(const etc1_byte* pIn, ETC2ImageFormat format,
+ etc1_byte* pOut,
+ etc1_uint32 width, etc1_uint32 height,
+ etc1_uint32 stride) {
+ etc1_byte block[std::max({ETC1_DECODED_BLOCK_SIZE,
+ ETC2_DECODED_RGB8A1_BLOCK_SIZE,
+ EAC_DECODED_R11_BLOCK_SIZE,
+ EAC_DECODED_RG11_BLOCK_SIZE})];
+ etc1_byte alphaBlock[EAC_DECODED_ALPHA_BLOCK_SIZE];
+
+ etc1_uint32 encodedWidth = (width + 3) & ~3;
+ etc1_uint32 encodedHeight = (height + 3) & ~3;
+
+ int pixelSize = etc_get_decoded_pixel_size(format);
+ bool isSigned = (format == EtcSignedR11 || format == EtcSignedRG11);
+
+ for (etc1_uint32 y = 0; y < encodedHeight; y += 4) {
+ etc1_uint32 yEnd = height - y;
+ if (yEnd > 4) {
+ yEnd = 4;
+ }
+ for (etc1_uint32 x = 0; x < encodedWidth; x += 4) {
+ etc1_uint32 xEnd = width - x;
+ if (xEnd > 4) {
+ xEnd = 4;
+ }
+ switch (format) {
+ case EtcRGBA8:
+ eac_decode_single_channel_block(pIn, 1, false, alphaBlock);
+ pIn += EAC_ENCODE_ALPHA_BLOCK_SIZE;
+ // Do not break
+ // Fall through to EtcRGB8 to decode the RGB part
+ [[fallthrough]];
+ case EtcRGB8:
+ etc2_decode_rgb_block(pIn, false, block);
+ pIn += ETC1_ENCODED_BLOCK_SIZE;
+ break;
+ case EtcRGB8A1:
+ etc2_decode_rgb_block(pIn, true, block);
+ pIn += ETC1_ENCODED_BLOCK_SIZE;
+ break;
+ case EtcR11:
+ case EtcSignedR11:
+ eac_decode_single_channel_block(pIn, 4, isSigned, block);
+ pIn += EAC_ENCODE_R11_BLOCK_SIZE;
+ break;
+ case EtcRG11:
+ case EtcSignedRG11:
+ // r channel
+ eac_decode_single_channel_block(pIn, 4, isSigned, block);
+ pIn += EAC_ENCODE_R11_BLOCK_SIZE;
+ // g channel
+ eac_decode_single_channel_block(pIn, 4, isSigned,
+ block + EAC_DECODED_R11_BLOCK_SIZE);
+ pIn += EAC_ENCODE_R11_BLOCK_SIZE;
+ break;
+ default:
+ assert(0);
+ }
+ for (etc1_uint32 cy = 0; cy < yEnd; cy++) {
+ etc1_byte* p = pOut + pixelSize * x + stride * (y + cy);
+ switch (format) {
+ case EtcRGB8:
+ case EtcRGB8A1:
+ case EtcR11:
+ case EtcSignedR11: {
+ const etc1_byte* q = block + (cy * 4) * pixelSize;
+ memcpy(p, q, xEnd * pixelSize);
+ }
+ break;
+ case EtcRG11:
+ case EtcSignedRG11: {
+ const etc1_byte* r = block + cy * EAC_DECODED_R11_BLOCK_SIZE / 4;
+ const etc1_byte* g = block + cy * EAC_DECODED_R11_BLOCK_SIZE / 4 + EAC_DECODED_R11_BLOCK_SIZE;
+ int channelSize = pixelSize / 2;
+ for (etc1_uint32 cx = 0; cx < xEnd; cx++) {
+ memcpy(p, r, channelSize);
+ p += channelSize;
+ r += channelSize;
+ memcpy(p, g, channelSize);
+ p += channelSize;
+ g += channelSize;
+ }
+ }
+ break;
+ case EtcRGBA8: {
+ const etc1_byte* q = block + (cy * 4) * 3;
+ const etc1_byte* qa = alphaBlock + cy * 4;
+ for (etc1_uint32 cx = 0; cx < xEnd; cx++) {
+ // copy rgb data
+ memcpy(p, q, 3);
+ p += 3;
+ q += 3;
+ *p++ = *qa++;
+ }
+ }
+ break;
+ default:
+ assert(0);
+ }
+ }
+ }
+ }
+ return 0;
+}
+
+static const char kMagic[] = { 'P', 'K', 'M', ' ', '1', '0' };
+
+static const etc1_uint32 ETC1_PKM_FORMAT_OFFSET = 6;
+static const etc1_uint32 ETC1_PKM_ENCODED_WIDTH_OFFSET = 8;
+static const etc1_uint32 ETC1_PKM_ENCODED_HEIGHT_OFFSET = 10;
+static const etc1_uint32 ETC1_PKM_WIDTH_OFFSET = 12;
+static const etc1_uint32 ETC1_PKM_HEIGHT_OFFSET = 14;
+
+static const etc1_uint32 ETC1_RGB_NO_MIPMAPS = 0;
+
+static void writeBEUint16(etc1_byte* pOut, etc1_uint32 data) {
+ pOut[0] = (etc1_byte) (data >> 8);
+ pOut[1] = (etc1_byte) data;
+}
+
+static etc1_uint32 readBEUint16(const etc1_byte* pIn) {
+ return (pIn[0] << 8) | pIn[1];
+}
+
+// Format a PKM header
+
+void etc1_pkm_format_header(etc1_byte* pHeader, etc1_uint32 width, etc1_uint32 height) {
+ memcpy(pHeader, kMagic, sizeof(kMagic));
+ etc1_uint32 encodedWidth = (width + 3) & ~3;
+ etc1_uint32 encodedHeight = (height + 3) & ~3;
+ writeBEUint16(pHeader + ETC1_PKM_FORMAT_OFFSET, ETC1_RGB_NO_MIPMAPS);
+ writeBEUint16(pHeader + ETC1_PKM_ENCODED_WIDTH_OFFSET, encodedWidth);
+ writeBEUint16(pHeader + ETC1_PKM_ENCODED_HEIGHT_OFFSET, encodedHeight);
+ writeBEUint16(pHeader + ETC1_PKM_WIDTH_OFFSET, width);
+ writeBEUint16(pHeader + ETC1_PKM_HEIGHT_OFFSET, height);
+}
+
+// Check if a PKM header is correctly formatted.
+
+etc1_bool etc1_pkm_is_valid(const etc1_byte* pHeader) {
+ if (memcmp(pHeader, kMagic, sizeof(kMagic))) {
+ return false;
+ }
+ etc1_uint32 format = readBEUint16(pHeader + ETC1_PKM_FORMAT_OFFSET);
+ etc1_uint32 encodedWidth = readBEUint16(pHeader + ETC1_PKM_ENCODED_WIDTH_OFFSET);
+ etc1_uint32 encodedHeight = readBEUint16(pHeader + ETC1_PKM_ENCODED_HEIGHT_OFFSET);
+ etc1_uint32 width = readBEUint16(pHeader + ETC1_PKM_WIDTH_OFFSET);
+ etc1_uint32 height = readBEUint16(pHeader + ETC1_PKM_HEIGHT_OFFSET);
+ return format == ETC1_RGB_NO_MIPMAPS &&
+ encodedWidth >= width && encodedWidth - width < 4 &&
+ encodedHeight >= height && encodedHeight - height < 4;
+}
+
+// Read the image width from a PKM header
+
+etc1_uint32 etc1_pkm_get_width(const etc1_byte* pHeader) {
+ return readBEUint16(pHeader + ETC1_PKM_WIDTH_OFFSET);
+}
+
+// Read the image height from a PKM header
+
+etc1_uint32 etc1_pkm_get_height(const etc1_byte* pHeader){
+ return readBEUint16(pHeader + ETC1_PKM_HEIGHT_OFFSET);
+}
diff --git a/shared/OpenglCodecCommon/etc.h b/shared/OpenglCodecCommon/etc.h
new file mode 100644
index 00000000..7d43c891
--- /dev/null
+++ b/shared/OpenglCodecCommon/etc.h
@@ -0,0 +1,130 @@
+// Copyright 2009 Google Inc.
+//
+// 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.
+
+#pragma once
+
+#define MAX_ETC_SUPPORTED 12
+
+#define ETC1_ENCODED_BLOCK_SIZE 8
+#define ETC1_DECODED_BLOCK_SIZE 48
+#define ETC2_DECODED_RGB8A1_BLOCK_SIZE 64
+#define EAC_ENCODE_ALPHA_BLOCK_SIZE 8
+#define EAC_DECODED_ALPHA_BLOCK_SIZE 16
+#define EAC_ENCODE_R11_BLOCK_SIZE 8
+#define EAC_DECODED_R11_BLOCK_SIZE 64
+#define EAC_DECODED_RG11_BLOCK_SIZE (EAC_DECODED_R11_BLOCK_SIZE*2)
+
+#ifndef ETC1_RGB8_OES
+#define ETC1_RGB8_OES 0x8D64
+#endif
+
+typedef unsigned char etc1_byte;
+typedef int etc1_bool;
+typedef unsigned int etc1_uint32;
+
+enum ETC2ImageFormat {
+ EtcRGB8, EtcRGBA8, EtcR11, EtcSignedR11, EtcRG11, EtcSignedRG11, EtcRGB8A1
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Encode a block of pixels.
+//
+// pIn is a pointer to a ETC_DECODED_BLOCK_SIZE array of bytes that represent a
+// 4 x 4 square of 3-byte pixels in form R, G, B. Byte (3 * (x + 4 * y) is the R
+// value of pixel (x, y).
+//
+// validPixelMask is a 16-bit mask where bit (1 << (x + y * 4)) indicates whether
+// the corresponding (x,y) pixel is valid. Invalid pixel color values are ignored when compressing.
+//
+// pOut is an ETC1 compressed version of the data.
+
+void etc1_encode_block(const etc1_byte* pIn, etc1_uint32 validPixelMask, etc1_byte* pOut);
+
+// Decode a block of rgb pixels.
+//
+// pIn is an ETC2 compressed version of the data.
+//
+// pOut is a pointer to a ETC_DECODED_BLOCK_SIZE array of bytes that represent a
+// 4 x 4 square of 3-byte pixels in form R, G, B. Byte (3 * (x + 4 * y) is the R
+// value of pixel (x, y).
+
+void etc2_decode_rgb_block(const etc1_byte* pIn, bool isPunchthroughAlpha, etc1_byte* pOut);
+
+// Decode a block of single channel pixels
+// This is used when decoding the alpha channel of RGBA8_ETC2_EAC format, or
+// when decoding R11_EAC format
+// decodedElementBytes: number of bits per element after decoding.
+// For RGBA8_ETC2_EAC it must be 1, for R11_EAC it must be 2
+
+void eac_decode_single_channel_block(const etc1_byte* pIn,
+ int decodedElementBytes, bool isSigned,
+ etc1_byte* pOut);
+
+// Return the size of the encoded image data (does not include size of PKM header).
+
+etc1_uint32 etc1_get_encoded_data_size(etc1_uint32 width, etc1_uint32 height);
+
+etc1_uint32 etc_get_encoded_data_size(ETC2ImageFormat format, etc1_uint32 width,
+ etc1_uint32 height);
+etc1_uint32 etc_get_decoded_pixel_size(ETC2ImageFormat format);
+
+// Encode an entire image.
+// pIn - pointer to the image data. Formatted such that
+// pixel (x,y) is at pIn + pixelSize * x + stride * y;
+// pOut - pointer to encoded data. Must be large enough to store entire encoded image.
+// pixelSize can be 2 or 3. 2 is an GL_UNSIGNED_SHORT_5_6_5 image, 3 is a GL_BYTE RGB image.
+// returns non-zero if there is an error.
+
+int etc1_encode_image(const etc1_byte* pIn, etc1_uint32 width, etc1_uint32 height,
+ etc1_uint32 pixelSize, etc1_uint32 stride, etc1_byte* pOut);
+
+// Decode an entire image.
+// pIn - pointer to encoded data.
+// pOut - pointer to the image data. Will be written such that
+// pixel (x,y) is at pIn + pixelSize * x + stride * y. Must be
+// large enough to store entire image.
+// (pixelSize=3 for rgb images, pixelSize=4 for images with alpha channel)
+// returns non-zero if there is an error.
+
+int etc2_decode_image(const etc1_byte* pIn, ETC2ImageFormat format,
+ etc1_byte* pOut,
+ etc1_uint32 width, etc1_uint32 height,
+ etc1_uint32 stride);
+
+// Size of a PKM header, in bytes.
+
+#define ETC_PKM_HEADER_SIZE 16
+
+// Format a PKM header
+
+void etc1_pkm_format_header(etc1_byte* pHeader, etc1_uint32 width, etc1_uint32 height);
+
+// Check if a PKM header is correctly formatted.
+
+etc1_bool etc1_pkm_is_valid(const etc1_byte* pHeader);
+
+// Read the image width from a PKM header
+
+etc1_uint32 etc1_pkm_get_width(const etc1_byte* pHeader);
+
+// Read the image height from a PKM header
+
+etc1_uint32 etc1_pkm_get_height(const etc1_byte* pHeader);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/shared/OpenglCodecCommon/glUtils.cpp b/shared/OpenglCodecCommon/glUtils.cpp
index a0ec2408..a6b0b7c8 100644
--- a/shared/OpenglCodecCommon/glUtils.cpp
+++ b/shared/OpenglCodecCommon/glUtils.cpp
@@ -20,6 +20,367 @@
#include <GLES3/gl31.h>
+bool isSamplerType(GLenum type) {
+ switch (type) {
+ case GL_SAMPLER_2D:
+ case GL_SAMPLER_3D:
+ case GL_SAMPLER_CUBE:
+ case GL_SAMPLER_2D_SHADOW:
+ case GL_SAMPLER_2D_ARRAY:
+ case GL_SAMPLER_2D_ARRAY_SHADOW:
+ case GL_SAMPLER_2D_MULTISAMPLE:
+ case GL_SAMPLER_CUBE_SHADOW:
+ case GL_INT_SAMPLER_2D:
+ case GL_INT_SAMPLER_3D:
+ case GL_INT_SAMPLER_CUBE:
+ case GL_INT_SAMPLER_2D_ARRAY:
+ case GL_INT_SAMPLER_2D_MULTISAMPLE:
+ case GL_UNSIGNED_INT_SAMPLER_2D:
+ case GL_UNSIGNED_INT_SAMPLER_3D:
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
+ case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool isIntegerType(GLenum type) {
+ switch (type) {
+ case GL_UNSIGNED_INT:
+ case GL_INT:
+ case GL_INT_VEC2:
+ case GL_UNSIGNED_INT_VEC2:
+ case GL_INT_VEC3:
+ case GL_UNSIGNED_INT_VEC3:
+ case GL_INT_VEC4:
+ case GL_UNSIGNED_INT_VEC4:
+ case GL_INT_IMAGE_2D:
+ case GL_INT_IMAGE_3D:
+ case GL_INT_IMAGE_CUBE:
+ case GL_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_IMAGE_2D:
+ case GL_UNSIGNED_INT_IMAGE_3D:
+ case GL_UNSIGNED_INT_IMAGE_CUBE:
+ case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_ATOMIC_COUNTER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool isUnsignedIntType(GLenum type) {
+ switch (type) {
+ case GL_UNSIGNED_INT:
+ case GL_UNSIGNED_INT_VEC2:
+ case GL_UNSIGNED_INT_VEC3:
+ case GL_UNSIGNED_INT_VEC4:
+ case GL_UNSIGNED_INT_IMAGE_2D:
+ case GL_UNSIGNED_INT_IMAGE_3D:
+ case GL_UNSIGNED_INT_IMAGE_CUBE:
+ case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_ATOMIC_COUNTER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool isBoolType(GLenum type) {
+ switch (type) {
+ case GL_BOOL:
+ case GL_BOOL_VEC2:
+ case GL_BOOL_VEC3:
+ case GL_BOOL_VEC4:
+ return true;
+ default:
+ return false;
+ }
+}
+
+uint32_t getColumnsOfType(GLenum type) {
+ switch (type) {
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ case GL_SHORT:
+ case GL_UNSIGNED_SHORT:
+ case GL_HALF_FLOAT:
+ case GL_HALF_FLOAT_OES:
+ case GL_IMAGE_2D:
+ case GL_IMAGE_3D:
+ case GL_UNSIGNED_INT:
+ case GL_INT:
+ case GL_FLOAT:
+ case GL_FIXED:
+ case GL_BOOL:
+ return 1;
+#ifdef GL_DOUBLE
+ case GL_DOUBLE:
+ return 1;
+ case GL_DOUBLE_VEC2:
+ case GL_DOUBLE_MAT2:
+ case GL_DOUBLE_MAT2x3:
+ case GL_DOUBLE_MAT2x4:
+ return 2;
+ case GL_DOUBLE_VEC3:
+ case GL_DOUBLE_MAT3:
+ case GL_DOUBLE_MAT3x2:
+ case GL_DOUBLE_MAT3x4:
+ return 3;
+ case GL_DOUBLE_VEC4:
+ case GL_DOUBLE_MAT4:
+ case GL_DOUBLE_MAT4x2:
+ case GL_DOUBLE_MAT4x3:
+ return 4;
+#endif
+ case GL_FLOAT_VEC2:
+ case GL_INT_VEC2:
+ case GL_UNSIGNED_INT_VEC2:
+ case GL_BOOL_VEC2:
+ case GL_FLOAT_MAT2:
+ case GL_FLOAT_MAT2x3:
+ case GL_FLOAT_MAT2x4:
+ return 2;
+ case GL_INT_VEC3:
+ case GL_UNSIGNED_INT_VEC3:
+ case GL_BOOL_VEC3:
+ case GL_FLOAT_VEC3:
+ case GL_FLOAT_MAT3:
+ case GL_FLOAT_MAT3x2:
+ case GL_FLOAT_MAT3x4:
+ return 3;
+ case GL_FLOAT_VEC4:
+ case GL_BOOL_VEC4:
+ case GL_INT_VEC4:
+ case GL_UNSIGNED_INT_VEC4:
+ case GL_FLOAT_MAT4:
+ case GL_FLOAT_MAT4x2:
+ case GL_FLOAT_MAT4x3:
+ return 4;
+ case GL_SAMPLER_2D:
+ case GL_SAMPLER_3D:
+ case GL_SAMPLER_CUBE:
+ case GL_SAMPLER_2D_SHADOW:
+ case GL_SAMPLER_2D_ARRAY:
+ case GL_SAMPLER_2D_ARRAY_SHADOW:
+ case GL_SAMPLER_2D_MULTISAMPLE:
+ case GL_SAMPLER_CUBE_SHADOW:
+ case GL_INT_SAMPLER_2D:
+ case GL_INT_SAMPLER_3D:
+ case GL_INT_SAMPLER_CUBE:
+ case GL_INT_SAMPLER_2D_ARRAY:
+ case GL_INT_SAMPLER_2D_MULTISAMPLE:
+ case GL_UNSIGNED_INT_SAMPLER_2D:
+ case GL_UNSIGNED_INT_SAMPLER_3D:
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
+ case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
+ case GL_IMAGE_CUBE:
+ case GL_IMAGE_2D_ARRAY:
+ case GL_INT_IMAGE_2D:
+ case GL_INT_IMAGE_3D:
+ case GL_INT_IMAGE_CUBE:
+ case GL_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_IMAGE_2D:
+ case GL_UNSIGNED_INT_IMAGE_3D:
+ case GL_UNSIGNED_INT_IMAGE_CUBE:
+ case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_ATOMIC_COUNTER:
+ default:
+ return 1;
+ }
+}
+
+uint32_t getRowsOfType(GLenum type) {
+ switch (type) {
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ case GL_SHORT:
+ case GL_UNSIGNED_SHORT:
+ case GL_HALF_FLOAT:
+ case GL_HALF_FLOAT_OES:
+ case GL_IMAGE_2D:
+ case GL_IMAGE_3D:
+ case GL_UNSIGNED_INT:
+ case GL_INT:
+ case GL_FLOAT:
+ case GL_FIXED:
+ case GL_BOOL:
+ return 1;
+#ifdef GL_DOUBLE
+ case GL_DOUBLE:
+ case GL_DOUBLE_VEC2:
+ case GL_DOUBLE_VEC3:
+ case GL_DOUBLE_VEC4:
+ return 1;
+ case GL_DOUBLE_MAT2:
+ case GL_DOUBLE_MAT3x2:
+ case GL_DOUBLE_MAT4x2:
+ return 2;
+ case GL_DOUBLE_MAT3:
+ case GL_DOUBLE_MAT2x3:
+ case GL_DOUBLE_MAT4x3:
+ return 3;
+ case GL_DOUBLE_MAT4:
+ case GL_DOUBLE_MAT3x4:
+ case GL_DOUBLE_MAT2x4:
+ return 4;
+#endif
+ case GL_FLOAT_VEC2:
+ case GL_INT_VEC2:
+ case GL_UNSIGNED_INT_VEC2:
+ case GL_BOOL_VEC2:
+ case GL_INT_VEC3:
+ case GL_UNSIGNED_INT_VEC3:
+ case GL_BOOL_VEC3:
+ case GL_FLOAT_VEC3:
+ case GL_FLOAT_VEC4:
+ case GL_BOOL_VEC4:
+ case GL_INT_VEC4:
+ case GL_UNSIGNED_INT_VEC4:
+ return 1;
+ case GL_FLOAT_MAT2:
+ case GL_FLOAT_MAT3x2:
+ case GL_FLOAT_MAT4x2:
+ return 2;
+ case GL_FLOAT_MAT3:
+ case GL_FLOAT_MAT2x3:
+ case GL_FLOAT_MAT4x3:
+ return 3;
+ case GL_FLOAT_MAT4:
+ case GL_FLOAT_MAT2x4:
+ case GL_FLOAT_MAT3x4:
+ return 4;
+ case GL_SAMPLER_2D:
+ case GL_SAMPLER_3D:
+ case GL_SAMPLER_CUBE:
+ case GL_SAMPLER_2D_SHADOW:
+ case GL_SAMPLER_2D_ARRAY:
+ case GL_SAMPLER_2D_ARRAY_SHADOW:
+ case GL_SAMPLER_2D_MULTISAMPLE:
+ case GL_SAMPLER_CUBE_SHADOW:
+ case GL_INT_SAMPLER_2D:
+ case GL_INT_SAMPLER_3D:
+ case GL_INT_SAMPLER_CUBE:
+ case GL_INT_SAMPLER_2D_ARRAY:
+ case GL_INT_SAMPLER_2D_MULTISAMPLE:
+ case GL_UNSIGNED_INT_SAMPLER_2D:
+ case GL_UNSIGNED_INT_SAMPLER_3D:
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
+ case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
+ case GL_IMAGE_CUBE:
+ case GL_IMAGE_2D_ARRAY:
+ case GL_INT_IMAGE_2D:
+ case GL_INT_IMAGE_3D:
+ case GL_INT_IMAGE_CUBE:
+ case GL_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_IMAGE_2D:
+ case GL_UNSIGNED_INT_IMAGE_3D:
+ case GL_UNSIGNED_INT_IMAGE_CUBE:
+ case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_ATOMIC_COUNTER:
+ default:
+ return 1;
+ }
+}
+
+uint32_t getAttributeCountOfType(GLenum type) {
+ switch (type) {
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ case GL_SHORT:
+ case GL_UNSIGNED_SHORT:
+ case GL_HALF_FLOAT:
+ case GL_HALF_FLOAT_OES:
+ case GL_IMAGE_2D:
+ case GL_IMAGE_3D:
+ case GL_UNSIGNED_INT:
+ case GL_INT:
+ case GL_FLOAT:
+ case GL_FIXED:
+ case GL_BOOL:
+ return 1;
+#ifdef GL_DOUBLE
+ case GL_DOUBLE:
+ case GL_DOUBLE_VEC2:
+ case GL_DOUBLE_VEC3:
+ case GL_DOUBLE_VEC4:
+ return 1;
+ case GL_DOUBLE_MAT2:
+ case GL_DOUBLE_MAT2x3:
+ case GL_DOUBLE_MAT2x4:
+ return 4;
+ case GL_DOUBLE_MAT3:
+ case GL_DOUBLE_MAT3x2:
+ case GL_DOUBLE_MAT3x4:
+ return 6;
+ case GL_DOUBLE_MAT4:
+ case GL_DOUBLE_MAT4x2:
+ case GL_DOUBLE_MAT4x3:
+ return 8;
+#endif
+ case GL_FLOAT_VEC2:
+ case GL_INT_VEC2:
+ case GL_UNSIGNED_INT_VEC2:
+ case GL_BOOL_VEC2:
+ case GL_INT_VEC3:
+ case GL_UNSIGNED_INT_VEC3:
+ case GL_BOOL_VEC3:
+ case GL_FLOAT_VEC3:
+ case GL_FLOAT_VEC4:
+ case GL_BOOL_VEC4:
+ case GL_INT_VEC4:
+ case GL_UNSIGNED_INT_VEC4:
+ return 1;
+ case GL_FLOAT_MAT2:
+ case GL_FLOAT_MAT2x3:
+ case GL_FLOAT_MAT2x4:
+ return 2;
+ case GL_FLOAT_MAT3:
+ case GL_FLOAT_MAT3x2:
+ case GL_FLOAT_MAT3x4:
+ return 3;
+ case GL_FLOAT_MAT4:
+ case GL_FLOAT_MAT4x2:
+ case GL_FLOAT_MAT4x3:
+ return 4;
+ case GL_SAMPLER_2D:
+ case GL_SAMPLER_3D:
+ case GL_SAMPLER_CUBE:
+ case GL_SAMPLER_2D_SHADOW:
+ case GL_SAMPLER_2D_ARRAY:
+ case GL_SAMPLER_2D_ARRAY_SHADOW:
+ case GL_SAMPLER_2D_MULTISAMPLE:
+ case GL_SAMPLER_CUBE_SHADOW:
+ case GL_INT_SAMPLER_2D:
+ case GL_INT_SAMPLER_3D:
+ case GL_INT_SAMPLER_CUBE:
+ case GL_INT_SAMPLER_2D_ARRAY:
+ case GL_INT_SAMPLER_2D_MULTISAMPLE:
+ case GL_UNSIGNED_INT_SAMPLER_2D:
+ case GL_UNSIGNED_INT_SAMPLER_3D:
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
+ case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
+ case GL_IMAGE_CUBE:
+ case GL_IMAGE_2D_ARRAY:
+ case GL_INT_IMAGE_2D:
+ case GL_INT_IMAGE_3D:
+ case GL_INT_IMAGE_CUBE:
+ case GL_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_IMAGE_2D:
+ case GL_UNSIGNED_INT_IMAGE_3D:
+ case GL_UNSIGNED_INT_IMAGE_CUBE:
+ case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_ATOMIC_COUNTER:
+ default:
+ return 1;
+ }
+}
+
size_t glSizeof(GLenum type)
{
size_t retval = 0;
@@ -47,6 +408,36 @@ size_t glSizeof(GLenum type)
case GL_DOUBLE:
retval = 8;
break;
+ case GL_DOUBLE_VEC2:
+ retval = 16;
+ break;
+ case GL_DOUBLE_VEC3:
+ retval = 24;
+ break;
+ case GL_DOUBLE_VEC4:
+ retval = 32;
+ break;
+ case GL_DOUBLE_MAT2:
+ retval = 8 * 4;
+ break;
+ case GL_DOUBLE_MAT3:
+ retval = 8 * 9;
+ break;
+ case GL_DOUBLE_MAT4:
+ retval = 8 * 16;
+ break;
+ case GL_DOUBLE_MAT2x3:
+ case GL_DOUBLE_MAT3x2:
+ retval = 8 * 6;
+ break;
+ case GL_DOUBLE_MAT2x4:
+ case GL_DOUBLE_MAT4x2:
+ retval = 8 * 8;
+ break;
+ case GL_DOUBLE_MAT3x4:
+ case GL_DOUBLE_MAT4x3:
+ retval = 8 * 12;
+ break;
#endif
case GL_FLOAT_VEC2:
case GL_INT_VEC2:
@@ -88,6 +479,32 @@ size_t glSizeof(GLenum type)
case GL_SAMPLER_2D:
case GL_SAMPLER_3D:
case GL_SAMPLER_CUBE:
+ case GL_SAMPLER_2D_SHADOW:
+ case GL_SAMPLER_2D_ARRAY:
+ case GL_SAMPLER_2D_ARRAY_SHADOW:
+ case GL_SAMPLER_2D_MULTISAMPLE:
+ case GL_SAMPLER_CUBE_SHADOW:
+ case GL_INT_SAMPLER_2D:
+ case GL_INT_SAMPLER_3D:
+ case GL_INT_SAMPLER_CUBE:
+ case GL_INT_SAMPLER_2D_ARRAY:
+ case GL_INT_SAMPLER_2D_MULTISAMPLE:
+ case GL_UNSIGNED_INT_SAMPLER_2D:
+ case GL_UNSIGNED_INT_SAMPLER_3D:
+ case GL_UNSIGNED_INT_SAMPLER_CUBE:
+ case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
+ case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
+ case GL_IMAGE_CUBE:
+ case GL_IMAGE_2D_ARRAY:
+ case GL_INT_IMAGE_2D:
+ case GL_INT_IMAGE_3D:
+ case GL_INT_IMAGE_CUBE:
+ case GL_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_IMAGE_2D:
+ case GL_UNSIGNED_INT_IMAGE_3D:
+ case GL_UNSIGNED_INT_IMAGE_CUBE:
+ case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
+ case GL_UNSIGNED_INT_ATOMIC_COUNTER:
retval = 4;
break;
case GL_UNSIGNED_SHORT_4_4_4_4:
@@ -669,3 +1086,92 @@ GLuint glUtilsIndirectStructSize(IndirectCommandType cmdType) {
}
return 4;
}
+
+bool colorRenderableFormat(GLint internalformat, GLenum texturetype, int majorVersion, int minorVersion, bool hasColorBufferFloatExtension, bool hasColorBufferHalfFloatExtension) {
+ switch (internalformat) {
+ case GL_RGB:
+ case GL_RGBA:
+ case GL_BGRA_EXT:
+ switch (texturetype) {
+ case GL_FLOAT:
+ case GL_HALF_FLOAT_OES:
+ case GL_UNSIGNED_INT_10F_11F_11F_REV:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ return false;
+ default:
+ return true;
+ }
+ break;
+ case GL_R8:
+ case GL_RG8:
+ case GL_RGB8:
+ case GL_RGB565:
+ case GL_RGBA4:
+ case GL_RGB5_A1:
+ case GL_RGBA8:
+ case GL_RGB10_A2:
+ case GL_RGB10_A2UI:
+ case GL_SRGB8_ALPHA8:
+ case GL_R8I:
+ case GL_R8UI:
+ case GL_R16I:
+ case GL_R16UI:
+ case GL_R32I:
+ case GL_R32UI:
+ case GL_RG8I:
+ case GL_RG8UI:
+ case GL_RG16I:
+ case GL_RG16UI:
+ case GL_RG32I:
+ case GL_RG32UI:
+ case GL_RGBA8I:
+ case GL_RGBA8UI:
+ case GL_RGBA16I:
+ case GL_RGBA16UI:
+ case GL_RGBA32I:
+ case GL_RGBA32UI:
+ case GL_BGRA8_EXT:
+ return true;
+ case GL_R16F:
+ case GL_RG16F:
+ case GL_RGBA16F:
+ case GL_R32F:
+ case GL_RG32F:
+ case GL_RGBA32F:
+ case GL_R11F_G11F_B10F:
+ return majorVersion >= 3 && hasColorBufferFloatExtension;
+ case GL_RGB16F:
+ return majorVersion >= 3 && hasColorBufferHalfFloatExtension;
+ default:
+ return false;
+ }
+}
+
+bool depthRenderableFormat(GLint internalformat) {
+ switch (internalformat) {
+ case GL_DEPTH_STENCIL:
+ case GL_DEPTH_COMPONENT:
+ case GL_DEPTH_COMPONENT16:
+ case GL_DEPTH_COMPONENT24:
+ case GL_DEPTH_COMPONENT32F:
+ case GL_DEPTH24_STENCIL8:
+ case GL_DEPTH32F_STENCIL8:
+ case 0X81A7: // GL_DEPTH_COMPONENT32
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool stencilRenderableFormat(GLint internalformat) {
+ switch (internalformat) {
+ case GL_STENCIL_INDEX:
+ case GL_DEPTH_STENCIL:
+ case GL_STENCIL_INDEX8:
+ case GL_DEPTH24_STENCIL8:
+ case GL_DEPTH32F_STENCIL8:
+ return true;
+ default:
+ return false;
+ }
+}
diff --git a/shared/OpenglCodecCommon/glUtils.h b/shared/OpenglCodecCommon/glUtils.h
index 2f20b689..09081c2f 100644
--- a/shared/OpenglCodecCommon/glUtils.h
+++ b/shared/OpenglCodecCommon/glUtils.h
@@ -57,6 +57,13 @@ typedef enum {
INDIRECT_COMMAND_DRAWELEMENTS = 1,
} IndirectCommandType;
+ bool isSamplerType(GLenum type);
+ bool isIntegerType(GLenum type);
+ bool isUnsignedIntType(GLenum type);
+ bool isBoolType(GLenum type);
+ uint32_t getColumnsOfType(GLenum type);
+ uint32_t getRowsOfType(GLenum type);
+ uint32_t getAttributeCountOfType(GLenum type);
size_t glSizeof(GLenum type);
size_t glUtilsParamSize(GLenum param);
void glUtilsPackPointerData(unsigned char *dst, unsigned char *str,
@@ -73,6 +80,11 @@ typedef enum {
GLuint glUtilsIndirectStructSize(IndirectCommandType cmdType);
+ bool colorRenderableFormat(GLint internalformat, GLenum texturetype, int majorVersion, int minorVersion, bool hasColorBufferFloatExtension, bool hasColorBufferHalfFloatExtension);
+
+ bool depthRenderableFormat(GLint internalformat);
+ bool stencilRenderableFormat(GLint internalformat);
+
#ifdef __cplusplus
};
#endif
diff --git a/shared/gralloc_cb/CMakeLists.txt b/shared/gralloc_cb/CMakeLists.txt
index f9e7b713..865d9d7a 100644
--- a/shared/gralloc_cb/CMakeLists.txt
+++ b/shared/gralloc_cb/CMakeLists.txt
@@ -5,6 +5,6 @@ android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/Android.mk" "
set(gralloc_cb_host_src empty.cpp)
android_add_library(TARGET gralloc_cb_host LICENSE Apache-2.0 SRC empty.cpp)
target_include_directories(gralloc_cb_host PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(gralloc_cb_host PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN")
+target_compile_definitions(gralloc_cb_host PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM")
target_compile_options(gralloc_cb_host PRIVATE "-fvisibility=default" "-Wno-unused-parameter")
target_link_libraries(gralloc_cb_host PRIVATE android-emu-shared) \ No newline at end of file
diff --git a/shared/qemupipe/CMakeLists.txt b/shared/qemupipe/CMakeLists.txt
index 22296814..90785d67 100644
--- a/shared/qemupipe/CMakeLists.txt
+++ b/shared/qemupipe/CMakeLists.txt
@@ -5,6 +5,6 @@ android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/Android.mk" "85
set(qemupipe_host_src qemu_pipe_common.cpp qemu_pipe_host.cpp)
android_add_library(TARGET qemupipe_host LICENSE Apache-2.0 SRC qemu_pipe_common.cpp qemu_pipe_host.cpp)
target_include_directories(qemupipe_host PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(qemupipe_host PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN")
+target_compile_definitions(qemupipe_host PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM")
target_compile_options(qemupipe_host PRIVATE "-fvisibility=default" "-Wno-unused-parameter")
target_link_libraries(qemupipe_host PRIVATE android-emu-shared) \ No newline at end of file
diff --git a/system/GLESv1/CMakeLists.txt b/system/GLESv1/CMakeLists.txt
index 5436e5f6..8143b9ac 100644
--- a/system/GLESv1/CMakeLists.txt
+++ b/system/GLESv1/CMakeLists.txt
@@ -4,7 +4,7 @@
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/GLESv1/Android.mk" "e095cb082e3791719749cfc80b90560afd7348eb0d7895449d2509aa129bea75")
set(GLESv1_CM_emulation_src gl.cpp)
android_add_library(TARGET GLESv1_CM_emulation SHARED LICENSE Apache-2.0 SRC gl.cpp)
-target_include_directories(GLESv1_CM_emulation PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(GLESv1_CM_emulation PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"GLES_emulation\"")
+target_include_directories(GLESv1_CM_emulation PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
+target_compile_definitions(GLESv1_CM_emulation PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"GLES_emulation\"")
target_compile_options(GLESv1_CM_emulation PRIVATE "-fvisibility=default" "-Wno-unused-parameter")
-target_link_libraries(GLESv1_CM_emulation PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui androidemu cutils utils log _renderControl_enc GLESv2_enc GLESv1_enc OpenglCodecCommon_host PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
+target_link_libraries(GLESv1_CM_emulation PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui log _renderControl_enc GLESv2_enc GLESv1_enc OpenglCodecCommon_host cutils utils androidemu PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
diff --git a/system/GLESv1_enc/CMakeLists.txt b/system/GLESv1_enc/CMakeLists.txt
index 0a9bc52b..2fb5b033 100644
--- a/system/GLESv1_enc/CMakeLists.txt
+++ b/system/GLESv1_enc/CMakeLists.txt
@@ -4,7 +4,7 @@
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc/Android.mk" "953e6b7371d10eed63a4be555f8f1fb6f347338484a78102fa8f55dff96f5d3b")
set(GLESv1_enc_src GLEncoder.cpp GLEncoderUtils.cpp gl_client_context.cpp gl_enc.cpp gl_entry.cpp)
android_add_library(TARGET GLESv1_enc SHARED LICENSE Apache-2.0 SRC GLEncoder.cpp GLEncoderUtils.cpp gl_client_context.cpp gl_enc.cpp gl_entry.cpp)
-target_include_directories(GLESv1_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(GLESv1_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"emuglGLESv1_enc\"")
+target_include_directories(GLESv1_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
+target_compile_definitions(GLESv1_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"emuglGLESv1_enc\"")
target_compile_options(GLESv1_enc PRIVATE "-fvisibility=default" "-Wno-unused-parameter")
-target_link_libraries(GLESv1_enc PRIVATE OpenglCodecCommon_host cutils utils log android-emu-shared PRIVATE qemupipe_host) \ No newline at end of file
+target_link_libraries(GLESv1_enc PRIVATE OpenglCodecCommon_host cutils utils log androidemu android-emu-shared PRIVATE qemupipe_host) \ No newline at end of file
diff --git a/system/GLESv1_enc/GLEncoder.cpp b/system/GLESv1_enc/GLEncoder.cpp
index 20f2c020..1ab13e37 100644
--- a/system/GLESv1_enc/GLEncoder.cpp
+++ b/system/GLESv1_enc/GLEncoder.cpp
@@ -989,7 +989,7 @@ void GLEncoder::s_glFramebufferTexture2DOES(void*self,
GLEncoder* ctx = (GLEncoder*)self;
GLClientState* state = ctx->m_state;
- state->attachTextureObject(target, attachment, texture);
+ state->attachTextureObject(target, attachment, texture, level, 0);
ctx->m_glFramebufferTexture2DOES_enc(self, target, attachment, textarget, texture, level);
}
@@ -1000,7 +1000,7 @@ void GLEncoder::s_glFramebufferTexture2DMultisampleIMG(void* self,
GLEncoder* ctx = (GLEncoder*)self;
GLClientState* state = ctx->m_state;
- state->attachTextureObject(target, attachment, texture);
+ state->attachTextureObject(target, attachment, texture, level, 0);
ctx->m_glFramebufferTexture2DMultisampleIMG_enc(self, target, attachment, textarget, texture, level, samples);
}
diff --git a/system/GLESv1_enc/gl_enc.cpp b/system/GLESv1_enc/gl_enc.cpp
index 4e672c68..a536b869 100644
--- a/system/GLESv1_enc/gl_enc.cpp
+++ b/system/GLESv1_enc/gl_enc.cpp
@@ -12,6 +12,7 @@
#include <stdio.h>
+#include "android/base/Tracing.h"
namespace {
void enc_unsupported()
@@ -21,6 +22,7 @@ void enc_unsupported()
void glAlphaFunc_enc(void *self , GLenum func, GLclampf ref)
{
+ AEMU_SCOPED_TRACE("glAlphaFunc encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -47,6 +49,7 @@ void glAlphaFunc_enc(void *self , GLenum func, GLclampf ref)
void glClearColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
{
+ AEMU_SCOPED_TRACE("glClearColor encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -75,6 +78,7 @@ void glClearColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue,
void glClearDepthf_enc(void *self , GLclampf depth)
{
+ AEMU_SCOPED_TRACE("glClearDepthf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -100,6 +104,7 @@ void glClearDepthf_enc(void *self , GLclampf depth)
void glClipPlanef_enc(void *self , GLenum plane, const GLfloat* equation)
{
+ AEMU_SCOPED_TRACE("glClipPlanef encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -128,6 +133,7 @@ void glClipPlanef_enc(void *self , GLenum plane, const GLfloat* equation)
void glColor4f_enc(void *self , GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
{
+ AEMU_SCOPED_TRACE("glColor4f encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -156,6 +162,7 @@ void glColor4f_enc(void *self , GLfloat red, GLfloat green, GLfloat blue, GLfloa
void glDepthRangef_enc(void *self , GLclampf zNear, GLclampf zFar)
{
+ AEMU_SCOPED_TRACE("glDepthRangef encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -182,6 +189,7 @@ void glDepthRangef_enc(void *self , GLclampf zNear, GLclampf zFar)
void glFogf_enc(void *self , GLenum pname, GLfloat param)
{
+ AEMU_SCOPED_TRACE("glFogf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -208,6 +216,7 @@ void glFogf_enc(void *self , GLenum pname, GLfloat param)
void glFogfv_enc(void *self , GLenum pname, const GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glFogfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -236,6 +245,7 @@ void glFogfv_enc(void *self , GLenum pname, const GLfloat* params)
void glFrustumf_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
{
+ AEMU_SCOPED_TRACE("glFrustumf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -266,6 +276,7 @@ void glFrustumf_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GL
void glGetClipPlanef_enc(void *self , GLenum pname, GLfloat* eqn)
{
+ AEMU_SCOPED_TRACE("glGetClipPlanef encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -305,6 +316,7 @@ void glGetClipPlanef_enc(void *self , GLenum pname, GLfloat* eqn)
void glGetFloatv_enc(void *self , GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetFloatv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -344,6 +356,7 @@ void glGetFloatv_enc(void *self , GLenum pname, GLfloat* params)
void glGetLightfv_enc(void *self , GLenum light, GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetLightfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -384,6 +397,7 @@ void glGetLightfv_enc(void *self , GLenum light, GLenum pname, GLfloat* params)
void glGetMaterialfv_enc(void *self , GLenum face, GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetMaterialfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -424,6 +438,7 @@ void glGetMaterialfv_enc(void *self , GLenum face, GLenum pname, GLfloat* params
void glGetTexEnvfv_enc(void *self , GLenum env, GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetTexEnvfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -464,6 +479,7 @@ void glGetTexEnvfv_enc(void *self , GLenum env, GLenum pname, GLfloat* params)
void glGetTexParameterfv_enc(void *self , GLenum target, GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetTexParameterfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -504,6 +520,7 @@ void glGetTexParameterfv_enc(void *self , GLenum target, GLenum pname, GLfloat*
void glLightModelf_enc(void *self , GLenum pname, GLfloat param)
{
+ AEMU_SCOPED_TRACE("glLightModelf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -530,6 +547,7 @@ void glLightModelf_enc(void *self , GLenum pname, GLfloat param)
void glLightModelfv_enc(void *self , GLenum pname, const GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glLightModelfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -558,6 +576,7 @@ void glLightModelfv_enc(void *self , GLenum pname, const GLfloat* params)
void glLightf_enc(void *self , GLenum light, GLenum pname, GLfloat param)
{
+ AEMU_SCOPED_TRACE("glLightf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -585,6 +604,7 @@ void glLightf_enc(void *self , GLenum light, GLenum pname, GLfloat param)
void glLightfv_enc(void *self , GLenum light, GLenum pname, const GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glLightfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -614,6 +634,7 @@ void glLightfv_enc(void *self , GLenum light, GLenum pname, const GLfloat* param
void glLineWidth_enc(void *self , GLfloat width)
{
+ AEMU_SCOPED_TRACE("glLineWidth encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -639,6 +660,7 @@ void glLineWidth_enc(void *self , GLfloat width)
void glLoadMatrixf_enc(void *self , const GLfloat* m)
{
+ AEMU_SCOPED_TRACE("glLoadMatrixf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -666,6 +688,7 @@ void glLoadMatrixf_enc(void *self , const GLfloat* m)
void glMaterialf_enc(void *self , GLenum face, GLenum pname, GLfloat param)
{
+ AEMU_SCOPED_TRACE("glMaterialf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -693,6 +716,7 @@ void glMaterialf_enc(void *self , GLenum face, GLenum pname, GLfloat param)
void glMaterialfv_enc(void *self , GLenum face, GLenum pname, const GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glMaterialfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -722,6 +746,7 @@ void glMaterialfv_enc(void *self , GLenum face, GLenum pname, const GLfloat* par
void glMultMatrixf_enc(void *self , const GLfloat* m)
{
+ AEMU_SCOPED_TRACE("glMultMatrixf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -749,6 +774,7 @@ void glMultMatrixf_enc(void *self , const GLfloat* m)
void glMultiTexCoord4f_enc(void *self , GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
{
+ AEMU_SCOPED_TRACE("glMultiTexCoord4f encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -778,6 +804,7 @@ void glMultiTexCoord4f_enc(void *self , GLenum target, GLfloat s, GLfloat t, GLf
void glNormal3f_enc(void *self , GLfloat nx, GLfloat ny, GLfloat nz)
{
+ AEMU_SCOPED_TRACE("glNormal3f encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -805,6 +832,7 @@ void glNormal3f_enc(void *self , GLfloat nx, GLfloat ny, GLfloat nz)
void glOrthof_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
{
+ AEMU_SCOPED_TRACE("glOrthof encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -835,6 +863,7 @@ void glOrthof_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfl
void glPointParameterf_enc(void *self , GLenum pname, GLfloat param)
{
+ AEMU_SCOPED_TRACE("glPointParameterf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -861,6 +890,7 @@ void glPointParameterf_enc(void *self , GLenum pname, GLfloat param)
void glPointParameterfv_enc(void *self , GLenum pname, const GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glPointParameterfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -889,6 +919,7 @@ void glPointParameterfv_enc(void *self , GLenum pname, const GLfloat* params)
void glPointSize_enc(void *self , GLfloat size)
{
+ AEMU_SCOPED_TRACE("glPointSize encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -914,6 +945,7 @@ void glPointSize_enc(void *self , GLfloat size)
void glPolygonOffset_enc(void *self , GLfloat factor, GLfloat units)
{
+ AEMU_SCOPED_TRACE("glPolygonOffset encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -940,6 +972,7 @@ void glPolygonOffset_enc(void *self , GLfloat factor, GLfloat units)
void glRotatef_enc(void *self , GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
{
+ AEMU_SCOPED_TRACE("glRotatef encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -968,6 +1001,7 @@ void glRotatef_enc(void *self , GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
void glScalef_enc(void *self , GLfloat x, GLfloat y, GLfloat z)
{
+ AEMU_SCOPED_TRACE("glScalef encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -995,6 +1029,7 @@ void glScalef_enc(void *self , GLfloat x, GLfloat y, GLfloat z)
void glTexEnvf_enc(void *self , GLenum target, GLenum pname, GLfloat param)
{
+ AEMU_SCOPED_TRACE("glTexEnvf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1022,6 +1057,7 @@ void glTexEnvf_enc(void *self , GLenum target, GLenum pname, GLfloat param)
void glTexEnvfv_enc(void *self , GLenum target, GLenum pname, const GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glTexEnvfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1051,6 +1087,7 @@ void glTexEnvfv_enc(void *self , GLenum target, GLenum pname, const GLfloat* par
void glTexParameterf_enc(void *self , GLenum target, GLenum pname, GLfloat param)
{
+ AEMU_SCOPED_TRACE("glTexParameterf encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1078,6 +1115,7 @@ void glTexParameterf_enc(void *self , GLenum target, GLenum pname, GLfloat param
void glTexParameterfv_enc(void *self , GLenum target, GLenum pname, const GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glTexParameterfv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1107,6 +1145,7 @@ void glTexParameterfv_enc(void *self , GLenum target, GLenum pname, const GLfloa
void glTranslatef_enc(void *self , GLfloat x, GLfloat y, GLfloat z)
{
+ AEMU_SCOPED_TRACE("glTranslatef encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1134,6 +1173,7 @@ void glTranslatef_enc(void *self , GLfloat x, GLfloat y, GLfloat z)
void glActiveTexture_enc(void *self , GLenum texture)
{
+ AEMU_SCOPED_TRACE("glActiveTexture encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1159,6 +1199,7 @@ void glActiveTexture_enc(void *self , GLenum texture)
void glAlphaFuncx_enc(void *self , GLenum func, GLclampx ref)
{
+ AEMU_SCOPED_TRACE("glAlphaFuncx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1185,6 +1226,7 @@ void glAlphaFuncx_enc(void *self , GLenum func, GLclampx ref)
void glBindBuffer_enc(void *self , GLenum target, GLuint buffer)
{
+ AEMU_SCOPED_TRACE("glBindBuffer encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1211,6 +1253,7 @@ void glBindBuffer_enc(void *self , GLenum target, GLuint buffer)
void glBindTexture_enc(void *self , GLenum target, GLuint texture)
{
+ AEMU_SCOPED_TRACE("glBindTexture encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1237,6 +1280,7 @@ void glBindTexture_enc(void *self , GLenum target, GLuint texture)
void glBlendFunc_enc(void *self , GLenum sfactor, GLenum dfactor)
{
+ AEMU_SCOPED_TRACE("glBlendFunc encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1263,6 +1307,7 @@ void glBlendFunc_enc(void *self , GLenum sfactor, GLenum dfactor)
void glBufferData_enc(void *self , GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
{
+ AEMU_SCOPED_TRACE("glBufferData encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1293,6 +1338,7 @@ void glBufferData_enc(void *self , GLenum target, GLsizeiptr size, const GLvoid*
void glBufferSubData_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glBufferSubData encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1323,6 +1369,7 @@ void glBufferSubData_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr
void glClear_enc(void *self , GLbitfield mask)
{
+ AEMU_SCOPED_TRACE("glClear encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1348,6 +1395,7 @@ void glClear_enc(void *self , GLbitfield mask)
void glClearColorx_enc(void *self , GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
{
+ AEMU_SCOPED_TRACE("glClearColorx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1376,6 +1424,7 @@ void glClearColorx_enc(void *self , GLclampx red, GLclampx green, GLclampx blue,
void glClearDepthx_enc(void *self , GLclampx depth)
{
+ AEMU_SCOPED_TRACE("glClearDepthx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1401,6 +1450,7 @@ void glClearDepthx_enc(void *self , GLclampx depth)
void glClearStencil_enc(void *self , GLint s)
{
+ AEMU_SCOPED_TRACE("glClearStencil encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1426,6 +1476,7 @@ void glClearStencil_enc(void *self , GLint s)
void glClientActiveTexture_enc(void *self , GLenum texture)
{
+ AEMU_SCOPED_TRACE("glClientActiveTexture encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1451,6 +1502,7 @@ void glClientActiveTexture_enc(void *self , GLenum texture)
void glColor4ub_enc(void *self , GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
{
+ AEMU_SCOPED_TRACE("glColor4ub encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1479,6 +1531,7 @@ void glColor4ub_enc(void *self , GLubyte red, GLubyte green, GLubyte blue, GLuby
void glColor4x_enc(void *self , GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
{
+ AEMU_SCOPED_TRACE("glColor4x encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1507,6 +1560,7 @@ void glColor4x_enc(void *self , GLfixed red, GLfixed green, GLfixed blue, GLfixe
void glColorMask_enc(void *self , GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
{
+ AEMU_SCOPED_TRACE("glColorMask encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1535,6 +1589,7 @@ void glColorMask_enc(void *self , GLboolean red, GLboolean green, GLboolean blue
void glCompressedTexImage2D_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glCompressedTexImage2D encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1569,6 +1624,7 @@ void glCompressedTexImage2D_enc(void *self , GLenum target, GLint level, GLenum
void glCompressedTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glCompressedTexSubImage2D encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1604,6 +1660,7 @@ void glCompressedTexSubImage2D_enc(void *self , GLenum target, GLint level, GLin
void glCopyTexImage2D_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
{
+ AEMU_SCOPED_TRACE("glCopyTexImage2D encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1636,6 +1693,7 @@ void glCopyTexImage2D_enc(void *self , GLenum target, GLint level, GLenum intern
void glCopyTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glCopyTexSubImage2D encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1668,6 +1726,7 @@ void glCopyTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoff
void glCullFace_enc(void *self , GLenum mode)
{
+ AEMU_SCOPED_TRACE("glCullFace encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1693,6 +1752,7 @@ void glCullFace_enc(void *self , GLenum mode)
void glDeleteBuffers_enc(void *self , GLsizei n, const GLuint* buffers)
{
+ AEMU_SCOPED_TRACE("glDeleteBuffers encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1721,6 +1781,7 @@ void glDeleteBuffers_enc(void *self , GLsizei n, const GLuint* buffers)
void glDeleteTextures_enc(void *self , GLsizei n, const GLuint* textures)
{
+ AEMU_SCOPED_TRACE("glDeleteTextures encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1749,6 +1810,7 @@ void glDeleteTextures_enc(void *self , GLsizei n, const GLuint* textures)
void glDepthFunc_enc(void *self , GLenum func)
{
+ AEMU_SCOPED_TRACE("glDepthFunc encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1774,6 +1836,7 @@ void glDepthFunc_enc(void *self , GLenum func)
void glDepthMask_enc(void *self , GLboolean flag)
{
+ AEMU_SCOPED_TRACE("glDepthMask encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1799,6 +1862,7 @@ void glDepthMask_enc(void *self , GLboolean flag)
void glDepthRangex_enc(void *self , GLclampx zNear, GLclampx zFar)
{
+ AEMU_SCOPED_TRACE("glDepthRangex encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1825,6 +1889,7 @@ void glDepthRangex_enc(void *self , GLclampx zNear, GLclampx zFar)
void glDisable_enc(void *self , GLenum cap)
{
+ AEMU_SCOPED_TRACE("glDisable encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1850,6 +1915,7 @@ void glDisable_enc(void *self , GLenum cap)
void glDisableClientState_enc(void *self , GLenum array)
{
+ AEMU_SCOPED_TRACE("glDisableClientState encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1875,6 +1941,7 @@ void glDisableClientState_enc(void *self , GLenum array)
void glDrawArrays_enc(void *self , GLenum mode, GLint first, GLsizei count)
{
+ AEMU_SCOPED_TRACE("glDrawArrays encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1902,6 +1969,7 @@ void glDrawArrays_enc(void *self , GLenum mode, GLint first, GLsizei count)
void glEnable_enc(void *self , GLenum cap)
{
+ AEMU_SCOPED_TRACE("glEnable encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1927,6 +1995,7 @@ void glEnable_enc(void *self , GLenum cap)
void glEnableClientState_enc(void *self , GLenum array)
{
+ AEMU_SCOPED_TRACE("glEnableClientState encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1952,6 +2021,7 @@ void glEnableClientState_enc(void *self , GLenum array)
void glFinish_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glFinish encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1976,6 +2046,7 @@ void glFinish_enc(void *self )
void glFlush_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glFlush encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2000,6 +2071,7 @@ void glFlush_enc(void *self )
void glFogx_enc(void *self , GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glFogx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2026,6 +2098,7 @@ void glFogx_enc(void *self , GLenum pname, GLfixed param)
void glFogxv_enc(void *self , GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glFogxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2054,6 +2127,7 @@ void glFogxv_enc(void *self , GLenum pname, const GLfixed* params)
void glFrontFace_enc(void *self , GLenum mode)
{
+ AEMU_SCOPED_TRACE("glFrontFace encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2079,6 +2153,7 @@ void glFrontFace_enc(void *self , GLenum mode)
void glFrustumx_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
{
+ AEMU_SCOPED_TRACE("glFrustumx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2109,6 +2184,7 @@ void glFrustumx_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GL
void glGetBooleanv_enc(void *self , GLenum pname, GLboolean* params)
{
+ AEMU_SCOPED_TRACE("glGetBooleanv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2148,6 +2224,7 @@ void glGetBooleanv_enc(void *self , GLenum pname, GLboolean* params)
void glGetBufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetBufferParameteriv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2188,6 +2265,7 @@ void glGetBufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint*
void glClipPlanex_enc(void *self , GLenum pname, const GLfixed* eqn)
{
+ AEMU_SCOPED_TRACE("glClipPlanex encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2216,6 +2294,7 @@ void glClipPlanex_enc(void *self , GLenum pname, const GLfixed* eqn)
void glGenBuffers_enc(void *self , GLsizei n, GLuint* buffers)
{
+ AEMU_SCOPED_TRACE("glGenBuffers encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2255,6 +2334,7 @@ void glGenBuffers_enc(void *self , GLsizei n, GLuint* buffers)
void glGenTextures_enc(void *self , GLsizei n, GLuint* textures)
{
+ AEMU_SCOPED_TRACE("glGenTextures encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2294,6 +2374,7 @@ void glGenTextures_enc(void *self , GLsizei n, GLuint* textures)
GLenum glGetError_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glGetError encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2333,6 +2414,7 @@ GLenum glGetError_enc(void *self )
void glGetFixedv_enc(void *self , GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetFixedv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2372,6 +2454,7 @@ void glGetFixedv_enc(void *self , GLenum pname, GLfixed* params)
void glGetIntegerv_enc(void *self , GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetIntegerv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2411,6 +2494,7 @@ void glGetIntegerv_enc(void *self , GLenum pname, GLint* params)
void glGetLightxv_enc(void *self , GLenum light, GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetLightxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2451,6 +2535,7 @@ void glGetLightxv_enc(void *self , GLenum light, GLenum pname, GLfixed* params)
void glGetMaterialxv_enc(void *self , GLenum face, GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetMaterialxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2491,6 +2576,7 @@ void glGetMaterialxv_enc(void *self , GLenum face, GLenum pname, GLfixed* params
void glGetTexEnviv_enc(void *self , GLenum env, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetTexEnviv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2531,6 +2617,7 @@ void glGetTexEnviv_enc(void *self , GLenum env, GLenum pname, GLint* params)
void glGetTexEnvxv_enc(void *self , GLenum env, GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetTexEnvxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2571,6 +2658,7 @@ void glGetTexEnvxv_enc(void *self , GLenum env, GLenum pname, GLfixed* params)
void glGetTexParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetTexParameteriv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2611,6 +2699,7 @@ void glGetTexParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* pa
void glGetTexParameterxv_enc(void *self , GLenum target, GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetTexParameterxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2651,6 +2740,7 @@ void glGetTexParameterxv_enc(void *self , GLenum target, GLenum pname, GLfixed*
void glHint_enc(void *self , GLenum target, GLenum mode)
{
+ AEMU_SCOPED_TRACE("glHint encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2677,6 +2767,7 @@ void glHint_enc(void *self , GLenum target, GLenum mode)
GLboolean glIsBuffer_enc(void *self , GLuint buffer)
{
+ AEMU_SCOPED_TRACE("glIsBuffer encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2717,6 +2808,7 @@ GLboolean glIsBuffer_enc(void *self , GLuint buffer)
GLboolean glIsEnabled_enc(void *self , GLenum cap)
{
+ AEMU_SCOPED_TRACE("glIsEnabled encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2757,6 +2849,7 @@ GLboolean glIsEnabled_enc(void *self , GLenum cap)
GLboolean glIsTexture_enc(void *self , GLuint texture)
{
+ AEMU_SCOPED_TRACE("glIsTexture encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2797,6 +2890,7 @@ GLboolean glIsTexture_enc(void *self , GLuint texture)
void glLightModelx_enc(void *self , GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glLightModelx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2823,6 +2917,7 @@ void glLightModelx_enc(void *self , GLenum pname, GLfixed param)
void glLightModelxv_enc(void *self , GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glLightModelxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2851,6 +2946,7 @@ void glLightModelxv_enc(void *self , GLenum pname, const GLfixed* params)
void glLightx_enc(void *self , GLenum light, GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glLightx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2878,6 +2974,7 @@ void glLightx_enc(void *self , GLenum light, GLenum pname, GLfixed param)
void glLightxv_enc(void *self , GLenum light, GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glLightxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2907,6 +3004,7 @@ void glLightxv_enc(void *self , GLenum light, GLenum pname, const GLfixed* param
void glLineWidthx_enc(void *self , GLfixed width)
{
+ AEMU_SCOPED_TRACE("glLineWidthx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2932,6 +3030,7 @@ void glLineWidthx_enc(void *self , GLfixed width)
void glLoadIdentity_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glLoadIdentity encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2956,6 +3055,7 @@ void glLoadIdentity_enc(void *self )
void glLoadMatrixx_enc(void *self , const GLfixed* m)
{
+ AEMU_SCOPED_TRACE("glLoadMatrixx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2983,6 +3083,7 @@ void glLoadMatrixx_enc(void *self , const GLfixed* m)
void glLogicOp_enc(void *self , GLenum opcode)
{
+ AEMU_SCOPED_TRACE("glLogicOp encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3008,6 +3109,7 @@ void glLogicOp_enc(void *self , GLenum opcode)
void glMaterialx_enc(void *self , GLenum face, GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glMaterialx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3035,6 +3137,7 @@ void glMaterialx_enc(void *self , GLenum face, GLenum pname, GLfixed param)
void glMaterialxv_enc(void *self , GLenum face, GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glMaterialxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3064,6 +3167,7 @@ void glMaterialxv_enc(void *self , GLenum face, GLenum pname, const GLfixed* par
void glMatrixMode_enc(void *self , GLenum mode)
{
+ AEMU_SCOPED_TRACE("glMatrixMode encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3089,6 +3193,7 @@ void glMatrixMode_enc(void *self , GLenum mode)
void glMultMatrixx_enc(void *self , const GLfixed* m)
{
+ AEMU_SCOPED_TRACE("glMultMatrixx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3116,6 +3221,7 @@ void glMultMatrixx_enc(void *self , const GLfixed* m)
void glMultiTexCoord4x_enc(void *self , GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
{
+ AEMU_SCOPED_TRACE("glMultiTexCoord4x encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3145,6 +3251,7 @@ void glMultiTexCoord4x_enc(void *self , GLenum target, GLfixed s, GLfixed t, GLf
void glNormal3x_enc(void *self , GLfixed nx, GLfixed ny, GLfixed nz)
{
+ AEMU_SCOPED_TRACE("glNormal3x encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3172,6 +3279,7 @@ void glNormal3x_enc(void *self , GLfixed nx, GLfixed ny, GLfixed nz)
void glOrthox_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
{
+ AEMU_SCOPED_TRACE("glOrthox encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3202,6 +3310,7 @@ void glOrthox_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfi
void glPixelStorei_enc(void *self , GLenum pname, GLint param)
{
+ AEMU_SCOPED_TRACE("glPixelStorei encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3228,6 +3337,7 @@ void glPixelStorei_enc(void *self , GLenum pname, GLint param)
void glPointParameterx_enc(void *self , GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glPointParameterx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3254,6 +3364,7 @@ void glPointParameterx_enc(void *self , GLenum pname, GLfixed param)
void glPointParameterxv_enc(void *self , GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glPointParameterxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3282,6 +3393,7 @@ void glPointParameterxv_enc(void *self , GLenum pname, const GLfixed* params)
void glPointSizex_enc(void *self , GLfixed size)
{
+ AEMU_SCOPED_TRACE("glPointSizex encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3307,6 +3419,7 @@ void glPointSizex_enc(void *self , GLfixed size)
void glPolygonOffsetx_enc(void *self , GLfixed factor, GLfixed units)
{
+ AEMU_SCOPED_TRACE("glPolygonOffsetx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3333,6 +3446,7 @@ void glPolygonOffsetx_enc(void *self , GLfixed factor, GLfixed units)
void glPopMatrix_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glPopMatrix encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3357,6 +3471,7 @@ void glPopMatrix_enc(void *self )
void glPushMatrix_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glPushMatrix encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3381,6 +3496,7 @@ void glPushMatrix_enc(void *self )
void glReadPixels_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
{
+ AEMU_SCOPED_TRACE("glReadPixels encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3425,6 +3541,7 @@ void glReadPixels_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei heig
void glRotatex_enc(void *self , GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
{
+ AEMU_SCOPED_TRACE("glRotatex encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3453,6 +3570,7 @@ void glRotatex_enc(void *self , GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
void glSampleCoverage_enc(void *self , GLclampf value, GLboolean invert)
{
+ AEMU_SCOPED_TRACE("glSampleCoverage encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3479,6 +3597,7 @@ void glSampleCoverage_enc(void *self , GLclampf value, GLboolean invert)
void glSampleCoveragex_enc(void *self , GLclampx value, GLboolean invert)
{
+ AEMU_SCOPED_TRACE("glSampleCoveragex encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3505,6 +3624,7 @@ void glSampleCoveragex_enc(void *self , GLclampx value, GLboolean invert)
void glScalex_enc(void *self , GLfixed x, GLfixed y, GLfixed z)
{
+ AEMU_SCOPED_TRACE("glScalex encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3532,6 +3652,7 @@ void glScalex_enc(void *self , GLfixed x, GLfixed y, GLfixed z)
void glScissor_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glScissor encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3560,6 +3681,7 @@ void glScissor_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height)
void glShadeModel_enc(void *self , GLenum mode)
{
+ AEMU_SCOPED_TRACE("glShadeModel encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3585,6 +3707,7 @@ void glShadeModel_enc(void *self , GLenum mode)
void glStencilFunc_enc(void *self , GLenum func, GLint ref, GLuint mask)
{
+ AEMU_SCOPED_TRACE("glStencilFunc encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3612,6 +3735,7 @@ void glStencilFunc_enc(void *self , GLenum func, GLint ref, GLuint mask)
void glStencilMask_enc(void *self , GLuint mask)
{
+ AEMU_SCOPED_TRACE("glStencilMask encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3637,6 +3761,7 @@ void glStencilMask_enc(void *self , GLuint mask)
void glStencilOp_enc(void *self , GLenum fail, GLenum zfail, GLenum zpass)
{
+ AEMU_SCOPED_TRACE("glStencilOp encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3664,6 +3789,7 @@ void glStencilOp_enc(void *self , GLenum fail, GLenum zfail, GLenum zpass)
void glTexEnvi_enc(void *self , GLenum target, GLenum pname, GLint param)
{
+ AEMU_SCOPED_TRACE("glTexEnvi encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3691,6 +3817,7 @@ void glTexEnvi_enc(void *self , GLenum target, GLenum pname, GLint param)
void glTexEnvx_enc(void *self , GLenum target, GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glTexEnvx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3718,6 +3845,7 @@ void glTexEnvx_enc(void *self , GLenum target, GLenum pname, GLfixed param)
void glTexEnviv_enc(void *self , GLenum target, GLenum pname, const GLint* params)
{
+ AEMU_SCOPED_TRACE("glTexEnviv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3747,6 +3875,7 @@ void glTexEnviv_enc(void *self , GLenum target, GLenum pname, const GLint* param
void glTexEnvxv_enc(void *self , GLenum target, GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glTexEnvxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3776,6 +3905,7 @@ void glTexEnvxv_enc(void *self , GLenum target, GLenum pname, const GLfixed* par
void glTexImage2D_enc(void *self , GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
{
+ AEMU_SCOPED_TRACE("glTexImage2D encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3817,6 +3947,7 @@ void glTexImage2D_enc(void *self , GLenum target, GLint level, GLint internalfor
void glTexParameteri_enc(void *self , GLenum target, GLenum pname, GLint param)
{
+ AEMU_SCOPED_TRACE("glTexParameteri encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3844,6 +3975,7 @@ void glTexParameteri_enc(void *self , GLenum target, GLenum pname, GLint param)
void glTexParameterx_enc(void *self , GLenum target, GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glTexParameterx encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3871,6 +4003,7 @@ void glTexParameterx_enc(void *self , GLenum target, GLenum pname, GLfixed param
void glTexParameteriv_enc(void *self , GLenum target, GLenum pname, const GLint* params)
{
+ AEMU_SCOPED_TRACE("glTexParameteriv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3900,6 +4033,7 @@ void glTexParameteriv_enc(void *self , GLenum target, GLenum pname, const GLint*
void glTexParameterxv_enc(void *self , GLenum target, GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glTexParameterxv encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3929,6 +4063,7 @@ void glTexParameterxv_enc(void *self , GLenum target, GLenum pname, const GLfixe
void glTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
{
+ AEMU_SCOPED_TRACE("glTexSubImage2D encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3970,6 +4105,7 @@ void glTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset,
void glTranslatex_enc(void *self , GLfixed x, GLfixed y, GLfixed z)
{
+ AEMU_SCOPED_TRACE("glTranslatex encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3997,6 +4133,7 @@ void glTranslatex_enc(void *self , GLfixed x, GLfixed y, GLfixed z)
void glViewport_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glViewport encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4025,6 +4162,7 @@ void glViewport_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height
void glVertexPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stride, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glVertexPointerOffset encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4053,6 +4191,7 @@ void glVertexPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei str
void glColorPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stride, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glColorPointerOffset encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4081,6 +4220,7 @@ void glColorPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stri
void glNormalPointerOffset_enc(void *self , GLenum type, GLsizei stride, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glNormalPointerOffset encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4108,6 +4248,7 @@ void glNormalPointerOffset_enc(void *self , GLenum type, GLsizei stride, GLuint
void glPointSizePointerOffset_enc(void *self , GLenum type, GLsizei stride, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glPointSizePointerOffset encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4135,6 +4276,7 @@ void glPointSizePointerOffset_enc(void *self , GLenum type, GLsizei stride, GLui
void glTexCoordPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stride, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glTexCoordPointerOffset encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4163,6 +4305,7 @@ void glTexCoordPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei s
void glWeightPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stride, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glWeightPointerOffset encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4191,6 +4334,7 @@ void glWeightPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei str
void glMatrixIndexPointerOffset_enc(void *self , GLint size, GLenum type, GLsizei stride, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glMatrixIndexPointerOffset encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4219,6 +4363,7 @@ void glMatrixIndexPointerOffset_enc(void *self , GLint size, GLenum type, GLsize
void glVertexPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glVertexPointerData encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4250,6 +4395,7 @@ void glVertexPointerData_enc(void *self , GLint size, GLenum type, GLsizei strid
void glColorPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glColorPointerData encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4281,6 +4427,7 @@ void glColorPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride
void glNormalPointerData_enc(void *self , GLenum type, GLsizei stride, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glNormalPointerData encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4311,6 +4458,7 @@ void glNormalPointerData_enc(void *self , GLenum type, GLsizei stride, void* dat
void glTexCoordPointerData_enc(void *self , GLint unit, GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glTexCoordPointerData encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4343,6 +4491,7 @@ void glTexCoordPointerData_enc(void *self , GLint unit, GLint size, GLenum type,
void glPointSizePointerData_enc(void *self , GLenum type, GLsizei stride, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glPointSizePointerData encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4373,6 +4522,7 @@ void glPointSizePointerData_enc(void *self , GLenum type, GLsizei stride, void*
void glWeightPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glWeightPointerData encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4404,6 +4554,7 @@ void glWeightPointerData_enc(void *self , GLint size, GLenum type, GLsizei strid
void glMatrixIndexPointerData_enc(void *self , GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glMatrixIndexPointerData encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4435,6 +4586,7 @@ void glMatrixIndexPointerData_enc(void *self , GLint size, GLenum type, GLsizei
void glDrawElementsOffset_enc(void *self , GLenum mode, GLsizei count, GLenum type, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glDrawElementsOffset encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4463,6 +4615,7 @@ void glDrawElementsOffset_enc(void *self , GLenum mode, GLsizei count, GLenum ty
void glDrawElementsData_enc(void *self , GLenum mode, GLsizei count, GLenum type, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glDrawElementsData encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4494,6 +4647,7 @@ void glDrawElementsData_enc(void *self , GLenum mode, GLsizei count, GLenum type
void glGetCompressedTextureFormats_enc(void *self , int count, GLint* formats)
{
+ AEMU_SCOPED_TRACE("glGetCompressedTextureFormats encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4533,6 +4687,7 @@ void glGetCompressedTextureFormats_enc(void *self , int count, GLint* formats)
int glFinishRoundTrip_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glFinishRoundTrip encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4572,6 +4727,7 @@ int glFinishRoundTrip_enc(void *self )
void glBlendEquationSeparateOES_enc(void *self , GLenum modeRGB, GLenum modeAlpha)
{
+ AEMU_SCOPED_TRACE("glBlendEquationSeparateOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4598,6 +4754,7 @@ void glBlendEquationSeparateOES_enc(void *self , GLenum modeRGB, GLenum modeAlph
void glBlendFuncSeparateOES_enc(void *self , GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
{
+ AEMU_SCOPED_TRACE("glBlendFuncSeparateOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4626,6 +4783,7 @@ void glBlendFuncSeparateOES_enc(void *self , GLenum srcRGB, GLenum dstRGB, GLenu
void glBlendEquationOES_enc(void *self , GLenum mode)
{
+ AEMU_SCOPED_TRACE("glBlendEquationOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4651,6 +4809,7 @@ void glBlendEquationOES_enc(void *self , GLenum mode)
void glDrawTexsOES_enc(void *self , GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
{
+ AEMU_SCOPED_TRACE("glDrawTexsOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4680,6 +4839,7 @@ void glDrawTexsOES_enc(void *self , GLshort x, GLshort y, GLshort z, GLshort wid
void glDrawTexiOES_enc(void *self , GLint x, GLint y, GLint z, GLint width, GLint height)
{
+ AEMU_SCOPED_TRACE("glDrawTexiOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4709,6 +4869,7 @@ void glDrawTexiOES_enc(void *self , GLint x, GLint y, GLint z, GLint width, GLin
void glDrawTexxOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
{
+ AEMU_SCOPED_TRACE("glDrawTexxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4738,6 +4899,7 @@ void glDrawTexxOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z, GLfixed wid
void glDrawTexsvOES_enc(void *self , const GLshort* coords)
{
+ AEMU_SCOPED_TRACE("glDrawTexsvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4765,6 +4927,7 @@ void glDrawTexsvOES_enc(void *self , const GLshort* coords)
void glDrawTexivOES_enc(void *self , const GLint* coords)
{
+ AEMU_SCOPED_TRACE("glDrawTexivOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4792,6 +4955,7 @@ void glDrawTexivOES_enc(void *self , const GLint* coords)
void glDrawTexxvOES_enc(void *self , const GLfixed* coords)
{
+ AEMU_SCOPED_TRACE("glDrawTexxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4819,6 +4983,7 @@ void glDrawTexxvOES_enc(void *self , const GLfixed* coords)
void glDrawTexfOES_enc(void *self , GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
{
+ AEMU_SCOPED_TRACE("glDrawTexfOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4848,6 +5013,7 @@ void glDrawTexfOES_enc(void *self , GLfloat x, GLfloat y, GLfloat z, GLfloat wid
void glDrawTexfvOES_enc(void *self , const GLfloat* coords)
{
+ AEMU_SCOPED_TRACE("glDrawTexfvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4875,6 +5041,7 @@ void glDrawTexfvOES_enc(void *self , const GLfloat* coords)
void glEGLImageTargetTexture2DOES_enc(void *self , GLenum target, GLeglImageOES image)
{
+ AEMU_SCOPED_TRACE("glEGLImageTargetTexture2DOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4901,6 +5068,7 @@ void glEGLImageTargetTexture2DOES_enc(void *self , GLenum target, GLeglImageOES
void glEGLImageTargetRenderbufferStorageOES_enc(void *self , GLenum target, GLeglImageOES image)
{
+ AEMU_SCOPED_TRACE("glEGLImageTargetRenderbufferStorageOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4927,6 +5095,7 @@ void glEGLImageTargetRenderbufferStorageOES_enc(void *self , GLenum target, GLeg
void glAlphaFuncxOES_enc(void *self , GLenum func, GLclampx ref)
{
+ AEMU_SCOPED_TRACE("glAlphaFuncxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4953,6 +5122,7 @@ void glAlphaFuncxOES_enc(void *self , GLenum func, GLclampx ref)
void glClearColorxOES_enc(void *self , GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
{
+ AEMU_SCOPED_TRACE("glClearColorxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4981,6 +5151,7 @@ void glClearColorxOES_enc(void *self , GLclampx red, GLclampx green, GLclampx bl
void glClearDepthxOES_enc(void *self , GLclampx depth)
{
+ AEMU_SCOPED_TRACE("glClearDepthxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5006,6 +5177,7 @@ void glClearDepthxOES_enc(void *self , GLclampx depth)
void glClipPlanexOES_enc(void *self , GLenum plane, const GLfixed* equation)
{
+ AEMU_SCOPED_TRACE("glClipPlanexOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5034,6 +5206,7 @@ void glClipPlanexOES_enc(void *self , GLenum plane, const GLfixed* equation)
void glClipPlanexIMG_enc(void *self , GLenum plane, const GLfixed* equation)
{
+ AEMU_SCOPED_TRACE("glClipPlanexIMG encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5062,6 +5235,7 @@ void glClipPlanexIMG_enc(void *self , GLenum plane, const GLfixed* equation)
void glColor4xOES_enc(void *self , GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
{
+ AEMU_SCOPED_TRACE("glColor4xOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5090,6 +5264,7 @@ void glColor4xOES_enc(void *self , GLfixed red, GLfixed green, GLfixed blue, GLf
void glDepthRangexOES_enc(void *self , GLclampx zNear, GLclampx zFar)
{
+ AEMU_SCOPED_TRACE("glDepthRangexOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5116,6 +5291,7 @@ void glDepthRangexOES_enc(void *self , GLclampx zNear, GLclampx zFar)
void glFogxOES_enc(void *self , GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glFogxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5142,6 +5318,7 @@ void glFogxOES_enc(void *self , GLenum pname, GLfixed param)
void glFogxvOES_enc(void *self , GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glFogxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5170,6 +5347,7 @@ void glFogxvOES_enc(void *self , GLenum pname, const GLfixed* params)
void glFrustumxOES_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
{
+ AEMU_SCOPED_TRACE("glFrustumxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5200,6 +5378,7 @@ void glFrustumxOES_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom,
void glGetClipPlanexOES_enc(void *self , GLenum pname, GLfixed* eqn)
{
+ AEMU_SCOPED_TRACE("glGetClipPlanexOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5239,6 +5418,7 @@ void glGetClipPlanexOES_enc(void *self , GLenum pname, GLfixed* eqn)
void glGetClipPlanex_enc(void *self , GLenum pname, GLfixed* eqn)
{
+ AEMU_SCOPED_TRACE("glGetClipPlanex encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5278,6 +5458,7 @@ void glGetClipPlanex_enc(void *self , GLenum pname, GLfixed* eqn)
void glGetFixedvOES_enc(void *self , GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetFixedvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5317,6 +5498,7 @@ void glGetFixedvOES_enc(void *self , GLenum pname, GLfixed* params)
void glGetLightxvOES_enc(void *self , GLenum light, GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetLightxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5357,6 +5539,7 @@ void glGetLightxvOES_enc(void *self , GLenum light, GLenum pname, GLfixed* param
void glGetMaterialxvOES_enc(void *self , GLenum face, GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetMaterialxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5397,6 +5580,7 @@ void glGetMaterialxvOES_enc(void *self , GLenum face, GLenum pname, GLfixed* par
void glGetTexEnvxvOES_enc(void *self , GLenum env, GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetTexEnvxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5437,6 +5621,7 @@ void glGetTexEnvxvOES_enc(void *self , GLenum env, GLenum pname, GLfixed* params
void glGetTexParameterxvOES_enc(void *self , GLenum target, GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetTexParameterxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5477,6 +5662,7 @@ void glGetTexParameterxvOES_enc(void *self , GLenum target, GLenum pname, GLfixe
void glLightModelxOES_enc(void *self , GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glLightModelxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5503,6 +5689,7 @@ void glLightModelxOES_enc(void *self , GLenum pname, GLfixed param)
void glLightModelxvOES_enc(void *self , GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glLightModelxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5531,6 +5718,7 @@ void glLightModelxvOES_enc(void *self , GLenum pname, const GLfixed* params)
void glLightxOES_enc(void *self , GLenum light, GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glLightxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5558,6 +5746,7 @@ void glLightxOES_enc(void *self , GLenum light, GLenum pname, GLfixed param)
void glLightxvOES_enc(void *self , GLenum light, GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glLightxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5587,6 +5776,7 @@ void glLightxvOES_enc(void *self , GLenum light, GLenum pname, const GLfixed* pa
void glLineWidthxOES_enc(void *self , GLfixed width)
{
+ AEMU_SCOPED_TRACE("glLineWidthxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5612,6 +5802,7 @@ void glLineWidthxOES_enc(void *self , GLfixed width)
void glLoadMatrixxOES_enc(void *self , const GLfixed* m)
{
+ AEMU_SCOPED_TRACE("glLoadMatrixxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5639,6 +5830,7 @@ void glLoadMatrixxOES_enc(void *self , const GLfixed* m)
void glMaterialxOES_enc(void *self , GLenum face, GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glMaterialxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5666,6 +5858,7 @@ void glMaterialxOES_enc(void *self , GLenum face, GLenum pname, GLfixed param)
void glMaterialxvOES_enc(void *self , GLenum face, GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glMaterialxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5695,6 +5888,7 @@ void glMaterialxvOES_enc(void *self , GLenum face, GLenum pname, const GLfixed*
void glMultMatrixxOES_enc(void *self , const GLfixed* m)
{
+ AEMU_SCOPED_TRACE("glMultMatrixxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5722,6 +5916,7 @@ void glMultMatrixxOES_enc(void *self , const GLfixed* m)
void glMultiTexCoord4xOES_enc(void *self , GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
{
+ AEMU_SCOPED_TRACE("glMultiTexCoord4xOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5751,6 +5946,7 @@ void glMultiTexCoord4xOES_enc(void *self , GLenum target, GLfixed s, GLfixed t,
void glNormal3xOES_enc(void *self , GLfixed nx, GLfixed ny, GLfixed nz)
{
+ AEMU_SCOPED_TRACE("glNormal3xOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5778,6 +5974,7 @@ void glNormal3xOES_enc(void *self , GLfixed nx, GLfixed ny, GLfixed nz)
void glOrthoxOES_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
{
+ AEMU_SCOPED_TRACE("glOrthoxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5808,6 +6005,7 @@ void glOrthoxOES_enc(void *self , GLfixed left, GLfixed right, GLfixed bottom, G
void glPointParameterxOES_enc(void *self , GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glPointParameterxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5834,6 +6032,7 @@ void glPointParameterxOES_enc(void *self , GLenum pname, GLfixed param)
void glPointParameterxvOES_enc(void *self , GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glPointParameterxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5862,6 +6061,7 @@ void glPointParameterxvOES_enc(void *self , GLenum pname, const GLfixed* params)
void glPointSizexOES_enc(void *self , GLfixed size)
{
+ AEMU_SCOPED_TRACE("glPointSizexOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5887,6 +6087,7 @@ void glPointSizexOES_enc(void *self , GLfixed size)
void glPolygonOffsetxOES_enc(void *self , GLfixed factor, GLfixed units)
{
+ AEMU_SCOPED_TRACE("glPolygonOffsetxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5913,6 +6114,7 @@ void glPolygonOffsetxOES_enc(void *self , GLfixed factor, GLfixed units)
void glRotatexOES_enc(void *self , GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
{
+ AEMU_SCOPED_TRACE("glRotatexOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5941,6 +6143,7 @@ void glRotatexOES_enc(void *self , GLfixed angle, GLfixed x, GLfixed y, GLfixed
void glSampleCoveragexOES_enc(void *self , GLclampx value, GLboolean invert)
{
+ AEMU_SCOPED_TRACE("glSampleCoveragexOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5967,6 +6170,7 @@ void glSampleCoveragexOES_enc(void *self , GLclampx value, GLboolean invert)
void glScalexOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z)
{
+ AEMU_SCOPED_TRACE("glScalexOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5994,6 +6198,7 @@ void glScalexOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z)
void glTexEnvxOES_enc(void *self , GLenum target, GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glTexEnvxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6021,6 +6226,7 @@ void glTexEnvxOES_enc(void *self , GLenum target, GLenum pname, GLfixed param)
void glTexEnvxvOES_enc(void *self , GLenum target, GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glTexEnvxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6050,6 +6256,7 @@ void glTexEnvxvOES_enc(void *self , GLenum target, GLenum pname, const GLfixed*
void glTexParameterxOES_enc(void *self , GLenum target, GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glTexParameterxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6077,6 +6284,7 @@ void glTexParameterxOES_enc(void *self , GLenum target, GLenum pname, GLfixed pa
void glTexParameterxvOES_enc(void *self , GLenum target, GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glTexParameterxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6106,6 +6314,7 @@ void glTexParameterxvOES_enc(void *self , GLenum target, GLenum pname, const GLf
void glTranslatexOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z)
{
+ AEMU_SCOPED_TRACE("glTranslatexOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6133,6 +6342,7 @@ void glTranslatexOES_enc(void *self , GLfixed x, GLfixed y, GLfixed z)
GLboolean glIsRenderbufferOES_enc(void *self , GLuint renderbuffer)
{
+ AEMU_SCOPED_TRACE("glIsRenderbufferOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6173,6 +6383,7 @@ GLboolean glIsRenderbufferOES_enc(void *self , GLuint renderbuffer)
void glBindRenderbufferOES_enc(void *self , GLenum target, GLuint renderbuffer)
{
+ AEMU_SCOPED_TRACE("glBindRenderbufferOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6199,6 +6410,7 @@ void glBindRenderbufferOES_enc(void *self , GLenum target, GLuint renderbuffer)
void glDeleteRenderbuffersOES_enc(void *self , GLsizei n, const GLuint* renderbuffers)
{
+ AEMU_SCOPED_TRACE("glDeleteRenderbuffersOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6227,6 +6439,7 @@ void glDeleteRenderbuffersOES_enc(void *self , GLsizei n, const GLuint* renderbu
void glGenRenderbuffersOES_enc(void *self , GLsizei n, GLuint* renderbuffers)
{
+ AEMU_SCOPED_TRACE("glGenRenderbuffersOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6266,6 +6479,7 @@ void glGenRenderbuffersOES_enc(void *self , GLsizei n, GLuint* renderbuffers)
void glRenderbufferStorageOES_enc(void *self , GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glRenderbufferStorageOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6294,6 +6508,7 @@ void glRenderbufferStorageOES_enc(void *self , GLenum target, GLenum internalfor
void glGetRenderbufferParameterivOES_enc(void *self , GLenum target, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetRenderbufferParameterivOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6334,6 +6549,7 @@ void glGetRenderbufferParameterivOES_enc(void *self , GLenum target, GLenum pnam
GLboolean glIsFramebufferOES_enc(void *self , GLuint framebuffer)
{
+ AEMU_SCOPED_TRACE("glIsFramebufferOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6374,6 +6590,7 @@ GLboolean glIsFramebufferOES_enc(void *self , GLuint framebuffer)
void glBindFramebufferOES_enc(void *self , GLenum target, GLuint framebuffer)
{
+ AEMU_SCOPED_TRACE("glBindFramebufferOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6400,6 +6617,7 @@ void glBindFramebufferOES_enc(void *self , GLenum target, GLuint framebuffer)
void glDeleteFramebuffersOES_enc(void *self , GLsizei n, const GLuint* framebuffers)
{
+ AEMU_SCOPED_TRACE("glDeleteFramebuffersOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6428,6 +6646,7 @@ void glDeleteFramebuffersOES_enc(void *self , GLsizei n, const GLuint* framebuff
void glGenFramebuffersOES_enc(void *self , GLsizei n, GLuint* framebuffers)
{
+ AEMU_SCOPED_TRACE("glGenFramebuffersOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6467,6 +6686,7 @@ void glGenFramebuffersOES_enc(void *self , GLsizei n, GLuint* framebuffers)
GLenum glCheckFramebufferStatusOES_enc(void *self , GLenum target)
{
+ AEMU_SCOPED_TRACE("glCheckFramebufferStatusOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6507,6 +6727,7 @@ GLenum glCheckFramebufferStatusOES_enc(void *self , GLenum target)
void glFramebufferRenderbufferOES_enc(void *self , GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
{
+ AEMU_SCOPED_TRACE("glFramebufferRenderbufferOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6535,6 +6756,7 @@ void glFramebufferRenderbufferOES_enc(void *self , GLenum target, GLenum attachm
void glFramebufferTexture2DOES_enc(void *self , GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
{
+ AEMU_SCOPED_TRACE("glFramebufferTexture2DOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6564,6 +6786,7 @@ void glFramebufferTexture2DOES_enc(void *self , GLenum target, GLenum attachment
void glGetFramebufferAttachmentParameterivOES_enc(void *self , GLenum target, GLenum attachment, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetFramebufferAttachmentParameterivOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6605,6 +6828,7 @@ void glGetFramebufferAttachmentParameterivOES_enc(void *self , GLenum target, GL
void glGenerateMipmapOES_enc(void *self , GLenum target)
{
+ AEMU_SCOPED_TRACE("glGenerateMipmapOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6630,6 +6854,7 @@ void glGenerateMipmapOES_enc(void *self , GLenum target)
GLboolean glUnmapBufferOES_enc(void *self , GLenum target)
{
+ AEMU_SCOPED_TRACE("glUnmapBufferOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6670,6 +6895,7 @@ GLboolean glUnmapBufferOES_enc(void *self , GLenum target)
void glCurrentPaletteMatrixOES_enc(void *self , GLuint matrixpaletteindex)
{
+ AEMU_SCOPED_TRACE("glCurrentPaletteMatrixOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6695,6 +6921,7 @@ void glCurrentPaletteMatrixOES_enc(void *self , GLuint matrixpaletteindex)
void glLoadPaletteFromModelViewMatrixOES_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glLoadPaletteFromModelViewMatrixOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6719,6 +6946,7 @@ void glLoadPaletteFromModelViewMatrixOES_enc(void *self )
GLbitfield glQueryMatrixxOES_enc(void *self , GLfixed* mantissa, GLint* exponent)
{
+ AEMU_SCOPED_TRACE("glQueryMatrixxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6766,6 +6994,7 @@ GLbitfield glQueryMatrixxOES_enc(void *self , GLfixed* mantissa, GLint* exponent
void glDepthRangefOES_enc(void *self , GLclampf zNear, GLclampf zFar)
{
+ AEMU_SCOPED_TRACE("glDepthRangefOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6792,6 +7021,7 @@ void glDepthRangefOES_enc(void *self , GLclampf zNear, GLclampf zFar)
void glFrustumfOES_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
{
+ AEMU_SCOPED_TRACE("glFrustumfOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6822,6 +7052,7 @@ void glFrustumfOES_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom,
void glOrthofOES_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
{
+ AEMU_SCOPED_TRACE("glOrthofOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6852,6 +7083,7 @@ void glOrthofOES_enc(void *self , GLfloat left, GLfloat right, GLfloat bottom, G
void glClipPlanefOES_enc(void *self , GLenum plane, const GLfloat* equation)
{
+ AEMU_SCOPED_TRACE("glClipPlanefOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6880,6 +7112,7 @@ void glClipPlanefOES_enc(void *self , GLenum plane, const GLfloat* equation)
void glClipPlanefIMG_enc(void *self , GLenum plane, const GLfloat* equation)
{
+ AEMU_SCOPED_TRACE("glClipPlanefIMG encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6908,6 +7141,7 @@ void glClipPlanefIMG_enc(void *self , GLenum plane, const GLfloat* equation)
void glGetClipPlanefOES_enc(void *self , GLenum pname, GLfloat* eqn)
{
+ AEMU_SCOPED_TRACE("glGetClipPlanefOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6947,6 +7181,7 @@ void glGetClipPlanefOES_enc(void *self , GLenum pname, GLfloat* eqn)
void glClearDepthfOES_enc(void *self , GLclampf depth)
{
+ AEMU_SCOPED_TRACE("glClearDepthfOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6972,6 +7207,7 @@ void glClearDepthfOES_enc(void *self , GLclampf depth)
void glTexGenfOES_enc(void *self , GLenum coord, GLenum pname, GLfloat param)
{
+ AEMU_SCOPED_TRACE("glTexGenfOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6999,6 +7235,7 @@ void glTexGenfOES_enc(void *self , GLenum coord, GLenum pname, GLfloat param)
void glTexGenfvOES_enc(void *self , GLenum coord, GLenum pname, const GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glTexGenfvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7028,6 +7265,7 @@ void glTexGenfvOES_enc(void *self , GLenum coord, GLenum pname, const GLfloat* p
void glTexGeniOES_enc(void *self , GLenum coord, GLenum pname, GLint param)
{
+ AEMU_SCOPED_TRACE("glTexGeniOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7055,6 +7293,7 @@ void glTexGeniOES_enc(void *self , GLenum coord, GLenum pname, GLint param)
void glTexGenivOES_enc(void *self , GLenum coord, GLenum pname, const GLint* params)
{
+ AEMU_SCOPED_TRACE("glTexGenivOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7084,6 +7323,7 @@ void glTexGenivOES_enc(void *self , GLenum coord, GLenum pname, const GLint* par
void glTexGenxOES_enc(void *self , GLenum coord, GLenum pname, GLfixed param)
{
+ AEMU_SCOPED_TRACE("glTexGenxOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7111,6 +7351,7 @@ void glTexGenxOES_enc(void *self , GLenum coord, GLenum pname, GLfixed param)
void glTexGenxvOES_enc(void *self , GLenum coord, GLenum pname, const GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glTexGenxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7140,6 +7381,7 @@ void glTexGenxvOES_enc(void *self , GLenum coord, GLenum pname, const GLfixed* p
void glGetTexGenfvOES_enc(void *self , GLenum coord, GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetTexGenfvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7169,6 +7411,7 @@ void glGetTexGenfvOES_enc(void *self , GLenum coord, GLenum pname, GLfloat* para
void glGetTexGenivOES_enc(void *self , GLenum coord, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetTexGenivOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7198,6 +7441,7 @@ void glGetTexGenivOES_enc(void *self , GLenum coord, GLenum pname, GLint* params
void glGetTexGenxvOES_enc(void *self , GLenum coord, GLenum pname, GLfixed* params)
{
+ AEMU_SCOPED_TRACE("glGetTexGenxvOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7227,6 +7471,7 @@ void glGetTexGenxvOES_enc(void *self , GLenum coord, GLenum pname, GLfixed* para
void glBindVertexArrayOES_enc(void *self , GLuint array)
{
+ AEMU_SCOPED_TRACE("glBindVertexArrayOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7252,6 +7497,7 @@ void glBindVertexArrayOES_enc(void *self , GLuint array)
void glDeleteVertexArraysOES_enc(void *self , GLsizei n, const GLuint* arrays)
{
+ AEMU_SCOPED_TRACE("glDeleteVertexArraysOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7280,6 +7526,7 @@ void glDeleteVertexArraysOES_enc(void *self , GLsizei n, const GLuint* arrays)
void glGenVertexArraysOES_enc(void *self , GLsizei n, GLuint* arrays)
{
+ AEMU_SCOPED_TRACE("glGenVertexArraysOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7319,6 +7566,7 @@ void glGenVertexArraysOES_enc(void *self , GLsizei n, GLuint* arrays)
GLboolean glIsVertexArrayOES_enc(void *self , GLuint array)
{
+ AEMU_SCOPED_TRACE("glIsVertexArrayOES encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7359,6 +7607,7 @@ GLboolean glIsVertexArrayOES_enc(void *self , GLuint array)
void glDiscardFramebufferEXT_enc(void *self , GLenum target, GLsizei numAttachments, const GLenum* attachments)
{
+ AEMU_SCOPED_TRACE("glDiscardFramebufferEXT encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7388,6 +7637,7 @@ void glDiscardFramebufferEXT_enc(void *self , GLenum target, GLsizei numAttachme
void glRenderbufferStorageMultisampleIMG_enc(void *self , GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glRenderbufferStorageMultisampleIMG encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7417,6 +7667,7 @@ void glRenderbufferStorageMultisampleIMG_enc(void *self , GLenum target, GLsizei
void glFramebufferTexture2DMultisampleIMG_enc(void *self , GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples)
{
+ AEMU_SCOPED_TRACE("glFramebufferTexture2DMultisampleIMG encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7447,6 +7698,7 @@ void glFramebufferTexture2DMultisampleIMG_enc(void *self , GLenum target, GLenum
void glDeleteFencesNV_enc(void *self , GLsizei n, const GLuint* fences)
{
+ AEMU_SCOPED_TRACE("glDeleteFencesNV encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7475,6 +7727,7 @@ void glDeleteFencesNV_enc(void *self , GLsizei n, const GLuint* fences)
void glGenFencesNV_enc(void *self , GLsizei n, GLuint* fences)
{
+ AEMU_SCOPED_TRACE("glGenFencesNV encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7503,6 +7756,7 @@ void glGenFencesNV_enc(void *self , GLsizei n, GLuint* fences)
GLboolean glIsFenceNV_enc(void *self , GLuint fence)
{
+ AEMU_SCOPED_TRACE("glIsFenceNV encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7543,6 +7797,7 @@ GLboolean glIsFenceNV_enc(void *self , GLuint fence)
GLboolean glTestFenceNV_enc(void *self , GLuint fence)
{
+ AEMU_SCOPED_TRACE("glTestFenceNV encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7583,6 +7838,7 @@ GLboolean glTestFenceNV_enc(void *self , GLuint fence)
void glGetFenceivNV_enc(void *self , GLuint fence, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetFenceivNV encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7623,6 +7879,7 @@ void glGetFenceivNV_enc(void *self , GLuint fence, GLenum pname, GLint* params)
void glFinishFenceNV_enc(void *self , GLuint fence)
{
+ AEMU_SCOPED_TRACE("glFinishFenceNV encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7648,6 +7905,7 @@ void glFinishFenceNV_enc(void *self , GLuint fence)
void glSetFenceNV_enc(void *self , GLuint fence, GLenum condition)
{
+ AEMU_SCOPED_TRACE("glSetFenceNV encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7674,6 +7932,7 @@ void glSetFenceNV_enc(void *self , GLuint fence, GLenum condition)
void glGetDriverControlsQCOM_enc(void *self , GLint* num, GLsizei size, GLuint* driverControls)
{
+ AEMU_SCOPED_TRACE("glGetDriverControlsQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7717,6 +7976,7 @@ void glGetDriverControlsQCOM_enc(void *self , GLint* num, GLsizei size, GLuint*
void glGetDriverControlStringQCOM_enc(void *self , GLuint driverControl, GLsizei bufSize, GLsizei* length, GLchar* driverControlString)
{
+ AEMU_SCOPED_TRACE("glGetDriverControlStringQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7761,6 +8021,7 @@ void glGetDriverControlStringQCOM_enc(void *self , GLuint driverControl, GLsizei
void glEnableDriverControlQCOM_enc(void *self , GLuint driverControl)
{
+ AEMU_SCOPED_TRACE("glEnableDriverControlQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7786,6 +8047,7 @@ void glEnableDriverControlQCOM_enc(void *self , GLuint driverControl)
void glDisableDriverControlQCOM_enc(void *self , GLuint driverControl)
{
+ AEMU_SCOPED_TRACE("glDisableDriverControlQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7811,6 +8073,7 @@ void glDisableDriverControlQCOM_enc(void *self , GLuint driverControl)
void glExtGetTexturesQCOM_enc(void *self , GLuint* textures, GLint maxTextures, GLint* numTextures)
{
+ AEMU_SCOPED_TRACE("glExtGetTexturesQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7854,6 +8117,7 @@ void glExtGetTexturesQCOM_enc(void *self , GLuint* textures, GLint maxTextures,
void glExtGetBuffersQCOM_enc(void *self , GLuint* buffers, GLint maxBuffers, GLint* numBuffers)
{
+ AEMU_SCOPED_TRACE("glExtGetBuffersQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7897,6 +8161,7 @@ void glExtGetBuffersQCOM_enc(void *self , GLuint* buffers, GLint maxBuffers, GLi
void glExtGetRenderbuffersQCOM_enc(void *self , GLuint* renderbuffers, GLint maxRenderbuffers, GLint* numRenderbuffers)
{
+ AEMU_SCOPED_TRACE("glExtGetRenderbuffersQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7940,6 +8205,7 @@ void glExtGetRenderbuffersQCOM_enc(void *self , GLuint* renderbuffers, GLint max
void glExtGetFramebuffersQCOM_enc(void *self , GLuint* framebuffers, GLint maxFramebuffers, GLint* numFramebuffers)
{
+ AEMU_SCOPED_TRACE("glExtGetFramebuffersQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7983,6 +8249,7 @@ void glExtGetFramebuffersQCOM_enc(void *self , GLuint* framebuffers, GLint maxFr
void glExtGetTexLevelParameterivQCOM_enc(void *self , GLuint texture, GLenum face, GLint level, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glExtGetTexLevelParameterivQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8025,6 +8292,7 @@ void glExtGetTexLevelParameterivQCOM_enc(void *self , GLuint texture, GLenum fac
void glExtTexObjectStateOverrideiQCOM_enc(void *self , GLenum target, GLenum pname, GLint param)
{
+ AEMU_SCOPED_TRACE("glExtTexObjectStateOverrideiQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8052,6 +8320,7 @@ void glExtTexObjectStateOverrideiQCOM_enc(void *self , GLenum target, GLenum pna
void glExtGetTexSubImageQCOM_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid* texels)
{
+ AEMU_SCOPED_TRACE("glExtGetTexSubImageQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8100,6 +8369,7 @@ void glExtGetTexSubImageQCOM_enc(void *self , GLenum target, GLint level, GLint
void glExtGetShadersQCOM_enc(void *self , GLuint* shaders, GLint maxShaders, GLint* numShaders)
{
+ AEMU_SCOPED_TRACE("glExtGetShadersQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8143,6 +8413,7 @@ void glExtGetShadersQCOM_enc(void *self , GLuint* shaders, GLint maxShaders, GLi
void glExtGetProgramsQCOM_enc(void *self , GLuint* programs, GLint maxPrograms, GLint* numPrograms)
{
+ AEMU_SCOPED_TRACE("glExtGetProgramsQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8186,6 +8457,7 @@ void glExtGetProgramsQCOM_enc(void *self , GLuint* programs, GLint maxPrograms,
GLboolean glExtIsProgramBinaryQCOM_enc(void *self , GLuint program)
{
+ AEMU_SCOPED_TRACE("glExtIsProgramBinaryQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8226,6 +8498,7 @@ GLboolean glExtIsProgramBinaryQCOM_enc(void *self , GLuint program)
void glStartTilingQCOM_enc(void *self , GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask)
{
+ AEMU_SCOPED_TRACE("glStartTilingQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8255,6 +8528,7 @@ void glStartTilingQCOM_enc(void *self , GLuint x, GLuint y, GLuint width, GLuint
void glEndTilingQCOM_enc(void *self , GLbitfield preserveMask)
{
+ AEMU_SCOPED_TRACE("glEndTilingQCOM encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8280,6 +8554,7 @@ void glEndTilingQCOM_enc(void *self , GLbitfield preserveMask)
GLenum glGetGraphicsResetStatusEXT_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glGetGraphicsResetStatusEXT encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8319,6 +8594,7 @@ GLenum glGetGraphicsResetStatusEXT_enc(void *self )
void glReadnPixelsEXT_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glReadnPixelsEXT encode");
gl_encoder_context_t *ctx = (gl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
diff --git a/system/GLESv2/CMakeLists.txt b/system/GLESv2/CMakeLists.txt
index d90502a0..b04a4bb5 100644
--- a/system/GLESv2/CMakeLists.txt
+++ b/system/GLESv2/CMakeLists.txt
@@ -4,7 +4,7 @@
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/GLESv2/Android.mk" "d8f9dda69ec57ad8b7a65f02c3335b16a4724f612dec1d1a2cd793c28c0a10f9")
set(GLESv2_emulation_src gl2.cpp)
android_add_library(TARGET GLESv2_emulation SHARED LICENSE Apache-2.0 SRC gl2.cpp)
-target_include_directories(GLESv2_emulation PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(GLESv2_emulation PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"GLESv2_emulation\"")
+target_include_directories(GLESv2_emulation PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
+target_compile_definitions(GLESv2_emulation PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"GLESv2_emulation\"")
target_compile_options(GLESv2_emulation PRIVATE "-fvisibility=default" "-Wno-unused-parameter")
-target_link_libraries(GLESv2_emulation PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui androidemu cutils utils log _renderControl_enc GLESv2_enc GLESv1_enc OpenglCodecCommon_host PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
+target_link_libraries(GLESv2_emulation PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui log _renderControl_enc GLESv2_enc GLESv1_enc OpenglCodecCommon_host cutils utils androidemu PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
diff --git a/system/GLESv2/gl2.cpp b/system/GLESv2/gl2.cpp
index a36bdd38..1c5ece7d 100644
--- a/system/GLESv2/gl2.cpp
+++ b/system/GLESv2/gl2.cpp
@@ -101,6 +101,7 @@ void glEGLImageTargetRenderbufferStorageOES(void *self, GLenum target, GLeglImag
DBG("glEGLImageTargetRenderbufferStorageOES v2 image=%p\n", img);
//TODO: check error - we don't have a way to set gl error
EGLImage_t *image = (EGLImage_t*)img;
+ GLeglImageOES hostImage = reinterpret_cast<GLeglImageOES>((intptr_t)image->host_egl_image);
if (image->target == EGL_NATIVE_BUFFER_ANDROID) {
android_native_buffer_t* native_buffer = ((EGLImage_t*)image)->native_buffer;
@@ -114,6 +115,8 @@ void glEGLImageTargetRenderbufferStorageOES(void *self, GLenum target, GLeglImag
}
DEFINE_AND_VALIDATE_HOST_CONNECTION();
+ GET_CONTEXT;
+ ctx->associateEGLImage(target, hostImage);
rcEnc->rcBindRenderbuffer(rcEnc,
grallocHelper->getHostHandle(native_buffer->handle));
} else {
diff --git a/system/GLESv2_enc/CMakeLists.txt b/system/GLESv2_enc/CMakeLists.txt
index 39a479fc..5d0f049d 100644
--- a/system/GLESv2_enc/CMakeLists.txt
+++ b/system/GLESv2_enc/CMakeLists.txt
@@ -4,7 +4,7 @@
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc/Android.mk" "df543672d1f36e43fb783b08200aa85dbf3a2e7167f8ecd7e4c01c80e6fd1650")
set(GLESv2_enc_src GL2EncoderUtils.cpp GL2Encoder.cpp GLESv2Validation.cpp gl2_client_context.cpp gl2_enc.cpp gl2_entry.cpp IOStream2.cpp)
android_add_library(TARGET GLESv2_enc SHARED LICENSE Apache-2.0 SRC GL2EncoderUtils.cpp GL2Encoder.cpp GLESv2Validation.cpp gl2_client_context.cpp gl2_enc.cpp gl2_entry.cpp IOStream2.cpp)
-target_include_directories(GLESv2_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(GLESv2_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"emuglGLESv2_enc\"")
+target_include_directories(GLESv2_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
+target_compile_definitions(GLESv2_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"emuglGLESv2_enc\"")
target_compile_options(GLESv2_enc PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-unused-private-field")
-target_link_libraries(GLESv2_enc PRIVATE OpenglCodecCommon_host cutils utils log android-emu-shared PRIVATE qemupipe_host) \ No newline at end of file
+target_link_libraries(GLESv2_enc PRIVATE OpenglCodecCommon_host cutils utils log androidemu android-emu-shared PRIVATE qemupipe_host) \ No newline at end of file
diff --git a/system/GLESv2_enc/GL2Encoder.cpp b/system/GLESv2_enc/GL2Encoder.cpp
index bafd1b6a..cca18a98 100755
--- a/system/GLESv2_enc/GL2Encoder.cpp
+++ b/system/GLESv2_enc/GL2Encoder.cpp
@@ -16,6 +16,7 @@
#include "GL2Encoder.h"
#include "GLESv2Validation.h"
+#include "GLESTextureUtils.h"
#include <string>
#include <map>
@@ -81,6 +82,7 @@ GL2Encoder::GL2Encoder(IOStream *stream, ChecksumCalculator *protocol)
m_num_compressedTextureFormats = 0;
m_max_combinedTextureImageUnits = 0;
m_max_vertexTextureImageUnits = 0;
+ m_max_array_texture_layers = 0;
m_max_textureImageUnits = 0;
m_max_cubeMapTextureSize = 0;
m_max_renderBufferSize = 0;
@@ -296,6 +298,7 @@ GL2Encoder::GL2Encoder(IOStream *stream, ChecksumCalculator *protocol)
OVERRIDE(glGenerateMipmap);
OVERRIDE(glBindSampler);
+ OVERRIDE(glDeleteSamplers);
OVERRIDE_CUSTOM(glFenceSync);
OVERRIDE_CUSTOM(glClientWaitSync);
@@ -375,6 +378,81 @@ GL2Encoder::GL2Encoder(IOStream *stream, ChecksumCalculator *protocol)
OVERRIDE(glInvalidateFramebuffer);
OVERRIDE(glInvalidateSubFramebuffer);
+
+ OVERRIDE(glDispatchCompute);
+ OVERRIDE(glDispatchComputeIndirect);
+
+ OVERRIDE(glGenTransformFeedbacks);
+ OVERRIDE(glDeleteTransformFeedbacks);
+ OVERRIDE(glGenSamplers);
+ OVERRIDE(glGenQueries);
+ OVERRIDE(glDeleteQueries);
+
+ OVERRIDE(glBindTransformFeedback);
+ OVERRIDE(glBeginQuery);
+ OVERRIDE(glEndQuery);
+
+ OVERRIDE(glClear);
+ OVERRIDE(glClearBufferfi);
+ OVERRIDE(glCopyTexSubImage2D);
+ OVERRIDE(glCopyTexSubImage3D);
+ OVERRIDE(glCompileShader);
+ OVERRIDE(glValidateProgram);
+ OVERRIDE(glProgramBinary);
+
+ OVERRIDE(glGetSamplerParameterfv);
+ OVERRIDE(glGetSamplerParameteriv);
+ OVERRIDE(glSamplerParameterf);
+ OVERRIDE(glSamplerParameteri);
+ OVERRIDE(glSamplerParameterfv);
+ OVERRIDE(glSamplerParameteriv);
+
+ OVERRIDE(glGetAttribLocation);
+
+ OVERRIDE(glBindAttribLocation);
+ OVERRIDE(glUniformBlockBinding);
+ OVERRIDE(glGetTransformFeedbackVarying);
+ OVERRIDE(glScissor);
+ OVERRIDE(glDepthFunc);
+ OVERRIDE(glViewport);
+ OVERRIDE(glStencilFunc);
+ OVERRIDE(glStencilFuncSeparate);
+ OVERRIDE(glStencilOp);
+ OVERRIDE(glStencilOpSeparate);
+ OVERRIDE(glStencilMaskSeparate);
+ OVERRIDE(glBlendEquation);
+ OVERRIDE(glBlendEquationSeparate);
+ OVERRIDE(glBlendFunc);
+ OVERRIDE(glBlendFuncSeparate);
+ OVERRIDE(glCullFace);
+ OVERRIDE(glFrontFace);
+ OVERRIDE(glLineWidth);
+ OVERRIDE(glVertexAttrib1f);
+ OVERRIDE(glVertexAttrib2f);
+ OVERRIDE(glVertexAttrib3f);
+ OVERRIDE(glVertexAttrib4f);
+ OVERRIDE(glVertexAttrib1fv);
+ OVERRIDE(glVertexAttrib2fv);
+ OVERRIDE(glVertexAttrib3fv);
+ OVERRIDE(glVertexAttrib4fv);
+ OVERRIDE(glVertexAttribI4i);
+ OVERRIDE(glVertexAttribI4ui);
+ OVERRIDE(glVertexAttribI4iv);
+ OVERRIDE(glVertexAttribI4uiv);
+
+ OVERRIDE(glGetShaderPrecisionFormat);
+ OVERRIDE(glGetProgramiv);
+ OVERRIDE(glGetActiveUniform);
+ OVERRIDE(glGetActiveUniformsiv);
+ OVERRIDE(glGetActiveUniformBlockName);
+ OVERRIDE(glGetActiveAttrib);
+ OVERRIDE(glGetRenderbufferParameteriv);
+ OVERRIDE(glGetQueryiv);
+ OVERRIDE(glGetQueryObjectuiv);
+ OVERRIDE(glIsEnabled);
+ OVERRIDE(glHint);
+
+ OVERRIDE(glGetFragDataLocation);
}
GL2Encoder::~GL2Encoder()
@@ -387,7 +465,9 @@ GLenum GL2Encoder::s_glGetError(void * self)
GL2Encoder *ctx = (GL2Encoder *)self;
GLenum err = ctx->getError();
if(err != GL_NO_ERROR) {
- ctx->m_glGetError_enc(ctx); // also clear host error
+ if (!ctx->m_noHostError) {
+ ctx->m_glGetError_enc(ctx); // also clear host error
+ }
ctx->setError(GL_NO_ERROR);
return err;
}
@@ -405,6 +485,9 @@ public:
mCtx(ctx),
guest_error(ctx->getError()),
host_error(ctx->m_glGetError_enc(ctx)) {
+ if (ctx->m_noHostError) {
+ host_error = GL_NO_ERROR;
+ }
// Preserve any existing GL error in the guest:
// OpenGL ES 3.0.5 spec:
// The command enum GetError( void ); is used to obtain error information.
@@ -577,6 +660,7 @@ void GL2Encoder::s_glBufferData(void * self, GLenum target, GLsizeiptr size, con
GLuint bufferId = ctx->m_state->getBuffer(target);
SET_ERROR_IF(bufferId==0, GL_INVALID_OPERATION);
SET_ERROR_IF(size<0, GL_INVALID_VALUE);
+ SET_ERROR_IF(!GLESv2Validation::bufferUsage(ctx, usage), GL_INVALID_ENUM);
ctx->m_shared->updateBufferData(bufferId, size, data);
ctx->m_shared->setBufferUsage(bufferId, usage);
@@ -620,18 +704,8 @@ void GL2Encoder::s_glDeleteBuffers(void * self, GLsizei n, const GLuint * buffer
}
}
-static bool isValidVertexAttribIndex(void *self, GLuint indx)
-{
- GL2Encoder *ctx = (GL2Encoder *)self;
- GLint maxIndex;
- ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex);
- return indx < maxIndex;
-}
-
#define VALIDATE_VERTEX_ATTRIB_INDEX(index) \
- SET_ERROR_WITH_MESSAGE_IF( \
- !isValidVertexAttribIndex(self, index), GL_INVALID_VALUE, \
- GLESv2Validation::vertexAttribIndexRangeErrorMsg, (ctx, index)); \
+ SET_ERROR_IF(index >= CODEC_MAX_VERTEX_ATTRIBUTES, GL_INVALID_VALUE); \
void GL2Encoder::s_glVertexAttribPointer(void *self, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * ptr)
{
@@ -719,6 +793,14 @@ void GL2Encoder::s_glGetIntegerv(void *self, GLenum param, GLint *ptr)
ctx->m_max_vertexTextureImageUnits = *ptr;
}
break;
+ case GL_MAX_ARRAY_TEXTURE_LAYERS:
+ if (ctx->m_max_array_texture_layers != 0) {
+ *ptr = ctx->m_max_array_texture_layers;
+ } else {
+ ctx->safe_glGetIntegerv(param, ptr);
+ ctx->m_max_array_texture_layers = *ptr;
+ }
+ break;
case GL_MAX_TEXTURE_IMAGE_UNITS:
if (ctx->m_max_textureImageUnits != 0) {
*ptr = ctx->m_max_textureImageUnits;
@@ -738,10 +820,7 @@ void GL2Encoder::s_glGetIntegerv(void *self, GLenum param, GLint *ptr)
case GL_MAX_VERTEX_ATTRIBS:
SET_ERROR_IF(!state, GL_INVALID_OPERATION);
- if (!state->getClientStateParameter<GLint>(param, ptr)) {
- ctx->safe_glGetIntegerv(param, ptr);
- state->setMaxVertexAttribs(*ptr);
- }
+ *ptr = CODEC_MAX_VERTEX_ATTRIBUTES;
break;
case GL_MAX_VERTEX_ATTRIB_STRIDE:
if (ctx->m_max_vertexAttribStride != 0) {
@@ -773,6 +852,13 @@ void GL2Encoder::s_glGetIntegerv(void *self, GLenum param, GLint *ptr)
} else {
ctx->safe_glGetIntegerv(param, ptr);
ctx->m_max_textureSize = *ptr;
+ if (ctx->m_max_textureSize > 0) {
+ uint32_t current = 1;
+ while (current < ctx->m_max_textureSize) {
+ ++ctx->m_log2MaxTextureSize;
+ current = current << 1;
+ }
+ }
}
break;
case GL_MAX_3D_TEXTURE_SIZE:
@@ -1046,10 +1132,8 @@ void GL2Encoder::s_glDisableVertexAttribArray(void *self, GLuint index)
void GL2Encoder::s_glGetVertexAttribiv(void *self, GLuint index, GLenum pname, GLint *params)
{
GL2Encoder *ctx = (GL2Encoder *)self;
- assert(ctx->m_state);
- GLint maxIndex;
- ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex);
- SET_ERROR_IF(!(index < maxIndex), GL_INVALID_VALUE);
+ VALIDATE_VERTEX_ATTRIB_INDEX(index);
+ SET_ERROR_IF(!GLESv2Validation::allowedGetVertexAttrib(pname), GL_INVALID_ENUM);
if (!ctx->m_state->getVertexAttribParameter<GLint>(index, pname, params)) {
ctx->m_glGetVertexAttribiv_enc(self, index, pname, params);
@@ -1059,10 +1143,8 @@ void GL2Encoder::s_glGetVertexAttribiv(void *self, GLuint index, GLenum pname, G
void GL2Encoder::s_glGetVertexAttribfv(void *self, GLuint index, GLenum pname, GLfloat *params)
{
GL2Encoder *ctx = (GL2Encoder *)self;
- assert(ctx->m_state);
- GLint maxIndex;
- ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex);
- SET_ERROR_IF(!(index < maxIndex), GL_INVALID_VALUE);
+ VALIDATE_VERTEX_ATTRIB_INDEX(index);
+ SET_ERROR_IF(!GLESv2Validation::allowedGetVertexAttrib(pname), GL_INVALID_ENUM);
if (!ctx->m_state->getVertexAttribParameter<GLfloat>(index, pname, params)) {
ctx->m_glGetVertexAttribfv_enc(self, index, pname, params);
@@ -1073,9 +1155,7 @@ void GL2Encoder::s_glGetVertexAttribPointerv(void *self, GLuint index, GLenum pn
{
GL2Encoder *ctx = (GL2Encoder *)self;
if (ctx->m_state == NULL) return;
- GLint maxIndex;
- ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex);
- SET_ERROR_IF(!(index < maxIndex), GL_INVALID_VALUE);
+ VALIDATE_VERTEX_ATTRIB_INDEX(index);
SET_ERROR_IF(pname != GL_VERTEX_ATTRIB_ARRAY_POINTER, GL_INVALID_ENUM);
(void)pname;
@@ -1239,20 +1319,24 @@ void GL2Encoder::sendVertexAttributes(GLint first, GLsizei count, bool hasClient
}
if (state.elementSize == 0) {
// The vertex attribute array is uninitialized. Abandon it.
- ALOGE("a vertex attribute array is uninitialized. Skipping corresponding vertex attribute.");
this->m_glDisableVertexAttribArray_enc(this, i);
continue;
}
m_glEnableVertexAttribArray_enc(this, i);
if (datalen && (!offset || !((unsigned char*)offset + firstIndex))) {
- ALOGD("%s: bad offset / len!!!!!", __FUNCTION__);
continue;
}
+
+ unsigned char* data = (unsigned char*)offset + firstIndex;
+ if (!m_state->isAttribIndexUsedByProgram(i)) {
+ continue;
+ }
+
if (state.isInt) {
- this->glVertexAttribIPointerDataAEMU(this, i, state.size, state.type, stride, (unsigned char *)offset + firstIndex, datalen);
+ this->glVertexAttribIPointerDataAEMU(this, i, state.size, state.type, stride, data, datalen);
} else {
- this->glVertexAttribPointerData(this, i, state.size, state.type, state.normalized, stride, (unsigned char *)offset + firstIndex, datalen);
+ this->glVertexAttribPointerData(this, i, state.size, state.type, state.normalized, stride, data, datalen);
}
} else {
const BufferData* buf = m_shared->getBufferData(bufferObject);
@@ -1267,20 +1351,24 @@ void GL2Encoder::sendVertexAttributes(GLint first, GLsizei count, bool hasClient
if (buf && firstIndex >= 0 && firstIndex + bufLen <= buf->m_size) {
if (hasClientArrays) {
m_glEnableVertexAttribArray_enc(this, i);
- if (state.isInt) {
- this->glVertexAttribIPointerOffsetAEMU(this, i, state.size, state.type, stride, offset + firstIndex);
- } else {
- this->glVertexAttribPointerOffset(this, i, state.size, state.type, state.normalized, stride, offset + firstIndex);
+ if (firstIndex) {
+ if (state.isInt) {
+ this->glVertexAttribIPointerOffsetAEMU(this, i, state.size, state.type, stride, offset + firstIndex);
+ } else {
+ this->glVertexAttribPointerOffset(this, i, state.size, state.type, state.normalized, stride, offset + firstIndex);
+ }
}
}
} else {
- ALOGE("a vertex attribute index out of boundary is detected. Skipping corresponding vertex attribute. buf=%p", buf);
- if (buf) {
- ALOGE("Out of bounds vertex attribute info: "
- "clientArray? %d attribute %d vbo %u allocedBufferSize %u bufferDataSpecified? %d wantedStart %u wantedEnd %u",
- hasClientArrays, i, bufferObject, (unsigned int)buf->m_size, buf != NULL, firstIndex, firstIndex + bufLen);
+ if (m_state->isAttribIndexUsedByProgram(i)) {
+ ALOGE("a vertex attribute index out of boundary is detected. Skipping corresponding vertex attribute. buf=%p", buf);
+ if (buf) {
+ ALOGE("Out of bounds vertex attribute info: "
+ "clientArray? %d attribute %d vbo %u allocedBufferSize %u bufferDataSpecified? %d wantedStart %u wantedEnd %u",
+ hasClientArrays, i, bufferObject, (unsigned int)buf->m_size, buf != NULL, firstIndex, firstIndex + bufLen);
+ }
+ m_glDisableVertexAttribArray_enc(this, i);
}
- m_glDisableVertexAttribArray_enc(this, i);
}
}
} else {
@@ -1324,6 +1412,7 @@ void GL2Encoder::s_glDrawArrays(void *self, GLenum mode, GLint first, GLsizei co
assert(ctx->m_state != NULL);
SET_ERROR_IF(!isValidDrawMode(mode), GL_INVALID_ENUM);
SET_ERROR_IF(count < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(ctx->m_state->checkFramebufferCompleteness(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION);
bool has_client_vertex_arrays = false;
bool has_indirect_arrays = false;
@@ -1338,6 +1427,8 @@ void GL2Encoder::s_glDrawArrays(void *self, GLenum mode, GLint first, GLsizei co
} else {
ctx->m_glDrawArrays_enc(ctx, mode, first, count);
}
+
+ ctx->m_state->postDraw();
}
@@ -1350,6 +1441,7 @@ void GL2Encoder::s_glDrawElements(void *self, GLenum mode, GLsizei count, GLenum
SET_ERROR_IF(count < 0, GL_INVALID_VALUE);
SET_ERROR_IF(!(type == GL_UNSIGNED_BYTE || type == GL_UNSIGNED_SHORT || type == GL_UNSIGNED_INT), GL_INVALID_ENUM);
SET_ERROR_IF(ctx->m_state->getTransformFeedbackActiveUnpaused(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(ctx->m_state->checkFramebufferCompleteness(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION);
bool has_client_vertex_arrays = false;
bool has_indirect_arrays = false;
@@ -1428,6 +1520,8 @@ void GL2Encoder::s_glDrawElements(void *self, GLenum mode, GLsizei count, GLenum
ALOGE("glDrawElements: direct index & direct buffer data - will be implemented in later versions;\n");
}
}
+
+ ctx->m_state->postDraw();
}
void GL2Encoder::s_glDrawArraysNullAEMU(void *self, GLenum mode, GLint first, GLsizei count)
@@ -1436,6 +1530,7 @@ void GL2Encoder::s_glDrawArraysNullAEMU(void *self, GLenum mode, GLint first, GL
assert(ctx->m_state != NULL);
SET_ERROR_IF(!isValidDrawMode(mode), GL_INVALID_ENUM);
SET_ERROR_IF(count < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(ctx->m_state->checkFramebufferCompleteness(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION);
bool has_client_vertex_arrays = false;
bool has_indirect_arrays = false;
@@ -1451,6 +1546,7 @@ void GL2Encoder::s_glDrawArraysNullAEMU(void *self, GLenum mode, GLint first, GL
ctx->m_glDrawArraysNullAEMU_enc(ctx, mode, first, count);
}
ctx->flushDrawCall();
+ ctx->m_state->postDraw();
}
void GL2Encoder::s_glDrawElementsNullAEMU(void *self, GLenum mode, GLsizei count, GLenum type, const void *indices)
@@ -1462,6 +1558,7 @@ void GL2Encoder::s_glDrawElementsNullAEMU(void *self, GLenum mode, GLsizei count
SET_ERROR_IF(count < 0, GL_INVALID_VALUE);
SET_ERROR_IF(!(type == GL_UNSIGNED_BYTE || type == GL_UNSIGNED_SHORT || type == GL_UNSIGNED_INT), GL_INVALID_ENUM);
SET_ERROR_IF(ctx->m_state->getTransformFeedbackActiveUnpaused(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(ctx->m_state->checkFramebufferCompleteness(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION);
bool has_client_vertex_arrays = false;
bool has_indirect_arrays = false;
@@ -1544,6 +1641,7 @@ void GL2Encoder::s_glDrawElementsNullAEMU(void *self, GLenum mode, GLsizei count
ALOGE("glDrawElementsNullAEMU: direct index & direct buffer data - will be implemented in later versions;\n");
}
}
+ ctx->m_state->postDraw();
}
GLint * GL2Encoder::getCompressedTextureFormats()
@@ -1795,41 +1893,96 @@ void GL2Encoder::s_glLinkProgram(void * self, GLuint program)
SET_ERROR_IF(!isProgram && !ctx->m_shared->isShader(program), GL_INVALID_VALUE);
SET_ERROR_IF(!isProgram, GL_INVALID_OPERATION);
+ if (program == ctx->m_state->currentProgram() ||
+ (!ctx->m_state->currentProgram() &&
+ (program == ctx->m_state->currentShaderProgram()))) {
+ SET_ERROR_IF(ctx->m_state->getTransformFeedbackActive(), GL_INVALID_OPERATION);
+ }
+
ctx->m_glLinkProgram_enc(self, program);
GLint linkStatus = 0;
- ctx->glGetProgramiv(self, program, GL_LINK_STATUS, &linkStatus);
+ ctx->m_glGetProgramiv_enc(self, program, GL_LINK_STATUS, &linkStatus);
+ ctx->m_shared->setProgramLinkStatus(program, linkStatus);
if (!linkStatus) {
return;
}
- //get number of active uniforms in the program
+ // get number of active uniforms and attributes in the program
GLint numUniforms=0;
- ctx->glGetProgramiv(self, program, GL_ACTIVE_UNIFORMS, &numUniforms);
- ctx->m_shared->initProgramData(program,numUniforms);
+ GLint numAttributes=0;
+ ctx->m_glGetProgramiv_enc(self, program, GL_ACTIVE_UNIFORMS, &numUniforms);
+ ctx->m_glGetProgramiv_enc(self, program, GL_ACTIVE_ATTRIBUTES, &numAttributes);
+ ctx->m_shared->initProgramData(program,numUniforms,numAttributes);
//get the length of the longest uniform name
GLint maxLength=0;
- ctx->glGetProgramiv(self, program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxLength);
+ GLint maxAttribLength=0;
+ ctx->m_glGetProgramiv_enc(self, program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxLength);
+ ctx->m_glGetProgramiv_enc(self, program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &maxAttribLength);
GLint size;
GLenum type;
- GLchar *name = new GLchar[maxLength+1];
+ size_t bufLen = maxLength > maxAttribLength ? maxLength : maxAttribLength;
+ GLchar *name = new GLchar[bufLen + 1];
GLint location;
//for each active uniform, get its size and starting location.
for (GLint i=0 ; i<numUniforms ; ++i)
{
- ctx->glGetActiveUniform(self, program, i, maxLength, NULL, &size, &type, name);
+ ctx->m_glGetActiveUniform_enc(self, program, i, maxLength, NULL, &size, &type, name);
location = ctx->m_glGetUniformLocation_enc(self, program, name);
ctx->m_shared->setProgramIndexInfo(program, i, location, size, type, name);
}
+ for (GLint i = 0; i < numAttributes; ++i) {
+ ctx->m_glGetActiveAttrib_enc(self, program, i, maxAttribLength, NULL, &size, &type, name);
+ location = ctx->m_glGetAttribLocation_enc(self, program, name);
+ ctx->m_shared->setProgramAttribInfo(program, i, location, size, type, name);
+ }
+
+ if (ctx->majorVersion() > 2) {
+ GLint numBlocks;
+ ctx->m_glGetProgramiv_enc(ctx, program, GL_ACTIVE_UNIFORM_BLOCKS, &numBlocks);
+ ctx->m_shared->setActiveUniformBlockCountForProgram(program, numBlocks);
+
+ GLint tfVaryingsCount;
+ ctx->m_glGetProgramiv_enc(ctx, program, GL_TRANSFORM_FEEDBACK_VARYINGS, &tfVaryingsCount);
+ ctx->m_shared->setTransformFeedbackVaryingsCountForProgram(program, tfVaryingsCount);
+ }
+
delete[] name;
}
+#define VALIDATE_PROGRAM_NAME(program) \
+ bool isShaderOrProgramObject = \
+ ctx->m_shared->isShaderOrProgramObject(program); \
+ bool isProgram = \
+ ctx->m_shared->isProgram(program); \
+ SET_ERROR_IF(!isShaderOrProgramObject, GL_INVALID_VALUE); \
+ SET_ERROR_IF(!isProgram, GL_INVALID_OPERATION); \
+
+#define VALIDATE_PROGRAM_NAME_RET(program, ret) \
+ bool isShaderOrProgramObject = \
+ ctx->m_shared->isShaderOrProgramObject(program); \
+ bool isProgram = \
+ ctx->m_shared->isProgram(program); \
+ RET_AND_SET_ERROR_IF(!isShaderOrProgramObject, GL_INVALID_VALUE, ret); \
+ RET_AND_SET_ERROR_IF(!isProgram, GL_INVALID_OPERATION, ret); \
+
+#define VALIDATE_SHADER_NAME(shader) \
+ bool isShaderOrProgramObject = \
+ ctx->m_shared->isShaderOrProgramObject(shader); \
+ bool isShader = \
+ ctx->m_shared->isShader(shader); \
+ SET_ERROR_IF(!isShaderOrProgramObject, GL_INVALID_VALUE); \
+ SET_ERROR_IF(!isShader, GL_INVALID_OPERATION); \
+
void GL2Encoder::s_glDeleteProgram(void *self, GLuint program)
{
GL2Encoder *ctx = (GL2Encoder*)self;
+
+ VALIDATE_PROGRAM_NAME(program);
+
ctx->m_glDeleteProgram_enc(self, program);
ctx->m_shared->deleteProgramData(program);
@@ -1841,9 +1994,9 @@ void GL2Encoder::s_glGetUniformiv(void *self, GLuint program, GLint location, GL
SET_ERROR_IF(!ctx->m_shared->isShaderOrProgramObject(program), GL_INVALID_VALUE);
SET_ERROR_IF(!ctx->m_shared->isProgram(program), GL_INVALID_OPERATION);
SET_ERROR_IF(!ctx->m_shared->isProgramInitialized(program), GL_INVALID_OPERATION);
- GLint hostLoc = location;
- SET_ERROR_IF(ctx->m_shared->getProgramUniformType(program,hostLoc)==0, GL_INVALID_OPERATION);
- ctx->m_glGetUniformiv_enc(self, program, hostLoc, params);
+ SET_ERROR_IF(ctx->m_shared->getProgramUniformType(program,location)==0, GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->m_shared->isProgramUniformLocationValid(program,location), GL_INVALID_OPERATION);
+ ctx->m_glGetUniformiv_enc(self, program, location, params);
}
void GL2Encoder::s_glGetUniformfv(void *self, GLuint program, GLint location, GLfloat* params)
{
@@ -1851,9 +2004,9 @@ void GL2Encoder::s_glGetUniformfv(void *self, GLuint program, GLint location, GL
SET_ERROR_IF(!ctx->m_shared->isShaderOrProgramObject(program), GL_INVALID_VALUE);
SET_ERROR_IF(!ctx->m_shared->isProgram(program), GL_INVALID_OPERATION);
SET_ERROR_IF(!ctx->m_shared->isProgramInitialized(program), GL_INVALID_OPERATION);
- GLint hostLoc = location;
- SET_ERROR_IF(ctx->m_shared->getProgramUniformType(program,hostLoc)==0, GL_INVALID_OPERATION);
- ctx->m_glGetUniformfv_enc(self, program, hostLoc, params);
+ SET_ERROR_IF(ctx->m_shared->getProgramUniformType(program,location)==0, GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->m_shared->isProgramUniformLocationValid(program,location), GL_INVALID_OPERATION);
+ ctx->m_glGetUniformfv_enc(self, program, location, params);
}
GLuint GL2Encoder::s_glCreateProgram(void * self)
@@ -1871,7 +2024,7 @@ GLuint GL2Encoder::s_glCreateShader(void *self, GLenum shaderType)
RET_AND_SET_ERROR_IF(!GLESv2Validation::shaderType(ctx, shaderType), GL_INVALID_ENUM, 0);
GLuint shader = ctx->m_glCreateShader_enc(self, shaderType);
if (shader != 0) {
- if (!ctx->m_shared->addShaderData(shader)) {
+ if (!ctx->m_shared->addShaderData(shader, shaderType)) {
ctx->m_glDeleteShader_enc(self, shader);
return 0;
}
@@ -1883,6 +2036,7 @@ void GL2Encoder::s_glGetAttachedShaders(void *self, GLuint program, GLsizei maxC
GLsizei* count, GLuint* shaders)
{
GL2Encoder *ctx = (GL2Encoder*)self;
+ VALIDATE_PROGRAM_NAME(program);
SET_ERROR_IF(maxCount < 0, GL_INVALID_VALUE);
ctx->m_glGetAttachedShaders_enc(self, program, maxCount, count, shaders);
}
@@ -1891,6 +2045,7 @@ void GL2Encoder::s_glGetShaderSource(void *self, GLuint shader, GLsizei bufsize,
GLsizei* length, GLchar* source)
{
GL2Encoder *ctx = (GL2Encoder*)self;
+ VALIDATE_SHADER_NAME(shader);
SET_ERROR_IF(bufsize < 0, GL_INVALID_VALUE);
ctx->m_glGetShaderSource_enc(self, shader, bufsize, length, source);
ShaderData* shaderData = ctx->m_shared->getShaderData(shader);
@@ -1916,6 +2071,7 @@ void GL2Encoder::s_glGetShaderInfoLog(void *self, GLuint shader, GLsizei bufsize
GLsizei* length, GLchar* infolog)
{
GL2Encoder *ctx = (GL2Encoder*)self;
+ VALIDATE_SHADER_NAME(shader);
SET_ERROR_IF(bufsize < 0, GL_INVALID_VALUE);
ctx->m_glGetShaderInfoLog_enc(self, shader, bufsize, length, infolog);
}
@@ -1924,6 +2080,7 @@ void GL2Encoder::s_glGetProgramInfoLog(void *self, GLuint program, GLsizei bufsi
GLsizei* length, GLchar* infolog)
{
GL2Encoder *ctx = (GL2Encoder*)self;
+ VALIDATE_PROGRAM_NAME(program);
SET_ERROR_IF(bufsize < 0, GL_INVALID_VALUE);
ctx->m_glGetProgramInfoLog_enc(self, program, bufsize, length, infolog);
}
@@ -1931,6 +2088,15 @@ void GL2Encoder::s_glGetProgramInfoLog(void *self, GLuint program, GLsizei bufsi
void GL2Encoder::s_glDeleteShader(void *self, GLenum shader)
{
GL2Encoder *ctx = (GL2Encoder*)self;
+
+ bool isShaderOrProgramObject =
+ ctx->m_shared->isShaderOrProgramObject(shader);
+ bool isShader =
+ ctx->m_shared->isShader(shader);
+
+ SET_ERROR_IF(isShaderOrProgramObject && !isShader, GL_INVALID_OPERATION);
+ SET_ERROR_IF(!isShaderOrProgramObject && !isShader, GL_INVALID_VALUE);
+
ctx->m_glDeleteShader_enc(self,shader);
ctx->m_shared->unrefShaderData(shader);
}
@@ -1938,15 +2104,36 @@ void GL2Encoder::s_glDeleteShader(void *self, GLenum shader)
void GL2Encoder::s_glAttachShader(void *self, GLuint program, GLuint shader)
{
GL2Encoder *ctx = (GL2Encoder*)self;
+ bool programIsShaderOrProgram = ctx->m_shared->isShaderOrProgramObject(program);
+ bool programIsProgram = ctx->m_shared->isProgram(program);
+ bool shaderIsShaderOrProgram = ctx->m_shared->isShaderOrProgramObject(shader);
+ bool shaderIsShader = ctx->m_shared->isShader(shader);
+
+ SET_ERROR_IF(!programIsShaderOrProgram, GL_INVALID_VALUE);
+ SET_ERROR_IF(!shaderIsShaderOrProgram, GL_INVALID_VALUE);
+ SET_ERROR_IF(!programIsProgram, GL_INVALID_OPERATION);
+ SET_ERROR_IF(!shaderIsShader, GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->m_shared->attachShader(program, shader), GL_INVALID_OPERATION);
+
ctx->m_glAttachShader_enc(self, program, shader);
- ctx->m_shared->attachShader(program, shader);
}
void GL2Encoder::s_glDetachShader(void *self, GLuint program, GLuint shader)
{
GL2Encoder *ctx = (GL2Encoder*)self;
+
+ bool programIsShaderOrProgram = ctx->m_shared->isShaderOrProgramObject(program);
+ bool programIsProgram = ctx->m_shared->isProgram(program);
+ bool shaderIsShaderOrProgram = ctx->m_shared->isShaderOrProgramObject(shader);
+ bool shaderIsShader = ctx->m_shared->isShader(shader);
+
+ SET_ERROR_IF(!programIsShaderOrProgram, GL_INVALID_VALUE);
+ SET_ERROR_IF(!shaderIsShaderOrProgram, GL_INVALID_VALUE);
+ SET_ERROR_IF(!programIsProgram, GL_INVALID_OPERATION);
+ SET_ERROR_IF(!shaderIsShader, GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->m_shared->detachShader(program, shader), GL_INVALID_OPERATION);
+
ctx->m_glDetachShader_enc(self, program, shader);
- ctx->m_shared->detachShader(program, shader);
}
int sArrIndexOfUniformExpr(const char* name, int* err) {
@@ -1966,6 +2153,16 @@ int GL2Encoder::s_glGetUniformLocation(void *self, GLuint program, const GLchar
{
if (!name) return -1;
GL2Encoder *ctx = (GL2Encoder*)self;
+
+ bool isShaderOrProgramObject =
+ ctx->m_shared->isShaderOrProgramObject(program);
+ bool isProgram =
+ ctx->m_shared->isProgram(program);
+
+ RET_AND_SET_ERROR_IF(!isShaderOrProgramObject, GL_INVALID_VALUE, -1);
+ RET_AND_SET_ERROR_IF(!isProgram, GL_INVALID_OPERATION, -1);
+ RET_AND_SET_ERROR_IF(!ctx->m_shared->getProgramLinkStatus(program), GL_INVALID_OPERATION, -1);
+
return ctx->m_glGetUniformLocation_enc(self, program, name);
}
@@ -2026,26 +2223,35 @@ void GL2Encoder::s_glUseProgram(void *self, GLuint program)
SET_ERROR_IF(program && !shared->isShaderOrProgramObject(program), GL_INVALID_VALUE);
SET_ERROR_IF(program && !shared->isProgram(program), GL_INVALID_OPERATION);
+ SET_ERROR_IF(ctx->m_state->getTransformFeedbackActiveUnpaused(), GL_INVALID_OPERATION);
ctx->m_glUseProgram_enc(self, program);
+
+ GLuint currProgram = ctx->m_state->currentProgram();
+ ctx->m_shared->onUseProgram(currProgram, program);
+
ctx->m_state->setCurrentProgram(program);
ctx->m_state->setCurrentShaderProgram(program);
-
ctx->updateHostTexture2DBindingsFromProgramData(program);
+
+ if (program) {
+ ctx->m_state->currentUniformValidationInfo = ctx->m_shared->getUniformValidationInfo(program);
+ ctx->m_state->currentAttribValidationInfo = ctx->m_shared->getAttribValidationInfo(program);
+ }
}
void GL2Encoder::s_glUniform1f(void *self , GLint location, GLfloat x)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform1f_enc(self, hostLoc, x);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 1 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform1f_enc(self, location, x);
}
void GL2Encoder::s_glUniform1fv(void *self , GLint location, GLsizei count, const GLfloat* v)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform1fv_enc(self, hostLoc, count, v);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 1 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform1fv_enc(self, location, count, v);
}
void GL2Encoder::s_glUniform1i(void *self , GLint location, GLint x)
@@ -2054,8 +2260,9 @@ void GL2Encoder::s_glUniform1i(void *self , GLint location, GLint x)
GLClientState* state = ctx->m_state;
GLSharedGroupPtr shared = ctx->m_shared;
- GLint hostLoc = location;
- ctx->m_glUniform1i_enc(self, hostLoc, x);
+ ctx->m_state->validateUniform(false /* is float? */, false /* is unsigned? */, 1 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+
+ ctx->m_glUniform1i_enc(self, location, x);
GLenum target;
if (shared->setSamplerUniform(state->currentShaderProgram(), location, x, &target)) {
@@ -2070,113 +2277,113 @@ void GL2Encoder::s_glUniform1i(void *self , GLint location, GLint x)
void GL2Encoder::s_glUniform1iv(void *self , GLint location, GLsizei count, const GLint* v)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform1iv_enc(self, hostLoc, count, v);
+ ctx->m_state->validateUniform(false /* is float? */, false /* is unsigned? */, 1 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform1iv_enc(self, location, count, v);
}
void GL2Encoder::s_glUniform2f(void *self , GLint location, GLfloat x, GLfloat y)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform2f_enc(self, hostLoc, x, y);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 2 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform2f_enc(self, location, x, y);
}
void GL2Encoder::s_glUniform2fv(void *self , GLint location, GLsizei count, const GLfloat* v)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform2fv_enc(self, hostLoc, count, v);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 2 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform2fv_enc(self, location, count, v);
}
void GL2Encoder::s_glUniform2i(void *self , GLint location, GLint x, GLint y)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform2i_enc(self, hostLoc, x, y);
+ ctx->m_state->validateUniform(false /* is float? */, false /* is unsigned? */, 2 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform2i_enc(self, location, x, y);
}
void GL2Encoder::s_glUniform2iv(void *self , GLint location, GLsizei count, const GLint* v)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform2iv_enc(self, hostLoc, count, v);
+ ctx->m_state->validateUniform(false /* is float? */, false /* is unsigned? */, 2 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform2iv_enc(self, location, count, v);
}
void GL2Encoder::s_glUniform3f(void *self , GLint location, GLfloat x, GLfloat y, GLfloat z)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform3f_enc(self, hostLoc, x, y, z);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 3 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform3f_enc(self, location, x, y, z);
}
void GL2Encoder::s_glUniform3fv(void *self , GLint location, GLsizei count, const GLfloat* v)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform3fv_enc(self, hostLoc, count, v);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 3 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform3fv_enc(self, location, count, v);
}
void GL2Encoder::s_glUniform3i(void *self , GLint location, GLint x, GLint y, GLint z)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform3i_enc(self, hostLoc, x, y, z);
+ ctx->m_state->validateUniform(false /* is float? */, false /* is unsigned? */, 3 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform3i_enc(self, location, x, y, z);
}
void GL2Encoder::s_glUniform3iv(void *self , GLint location, GLsizei count, const GLint* v)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform3iv_enc(self, hostLoc, count, v);
+ ctx->m_state->validateUniform(false /* is float? */, false /* is unsigned? */, 3 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform3iv_enc(self, location, count, v);
}
void GL2Encoder::s_glUniform4f(void *self , GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform4f_enc(self, hostLoc, x, y, z, w);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 4 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform4f_enc(self, location, x, y, z, w);
}
void GL2Encoder::s_glUniform4fv(void *self , GLint location, GLsizei count, const GLfloat* v)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform4fv_enc(self, hostLoc, count, v);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 4 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform4fv_enc(self, location, count, v);
}
void GL2Encoder::s_glUniform4i(void *self , GLint location, GLint x, GLint y, GLint z, GLint w)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform4i_enc(self, hostLoc, x, y, z, w);
+ ctx->m_state->validateUniform(false /* is float? */, false /* is unsigned? */, 4 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform4i_enc(self, location, x, y, z, w);
}
void GL2Encoder::s_glUniform4iv(void *self , GLint location, GLsizei count, const GLint* v)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform4iv_enc(self, hostLoc, count, v);
+ ctx->m_state->validateUniform(false /* is float? */, false /* is unsigned? */, 4 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform4iv_enc(self, location, count, v);
}
void GL2Encoder::s_glUniformMatrix2fv(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniformMatrix2fv_enc(self, hostLoc, count, transpose, value);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 2 /* columns */, 2 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniformMatrix2fv_enc(self, location, count, transpose, value);
}
void GL2Encoder::s_glUniformMatrix3fv(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniformMatrix3fv_enc(self, hostLoc, count, transpose, value);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 3 /* columns */, 3 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniformMatrix3fv_enc(self, location, count, transpose, value);
}
void GL2Encoder::s_glUniformMatrix4fv(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniformMatrix4fv_enc(self, hostLoc, count, transpose, value);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 4 /* columns */, 4 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniformMatrix4fv_enc(self, location, count, transpose, value);
}
void GL2Encoder::s_glActiveTexture(void* self, GLenum texture)
@@ -2185,6 +2392,10 @@ void GL2Encoder::s_glActiveTexture(void* self, GLenum texture)
GLClientState* state = ctx->m_state;
GLenum err;
+ GLint maxCombinedUnits;
+ ctx->glGetIntegerv(ctx, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxCombinedUnits);
+
+ SET_ERROR_IF(texture - GL_TEXTURE0 > maxCombinedUnits - 1, GL_INVALID_ENUM);
SET_ERROR_IF((err = state->setActiveTextureUnit(texture)) != GL_NO_ERROR, err);
ctx->m_glActiveTexture_enc(ctx, texture);
@@ -2241,6 +2452,10 @@ void GL2Encoder::s_glGetTexParameterfv(void* self,
{
GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureParams(ctx, pname), GL_INVALID_ENUM);
+ if (!params) return;
+
if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) {
ctx->override2DTextureTarget(target);
ctx->m_glGetTexParameterfv_enc(ctx, GL_TEXTURE_2D, pname, params);
@@ -2255,6 +2470,11 @@ void GL2Encoder::s_glGetTexParameteriv(void* self,
{
GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureParams(ctx, pname), GL_INVALID_ENUM);
+
+ if (!params) return;
+
switch (pname) {
case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:
*params = 1;
@@ -2296,6 +2516,9 @@ void GL2Encoder::s_glTexParameterf(void* self,
SET_ERROR_IF((target == GL_TEXTURE_EXTERNAL_OES &&
!isValidTextureExternalParam(pname, (GLenum)param)),
GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureParams(ctx, pname), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureParamValue(ctx, pname, (GLint)param, param, (GLenum)param), GL_INVALID_ENUM);
if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) {
ctx->override2DTextureTarget(target);
@@ -2314,6 +2537,11 @@ void GL2Encoder::s_glTexParameterfv(void* self,
SET_ERROR_IF((target == GL_TEXTURE_EXTERNAL_OES &&
!isValidTextureExternalParam(pname, (GLenum)params[0])),
GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureParams(ctx, pname), GL_INVALID_ENUM);
+ SET_ERROR_IF(!params, GL_INVALID_VALUE);
+ GLfloat param = *params;
+ SET_ERROR_IF(!GLESv2Validation::textureParamValue(ctx, pname, (GLint)param, param, (GLenum)param), GL_INVALID_ENUM);
if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) {
ctx->override2DTextureTarget(target);
@@ -2332,6 +2560,9 @@ void GL2Encoder::s_glTexParameteri(void* self,
SET_ERROR_IF((target == GL_TEXTURE_EXTERNAL_OES &&
!isValidTextureExternalParam(pname, (GLenum)param)),
GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureParams(ctx, pname), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureParamValue(ctx, pname, param, (GLfloat)param, (GLenum)param), GL_INVALID_ENUM);
if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) {
ctx->override2DTextureTarget(target);
@@ -2359,6 +2590,8 @@ void GL2Encoder::s_glTexImage2D(void* self, GLenum target, GLint level,
SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validation::pixelType(ctx, type), GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validation::pixelFormat(ctx, format), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::pixelFormat(ctx, internalformat) && !GLESv2Validation::pixelInternalFormat(internalformat), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::pixelSizedFormat(ctx, internalformat, format, type), GL_INVALID_OPERATION);
// If unpack buffer is nonzero, verify unmapped state.
SET_ERROR_IF(ctx->isBufferTargetMapped(GL_PIXEL_UNPACK_BUFFER), GL_INVALID_OPERATION);
@@ -2375,6 +2608,7 @@ void GL2Encoder::s_glTexImage2D(void* self, GLenum target, GLint level,
SET_ERROR_IF(height > max_texture_size, GL_INVALID_VALUE);
SET_ERROR_IF(GLESv2Validation::isCubeMapTarget(target) && width > max_cube_map_texture_size, GL_INVALID_VALUE);
SET_ERROR_IF(GLESv2Validation::isCubeMapTarget(target) && height > max_cube_map_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(GLESv2Validation::isCubeMapTarget(target) && (width != height), GL_INVALID_VALUE);
SET_ERROR_IF(border != 0, GL_INVALID_VALUE);
// If unpack buffer is nonzero, verify buffer data fits and is evenly divisible by the type.
SET_ERROR_IF(ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) &&
@@ -2405,7 +2639,8 @@ void GL2Encoder::s_glTexImage2D(void* self, GLenum target, GLint level,
state->setBoundTextureInternalFormat(stateTarget, internalformat);
state->setBoundTextureFormat(stateTarget, format);
state->setBoundTextureType(stateTarget, type);
- state->setBoundTextureDims(stateTarget, level, width, height, 1);
+ state->setBoundTextureDims(stateTarget, target, level, width, height, 1);
+ state->addTextureCubeMapImage(stateTarget, target);
if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) {
ctx->override2DTextureTarget(target);
@@ -2466,14 +2701,15 @@ void GL2Encoder::s_glTexSubImage2D(void* self, GLenum target, GLint level,
}
// If unpack buffer is nonzero, verify buffer data fits and is evenly divisible by the type.
+
SET_ERROR_IF(ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) &&
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER) &&
- (state->pboNeededDataSize(width, height, 1, format, type, 0) >
+ (state->pboNeededDataSize(width, height, 1, format, type, 0) + (uintptr_t)pixels >
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER)->m_size),
GL_INVALID_OPERATION);
SET_ERROR_IF(ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) &&
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER) &&
- (ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER)->m_size %
+ ((uintptr_t)pixels %
glSizeof(type)),
GL_INVALID_OPERATION);
SET_ERROR_IF(!ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) && !pixels, GL_INVALID_OPERATION);
@@ -2504,6 +2740,35 @@ void GL2Encoder::s_glCopyTexImage2D(void* self, GLenum target, GLint level,
GL2Encoder* ctx = (GL2Encoder*)self;
GLClientState* state = ctx->m_state;
+ SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::pixelFormat(ctx, internalformat) && !GLESv2Validation::pixelInternalFormat(internalformat), GL_INVALID_ENUM);
+ GLint max_texture_size;
+ GLint max_cube_map_texture_size;
+ ctx->glGetIntegerv(ctx, GL_MAX_TEXTURE_SIZE, &max_texture_size);
+ ctx->glGetIntegerv(ctx, GL_MAX_CUBE_MAP_TEXTURE_SIZE, &max_cube_map_texture_size);
+ SET_ERROR_IF(level < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(level > ilog2(max_texture_size), GL_INVALID_VALUE);
+ SET_ERROR_IF((target == GL_TEXTURE_CUBE_MAP) &&
+ (level > ilog2(max_cube_map_texture_size)), GL_INVALID_VALUE);
+ SET_ERROR_IF(width < 0 || height < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(width > max_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(height > max_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(GLESv2Validation::isCubeMapTarget(target) && width > max_cube_map_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(GLESv2Validation::isCubeMapTarget(target) && height > max_cube_map_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(GLESv2Validation::isCubeMapTarget(target) && (width != height), GL_INVALID_VALUE);
+ SET_ERROR_IF(border != 0, GL_INVALID_VALUE);
+
+ GLenum stateTarget = target;
+ if (target == GL_TEXTURE_CUBE_MAP_POSITIVE_X ||
+ target == GL_TEXTURE_CUBE_MAP_POSITIVE_Y ||
+ target == GL_TEXTURE_CUBE_MAP_POSITIVE_Z ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_X ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)
+ stateTarget = GL_TEXTURE_CUBE_MAP;
+
+ SET_ERROR_IF(state->isBoundTextureImmutableFormat(target), GL_INVALID_OPERATION);
+
SET_ERROR_IF(ctx->glCheckFramebufferStatus(ctx, GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE,
GL_INVALID_FRAMEBUFFER_OPERATION);
// This is needed to work around underlying OpenGL drivers
@@ -2514,6 +2779,10 @@ void GL2Encoder::s_glCopyTexImage2D(void* self, GLenum target, GLint level,
state->copyTexImageLuminanceCubeMapAMDWorkaround
(target, level, internalformat);
+ state->setBoundTextureInternalFormat(stateTarget, internalformat);
+ state->setBoundTextureDims(stateTarget, target, level, width, height, 1);
+ state->addTextureCubeMapImage(stateTarget, target);
+
if (extraTarget) {
ctx->m_glCopyTexImage2D_enc(ctx, extraTarget, level, internalformat,
x, y, width, height, border);
@@ -2521,9 +2790,6 @@ void GL2Encoder::s_glCopyTexImage2D(void* self, GLenum target, GLint level,
ctx->m_glCopyTexImage2D_enc(ctx, target, level, internalformat,
x, y, width, height, border);
-
- state->setBoundTextureInternalFormat(target, internalformat);
- state->setBoundTextureDims(target, level, width, height, 1);
}
void GL2Encoder::s_glTexParameteriv(void* self,
@@ -2534,6 +2800,11 @@ void GL2Encoder::s_glTexParameteriv(void* self,
SET_ERROR_IF((target == GL_TEXTURE_EXTERNAL_OES &&
!isValidTextureExternalParam(pname, (GLenum)params[0])),
GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureParams(ctx, pname), GL_INVALID_ENUM);
+ SET_ERROR_IF(!params, GL_INVALID_VALUE);
+ GLint param = *params;
+ SET_ERROR_IF(!GLESv2Validation::textureParamValue(ctx, pname, param, (GLfloat)param, (GLenum)param), GL_INVALID_ENUM);
if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) {
ctx->override2DTextureTarget(target);
@@ -2634,7 +2905,7 @@ void GL2Encoder::s_glDeleteRenderbuffers(void* self,
for (int i = 0; i < n; i++) {
state->detachRbo(renderbuffers[i]);
}
- // state->removeRenderbuffers(n, renderbuffers);
+ state->removeRenderbuffers(n, renderbuffers);
}
void GL2Encoder::s_glBindRenderbuffer(void* self,
@@ -2660,8 +2931,14 @@ void GL2Encoder::s_glRenderbufferStorage(void* self,
!GLESv2Validation::rboFormat(ctx, internalformat),
GL_INVALID_ENUM);
+ SET_ERROR_IF(width < 0 || height < 0, GL_INVALID_VALUE);
+ GLint max_rb_size;
+ ctx->glGetIntegerv(ctx, GL_MAX_RENDERBUFFER_SIZE, &max_rb_size);
+ SET_ERROR_IF(width > max_rb_size || height > max_rb_size, GL_INVALID_VALUE);
+
state->setBoundRenderbufferFormat(internalformat);
state->setBoundRenderbufferSamples(0);
+ state->setBoundRenderbufferDimensions(width, height);
ctx->m_glRenderbufferStorage_enc(self, target, internalformat,
width, height);
@@ -2675,6 +2952,10 @@ void GL2Encoder::s_glFramebufferRenderbuffer(void* self,
SET_ERROR_IF(!GLESv2Validation::framebufferTarget(ctx, target), GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validation::framebufferAttachment(ctx, attachment), GL_INVALID_ENUM);
+ SET_ERROR_IF(GL_RENDERBUFFER != renderbuffertarget, GL_INVALID_ENUM);
+ SET_ERROR_IF(!state->getBoundFramebuffer(target), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!state->isRenderbufferThatWasBound(renderbuffer), GL_INVALID_OPERATION);
+
state->attachRbo(target, attachment, renderbuffer);
ctx->m_glFramebufferRenderbuffer_enc(self, target, attachment, renderbuffertarget, renderbuffer);
@@ -2721,8 +3002,21 @@ void GL2Encoder::s_glFramebufferTexture2D(void* self,
GLClientState* state = ctx->m_state;
SET_ERROR_IF(!GLESv2Validation::framebufferTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, textarget), GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validation::framebufferAttachment(ctx, attachment), GL_INVALID_ENUM);
- state->attachTextureObject(target, attachment, texture);
+ SET_ERROR_IF(!state->getBoundFramebuffer(target), GL_INVALID_OPERATION);
+ SET_ERROR_IF(texture && !state->isTexture(texture), GL_INVALID_OPERATION);
+ SET_ERROR_IF(GLESv2Validation::isCubeMapTarget(textarget) && !state->isTextureCubeMap(texture), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!GLESv2Validation::isCubeMapTarget(textarget) && state->isTextureCubeMap(texture), GL_INVALID_OPERATION);
+ SET_ERROR_IF((texture && (level < 0)), GL_INVALID_VALUE);
+
+ if (target == GL_TEXTURE_2D) {
+ SET_ERROR_IF(level > ilog2(ctx->m_state->getMaxTextureSize()), GL_INVALID_VALUE);
+ } else {
+ SET_ERROR_IF(level > ilog2(ctx->m_state->getMaxTextureSizeCubeMap()), GL_INVALID_VALUE);
+ }
+
+ state->attachTextureObject(target, attachment, texture, level, 0);
ctx->m_glFramebufferTexture2D_enc(self, target, attachment, textarget, texture, level);
}
@@ -2733,7 +3027,7 @@ void GL2Encoder::s_glFramebufferTexture3DOES(void* self,
GL2Encoder* ctx = (GL2Encoder*)self;
GLClientState* state = ctx->m_state;
- state->attachTextureObject(target, attachment, texture);
+ state->attachTextureObject(target, attachment, texture, level, zoffset);
ctx->m_glFramebufferTexture3DOES_enc(self, target, attachment, textarget, texture, level, zoffset);
}
@@ -2743,6 +3037,12 @@ void GL2Encoder::s_glGetFramebufferAttachmentParameteriv(void* self,
GL2Encoder* ctx = (GL2Encoder*)self;
const GLClientState* state = ctx->m_state;
SET_ERROR_IF(!GLESv2Validation::framebufferTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!state->boundFramebuffer(target) &&
+ attachment != GL_BACK &&
+ attachment != GL_FRONT &&
+ attachment != GL_DEPTH &&
+ attachment != GL_STENCIL,
+ GL_INVALID_OPERATION);
SET_ERROR_IF(pname != GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME &&
pname != GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE &&
!state->attachmentHasObject(target, attachment),
@@ -2755,6 +3055,11 @@ void GL2Encoder::s_glGetFramebufferAttachmentParameteriv(void* self,
FBO_ATTACHMENT_TEXTURE),
!state->attachmentHasObject(target, attachment) ?
GL_INVALID_OPERATION : GL_INVALID_ENUM);
+ SET_ERROR_IF(
+ (attachment == GL_FRONT ||
+ attachment == GL_BACK) &&
+ (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME),
+ GL_INVALID_ENUM);
SET_ERROR_IF(attachment == GL_DEPTH_STENCIL_ATTACHMENT &&
pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME &&
(state->objectOfAttachment(target, GL_DEPTH_ATTACHMENT) !=
@@ -2762,129 +3067,23 @@ void GL2Encoder::s_glGetFramebufferAttachmentParameteriv(void* self,
GL_INVALID_OPERATION);
SET_ERROR_IF(state->boundFramebuffer(target) &&
(attachment == GL_BACK ||
- attachment == GL_FRONT),
+ attachment == GL_FRONT ||
+ attachment == GL_DEPTH ||
+ attachment == GL_STENCIL),
GL_INVALID_OPERATION);
ctx->m_glGetFramebufferAttachmentParameteriv_enc(self, target, attachment, pname, params);
}
-bool GL2Encoder::isCompleteFbo(GLenum target, const GLClientState* state,
- GLenum attachment) const {
- FboFormatInfo fbo_format_info;
- state->getBoundFramebufferFormat(target, attachment, &fbo_format_info);
-
- bool res;
- switch (fbo_format_info.type) {
- case FBO_ATTACHMENT_RENDERBUFFER:
- switch (fbo_format_info.rb_format) {
- case GL_R16F:
- case GL_RG16F:
- case GL_RGBA16F:
- case GL_R32F:
- case GL_RG32F:
- case GL_RGBA32F:
- case GL_R11F_G11F_B10F:
- res = majorVersion() >= 3 && hasExtension("GL_EXT_color_buffer_float");
- break;
- case GL_RGB16F:
- res = majorVersion() >= 3 && hasExtension("GL_EXT_color_buffer_half_float");
- break;
- case GL_STENCIL_INDEX8:
- if (attachment == GL_STENCIL_ATTACHMENT) {
- res = true;
- } else {
- res = false;
- }
- break;
- default:
- res = true;
- }
- break;
- case FBO_ATTACHMENT_TEXTURE:
- switch (fbo_format_info.tex_internalformat) {
- case GL_R16F:
- case GL_RG16F:
- case GL_RGBA16F:
- case GL_R32F:
- case GL_RG32F:
- case GL_RGBA32F:
- case GL_R11F_G11F_B10F:
- res = majorVersion() >= 3 && hasExtension("GL_EXT_color_buffer_float");
- break;
- case GL_RGB16F:
- res = majorVersion() >= 3 && hasExtension("GL_EXT_color_buffer_half_float");
- break;
- case GL_RED:
- case GL_RG:
- case GL_SRGB8:
- case GL_RGB32UI:
- case GL_RGB16UI:
- case GL_RGB8UI:
- case GL_RGB32I:
- case GL_RGB16I:
- case GL_RGB8I:
- case GL_R8_SNORM:
- case GL_RG8_SNORM:
- case GL_RGB8_SNORM:
- case GL_RGBA8_SNORM:
- res = false;
- break;
- // No float/half-float formats allowed for RGB(A)
- case GL_RGB:
- case GL_RGBA:
- switch (fbo_format_info.tex_type) {
- case GL_FLOAT:
- case GL_HALF_FLOAT_OES:
- case GL_UNSIGNED_INT_10F_11F_11F_REV:
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- res = false;
- break;
- default:
- res = true;
- }
- break;
- default:
- res = true;
- }
- break;
- case FBO_ATTACHMENT_NONE:
- res = true;
- break;
- default:
- res = true;
- }
- return res;
-}
-
-bool GL2Encoder::checkFramebufferCompleteness(GLenum target, const GLClientState* state) const {
- bool res = true;
-
- for (int i = 0; i < state->getMaxColorAttachments(); i++) {
- res = res && isCompleteFbo(target, state, glUtilsColorAttachmentName(i));
- }
-
- res = res && isCompleteFbo(target, state, GL_DEPTH_ATTACHMENT);
- res = res && isCompleteFbo(target, state, GL_STENCIL_ATTACHMENT);
-
- return res;
-}
-
GLenum GL2Encoder::s_glCheckFramebufferStatus(void* self, GLenum target) {
GL2Encoder* ctx = (GL2Encoder*)self;
- GLClientState* state = ctx->m_state;
- bool fboCompleteByCodec =
- ctx->checkFramebufferCompleteness(target, state);
+ RET_AND_SET_ERROR_IF(
+ target != GL_DRAW_FRAMEBUFFER && target != GL_FRAMEBUFFER && target != GL_READ_FRAMEBUFFER,
+ GL_INVALID_ENUM, 0);
- if (!fboCompleteByCodec) {
- state->setCheckFramebufferStatus(target, GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT);
- return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
- } else {
- // double check with underlying opengl to avoid craziness.
- GLenum host_checkstatus = ctx->m_glCheckFramebufferStatus_enc(self, target);
- state->setCheckFramebufferStatus(target, host_checkstatus);
- if (host_checkstatus == GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS) return GL_FRAMEBUFFER_COMPLETE;
- return host_checkstatus;
- }
+ GLClientState* state = ctx->m_state;
+
+ return state->checkFramebufferCompleteness(target);
}
void GL2Encoder::s_glGenVertexArrays(void* self, GLsizei n, GLuint* arrays) {
@@ -2950,11 +3149,17 @@ void* GL2Encoder::s_glMapBufferRangeAEMUImpl(GL2Encoder* ctx, GLenum target,
((access & GL_MAP_WRITE_BIT) &&
(!(access & GL_MAP_INVALIDATE_RANGE_BIT) &&
!(access & GL_MAP_INVALIDATE_BUFFER_BIT)))) {
+
+ if (ctx->m_state->shouldSkipHostMapBuffer(target))
+ return bits;
+
ctx->glMapBufferRangeAEMU(
ctx, target,
offset, length,
access,
bits);
+
+ ctx->m_state->onHostMappedBuffer(target);
}
return bits;
@@ -3139,6 +3344,7 @@ void GL2Encoder::s_glCompressedTexImage2D(void* self, GLenum target, GLint level
GLClientState* state = ctx->m_state;
SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(target == GL_TEXTURE_CUBE_MAP, GL_INVALID_ENUM);
// Filter compressed formats support.
SET_ERROR_IF(!GLESv2Validation::supportedCompressedFormat(ctx, internalformat), GL_INVALID_ENUM);
// Verify level <= log2(GL_MAX_TEXTURE_SIZE).
@@ -3155,14 +3361,13 @@ void GL2Encoder::s_glCompressedTexImage2D(void* self, GLenum target, GLint level
// If unpack buffer is nonzero, verify unmapped state.
SET_ERROR_IF(ctx->isBufferTargetMapped(GL_PIXEL_UNPACK_BUFFER), GL_INVALID_OPERATION);
SET_ERROR_IF(width < 0 || height < 0, GL_INVALID_VALUE);
+
// If unpack buffer is nonzero, verify buffer data fits.
SET_ERROR_IF(ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) &&
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER) &&
(imageSize > ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER)->m_size),
GL_INVALID_OPERATION);
- // TODO: Fix:
- // If |imageSize| is inconsistent with compressed dimensions.
- // SET_ERROR_IF(GLESv2Validation::compressedTexImageSize(internalformat, width, height, 1) != imageSize, GL_INVALID_VALUE);
+ SET_ERROR_IF(!ctx->m_state->compressedTexImageSizeCompatible(internalformat, width, height, 1, imageSize), GL_INVALID_VALUE);
GLenum stateTarget = target;
if (target == GL_TEXTURE_CUBE_MAP_POSITIVE_X ||
@@ -3173,7 +3378,7 @@ void GL2Encoder::s_glCompressedTexImage2D(void* self, GLenum target, GLint level
target == GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)
stateTarget = GL_TEXTURE_CUBE_MAP;
state->setBoundTextureInternalFormat(stateTarget, (GLint)internalformat);
- state->setBoundTextureDims(stateTarget, level, width, height, 1);
+ state->setBoundTextureDims(stateTarget, target, level, width, height, 1);
if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) {
ctx->override2DTextureTarget(target);
@@ -3200,13 +3405,28 @@ void GL2Encoder::s_glCompressedTexSubImage2D(void* self, GLenum target, GLint le
GL2Encoder* ctx = (GL2Encoder*)self;
SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(target == GL_TEXTURE_CUBE_MAP, GL_INVALID_ENUM);
// If unpack buffer is nonzero, verify unmapped state.
SET_ERROR_IF(ctx->isBufferTargetMapped(GL_PIXEL_UNPACK_BUFFER), GL_INVALID_OPERATION);
+
+ GLenum stateTarget = target;
+ if (target == GL_TEXTURE_CUBE_MAP_POSITIVE_X ||
+ target == GL_TEXTURE_CUBE_MAP_POSITIVE_Y ||
+ target == GL_TEXTURE_CUBE_MAP_POSITIVE_Z ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_X ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)
+ stateTarget = GL_TEXTURE_CUBE_MAP;
+ GLuint tex = ctx->m_state->getBoundTexture(stateTarget);
+
+ GLint internalFormat = ctx->m_state->queryTexInternalFormat(tex);
+ SET_ERROR_IF(internalFormat != format, GL_INVALID_OPERATION);
+ SET_ERROR_IF(level < 0, GL_INVALID_VALUE);
+
GLint max_texture_size;
GLint max_cube_map_texture_size;
ctx->glGetIntegerv(ctx, GL_MAX_TEXTURE_SIZE, &max_texture_size);
ctx->glGetIntegerv(ctx, GL_MAX_CUBE_MAP_TEXTURE_SIZE, &max_cube_map_texture_size);
- SET_ERROR_IF(level < 0, GL_INVALID_VALUE);
SET_ERROR_IF(level > ilog2(max_texture_size), GL_INVALID_VALUE);
SET_ERROR_IF(level > ilog2(max_cube_map_texture_size), GL_INVALID_VALUE);
SET_ERROR_IF(width < 0 || height < 0, GL_INVALID_VALUE);
@@ -3217,6 +3437,20 @@ void GL2Encoder::s_glCompressedTexSubImage2D(void* self, GLenum target, GLint le
GL_INVALID_OPERATION);
SET_ERROR_IF(xoffset < 0 || yoffset < 0, GL_INVALID_VALUE);
+ GLint totalWidth = ctx->m_state->queryTexWidth(level, tex);
+ GLint totalHeight = ctx->m_state->queryTexHeight(level, tex);
+
+ if (GLESTextureUtils::isEtc2Format(internalFormat)) {
+ SET_ERROR_IF((width % 4) && (totalWidth != xoffset + width), GL_INVALID_OPERATION);
+ SET_ERROR_IF((height % 4) && (totalHeight != yoffset + height), GL_INVALID_OPERATION);
+ SET_ERROR_IF((xoffset % 4) || (yoffset % 4), GL_INVALID_OPERATION);
+ }
+
+ SET_ERROR_IF(totalWidth < xoffset + width, GL_INVALID_VALUE);
+ SET_ERROR_IF(totalHeight < yoffset + height, GL_INVALID_VALUE);
+
+ SET_ERROR_IF(!ctx->m_state->compressedTexImageSizeCompatible(internalFormat, width, height, 1, imageSize), GL_INVALID_VALUE);
+
if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) {
ctx->override2DTextureTarget(target);
}
@@ -3345,22 +3579,33 @@ void GL2Encoder::s_glCopyBufferSubData(void *self , GLenum readtarget, GLenum wr
writetarget == GL_DISPATCH_INDIRECT_BUFFER ||
writetarget == GL_DRAW_INDIRECT_BUFFER ||
writetarget == GL_SHADER_STORAGE_BUFFER), GL_INVALID_ENUM);
- SET_ERROR_IF(!ctx->boundBuffer(readtarget), GL_INVALID_OPERATION);
- SET_ERROR_IF(!ctx->boundBuffer(writetarget), GL_INVALID_OPERATION);
+
+ GLuint readBufferId = ctx->boundBuffer(readtarget);
+ GLuint writeBufferId = ctx->boundBuffer(writetarget);
+
+ SET_ERROR_IF(!readBufferId || !writeBufferId, GL_INVALID_OPERATION);
+
SET_ERROR_IF(ctx->isBufferTargetMapped(readtarget), GL_INVALID_OPERATION);
SET_ERROR_IF(ctx->isBufferTargetMapped(writetarget), GL_INVALID_OPERATION);
+
SET_ERROR_IF(readoffset < 0, GL_INVALID_VALUE);
SET_ERROR_IF(writeoffset < 0, GL_INVALID_VALUE);
SET_ERROR_IF(size < 0, GL_INVALID_VALUE);
+
+ BufferData* readBufferData = ctx->getBufferData(readtarget);
+ BufferData* writeBufferData = ctx->getBufferData(writetarget);
+
SET_ERROR_IF(
- ctx->getBufferData(readtarget) &&
- (readoffset + size > ctx->getBufferData(readtarget)->m_size),
+ readBufferData &&
+ (readoffset + size > readBufferData->m_size),
GL_INVALID_VALUE);
+
SET_ERROR_IF(
- ctx->getBufferData(writetarget) &&
- (writeoffset + size > ctx->getBufferData(writetarget)->m_size),
+ writeBufferData &&
+ (writeoffset + size > writeBufferData->m_size),
GL_INVALID_VALUE);
- SET_ERROR_IF(readtarget == writetarget &&
+
+ SET_ERROR_IF(readBufferId == writeBufferId &&
!((writeoffset >= readoffset + size) ||
(readoffset >= writeoffset + size)),
GL_INVALID_VALUE);
@@ -3522,6 +3767,8 @@ static std::string packVarNames(GLsizei count, const char** names, GLint* err_ou
void GL2Encoder::s_glGetUniformIndices(void* self, GLuint program, GLsizei uniformCount, const GLchar ** uniformNames, GLuint* uniformIndices) {
GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_PROGRAM_NAME(program);
+
if (!uniformCount) return;
GLint err = GL_NO_ERROR;
@@ -3546,8 +3793,8 @@ void GL2Encoder::s_glUniform1ui(void* self, GLint location, GLuint v0) {
GLClientState* state = ctx->m_state;
GLSharedGroupPtr shared = ctx->m_shared;
- GLint hostLoc = location;
- ctx->m_glUniform1ui_enc(self, hostLoc, v0);
+ ctx->m_state->validateUniform(false /* is float? */, true /* is unsigned? */, 1 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform1ui_enc(self, location, v0);
GLenum target;
if (shared->setSamplerUniform(state->currentShaderProgram(), location, v0, &target)) {
@@ -3561,80 +3808,80 @@ void GL2Encoder::s_glUniform1ui(void* self, GLint location, GLuint v0) {
void GL2Encoder::s_glUniform2ui(void* self, GLint location, GLuint v0, GLuint v1) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform2ui_enc(self, hostLoc, v0, v1);
+ ctx->m_state->validateUniform(false /* is float? */, true /* is unsigned? */, 2 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform2ui_enc(self, location, v0, v1);
}
void GL2Encoder::s_glUniform3ui(void* self, GLint location, GLuint v0, GLuint v1, GLuint v2) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform3ui_enc(self, hostLoc, v0, v1, v2);
+ ctx->m_state->validateUniform(false /* is float? */, true /* is unsigned? */, 3 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform3ui_enc(self, location, v0, v1, v2);
}
void GL2Encoder::s_glUniform4ui(void* self, GLint location, GLint v0, GLuint v1, GLuint v2, GLuint v3) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform4ui_enc(self, hostLoc, v0, v1, v2, v3);
+ ctx->m_state->validateUniform(false /* is float? */, true /* is unsigned? */, 4 /* columns */, 1 /* rows */, location, 1 /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform4ui_enc(self, location, v0, v1, v2, v3);
}
void GL2Encoder::s_glUniform1uiv(void* self, GLint location, GLsizei count, const GLuint *value) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform1uiv_enc(self, hostLoc, count, value);
+ ctx->m_state->validateUniform(false /* is float? */, true /* is unsigned? */, 1 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform1uiv_enc(self, location, count, value);
}
void GL2Encoder::s_glUniform2uiv(void* self, GLint location, GLsizei count, const GLuint *value) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform2uiv_enc(self, hostLoc, count, value);
+ ctx->m_state->validateUniform(false /* is float? */, true /* is unsigned? */, 2 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform2uiv_enc(self, location, count, value);
}
void GL2Encoder::s_glUniform3uiv(void* self, GLint location, GLsizei count, const GLuint *value) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform3uiv_enc(self, hostLoc, count, value);
+ ctx->m_state->validateUniform(false /* is float? */, true /* is unsigned? */, 3 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform3uiv_enc(self, location, count, value);
}
void GL2Encoder::s_glUniform4uiv(void* self, GLint location, GLsizei count, const GLuint *value) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniform4uiv_enc(self, hostLoc, count, value);
+ ctx->m_state->validateUniform(false /* is float? */, true /* is unsigned? */, 4 /* columns */, 1 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniform4uiv_enc(self, location, count, value);
}
void GL2Encoder::s_glUniformMatrix2x3fv(void* self, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniformMatrix2x3fv_enc(self, hostLoc, count, transpose, value);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 2 /* columns */, 3 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniformMatrix2x3fv_enc(self, location, count, transpose, value);
}
void GL2Encoder::s_glUniformMatrix3x2fv(void* self, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniformMatrix3x2fv_enc(self, hostLoc, count, transpose, value);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 3 /* columns */, 2 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniformMatrix3x2fv_enc(self, location, count, transpose, value);
}
void GL2Encoder::s_glUniformMatrix2x4fv(void* self, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniformMatrix2x4fv_enc(self, hostLoc, count, transpose, value);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 2 /* columns */, 4 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniformMatrix2x4fv_enc(self, location, count, transpose, value);
}
void GL2Encoder::s_glUniformMatrix4x2fv(void* self, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniformMatrix4x2fv_enc(self, hostLoc, count, transpose, value);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 4 /* columns */, 2 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniformMatrix4x2fv_enc(self, location, count, transpose, value);
}
void GL2Encoder::s_glUniformMatrix3x4fv(void* self, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniformMatrix3x4fv_enc(self, hostLoc, count, transpose, value);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 3 /* columns */, 4 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniformMatrix3x4fv_enc(self, location, count, transpose, value);
}
void GL2Encoder::s_glUniformMatrix4x3fv(void* self, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) {
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glUniformMatrix4x3fv_enc(self, hostLoc, count, transpose, value);
+ ctx->m_state->validateUniform(true /* is float? */, false /* is unsigned? */, 4 /* columns */, 3 /* rows */, location, count /* count */, ctx->getErrorPtr());
+ ctx->m_glUniformMatrix4x3fv_enc(self, location, count, transpose, value);
}
void GL2Encoder::s_glGetUniformuiv(void* self, GLuint program, GLint location, GLuint* params) {
@@ -3642,14 +3889,18 @@ void GL2Encoder::s_glGetUniformuiv(void* self, GLuint program, GLint location, G
SET_ERROR_IF(!ctx->m_shared->isShaderOrProgramObject(program), GL_INVALID_VALUE);
SET_ERROR_IF(!ctx->m_shared->isProgram(program), GL_INVALID_OPERATION);
SET_ERROR_IF(!ctx->m_shared->isProgramInitialized(program), GL_INVALID_OPERATION);
- GLint hostLoc = location;
- SET_ERROR_IF(ctx->m_shared->getProgramUniformType(program,hostLoc)==0, GL_INVALID_OPERATION);
- ctx->m_glGetUniformuiv_enc(self, program, hostLoc, params);
+ SET_ERROR_IF(ctx->m_shared->getProgramUniformType(program,location)==0, GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->m_shared->isProgramUniformLocationValid(program,location), GL_INVALID_OPERATION);
+ ctx->m_glGetUniformuiv_enc(self, program, location, params);
}
void GL2Encoder::s_glGetActiveUniformBlockiv(void* self, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) {
GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_PROGRAM_NAME(program);
+ SET_ERROR_IF(!GLESv2Validation::allowedGetActiveUniformBlock(pname), GL_INVALID_ENUM);
+ SET_ERROR_IF(uniformBlockIndex >= ctx->m_shared->getActiveUniformBlockCount(program), GL_INVALID_VALUE);
+
// refresh client state's # active uniforms in this block
if (pname == GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) {
// TODO if worth it: cache uniform count and other params,
@@ -3670,10 +3921,8 @@ void GL2Encoder::s_glGetActiveUniformBlockiv(void* self, GLuint program, GLuint
void GL2Encoder::s_glGetVertexAttribIiv(void* self, GLuint index, GLenum pname, GLint* params) {
GL2Encoder *ctx = (GL2Encoder *)self;
- assert(ctx->m_state);
- GLint maxIndex;
- ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex);
- SET_ERROR_IF(!(index < maxIndex), GL_INVALID_VALUE);
+ VALIDATE_VERTEX_ATTRIB_INDEX(index);
+ SET_ERROR_IF(!GLESv2Validation::allowedGetVertexAttrib(pname), GL_INVALID_ENUM);
if (!ctx->m_state->getVertexAttribParameter<GLint>(index, pname, params)) {
ctx->m_glGetVertexAttribIiv_enc(self, index, pname, params);
@@ -3682,10 +3931,8 @@ void GL2Encoder::s_glGetVertexAttribIiv(void* self, GLuint index, GLenum pname,
void GL2Encoder::s_glGetVertexAttribIuiv(void* self, GLuint index, GLenum pname, GLuint* params) {
GL2Encoder *ctx = (GL2Encoder *)self;
- assert(ctx->m_state);
- GLint maxIndex;
- ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxIndex);
- SET_ERROR_IF(!(index < maxIndex), GL_INVALID_VALUE);
+ VALIDATE_VERTEX_ATTRIB_INDEX(index);
+ SET_ERROR_IF(!GLESv2Validation::allowedGetVertexAttrib(pname), GL_INVALID_ENUM);
if (!ctx->m_state->getVertexAttribParameter<GLuint>(index, pname, params)) {
ctx->m_glGetVertexAttribIuiv_enc(self, index, pname, params);
@@ -3741,12 +3988,18 @@ void GL2Encoder::s_glRenderbufferStorageMultisample(void* self,
SET_ERROR_IF(target != GL_RENDERBUFFER, GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validation::rboFormat(ctx, internalformat), GL_INVALID_ENUM);
+ SET_ERROR_IF(width < 0 || height < 0, GL_INVALID_VALUE);
+ GLint max_rb_size;
+ ctx->glGetIntegerv(ctx, GL_MAX_RENDERBUFFER_SIZE, &max_rb_size);
+ SET_ERROR_IF(width > max_rb_size || height > max_rb_size, GL_INVALID_VALUE);
+
GLint max_samples;
ctx->s_glGetInternalformativ(ctx, target, internalformat, GL_SAMPLES, 1, &max_samples);
SET_ERROR_IF(samples > max_samples, GL_INVALID_OPERATION);
state->setBoundRenderbufferFormat(internalformat);
state->setBoundRenderbufferSamples(samples);
+ state->setBoundRenderbufferDimensions(width, height);
ctx->m_glRenderbufferStorageMultisample_enc(
self, target, samples, internalformat, width, height);
}
@@ -3818,11 +4071,16 @@ void GL2Encoder::s_glFramebufferTextureLayer(void* self, GLenum target, GLenum a
SET_ERROR_IF(!GLESv2Validation::framebufferTarget(ctx, target), GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validation::framebufferAttachment(ctx, attachment), GL_INVALID_ENUM);
+ SET_ERROR_IF(texture != 0 && layer < 0, GL_INVALID_VALUE);
+ GLint maxArrayTextureLayers;
+ ctx->glGetIntegerv(ctx, GL_MAX_ARRAY_TEXTURE_LAYERS, &maxArrayTextureLayers);
+ SET_ERROR_IF(texture != 0 && layer > maxArrayTextureLayers - 1, GL_INVALID_VALUE);
+ SET_ERROR_IF(!ctx->m_state->boundFramebuffer(target), GL_INVALID_OPERATION);
GLenum lastBoundTarget = state->queryTexLastBoundTarget(texture);
SET_ERROR_IF(lastBoundTarget != GL_TEXTURE_2D_ARRAY &&
lastBoundTarget != GL_TEXTURE_3D,
GL_INVALID_OPERATION);
- state->attachTextureObject(target, attachment, texture);
+ state->attachTextureObject(target, attachment, texture, level, layer);
GLint max3DTextureSize;
ctx->glGetIntegerv(ctx, GL_MAX_3D_TEXTURE_SIZE, &max3DTextureSize);
@@ -3849,7 +4107,7 @@ void GL2Encoder::s_glTexStorage2D(void* self, GLenum target, GLsizei levels, GLe
SET_ERROR_IF(state->isBoundTextureImmutableFormat(target), GL_INVALID_OPERATION);
state->setBoundTextureInternalFormat(target, internalformat);
- state->setBoundTextureDims(target, -1, width, height, 1);
+ state->setBoundTextureDims(target, -1 /* set all cube dimensions */, -1, width, height, 1);
state->setBoundTextureImmutableFormat(target);
if (target == GL_TEXTURE_2D) {
@@ -3880,6 +4138,11 @@ void GL2Encoder::s_glTransformFeedbackVaryings(void* self, GLuint program, GLsiz
bufferMode != GL_SEPARATE_ATTRIBS,
GL_INVALID_ENUM);
+ // NOTE: This only has an effect on the program that is being linked.
+ // The dEQP test in dEQP-GLES3.functional.negative_api doesn't know
+ // about this.
+ ctx->m_state->setTransformFeedbackVaryingsCountForLinking(count);
+
if (!count) return;
GLint err = GL_NO_ERROR;
@@ -3892,29 +4155,51 @@ void GL2Encoder::s_glTransformFeedbackVaryings(void* self, GLuint program, GLsiz
void GL2Encoder::s_glBeginTransformFeedback(void* self, GLenum primitiveMode) {
GL2Encoder* ctx = (GL2Encoder*)self;
GLClientState* state = ctx->m_state;
+ SET_ERROR_IF(
+ primitiveMode != GL_POINTS &&
+ primitiveMode != GL_LINES &&
+ primitiveMode != GL_TRIANGLES,
+ GL_INVALID_ENUM);
+ SET_ERROR_IF(
+ ctx->m_state->getTransformFeedbackActive(),
+ GL_INVALID_OPERATION);
+ // TODO:
+ // dEQP-GLES3.functional.lifetime.attach.deleted_output.buffer_transform_feedback
+ // SET_ERROR_IF(
+ // !ctx->boundBuffer(GL_TRANSFORM_FEEDBACK_BUFFER),
+ // GL_INVALID_OPERATION);
+ SET_ERROR_IF(
+ !ctx->m_state->currentProgram(), GL_INVALID_OPERATION);
ctx->m_glBeginTransformFeedback_enc(ctx, primitiveMode);
- state->setTransformFeedbackActiveUnpaused(true);
+ state->setTransformFeedbackActive(true);
+ state->setTransformFeedbackUnpaused(true);
}
void GL2Encoder::s_glEndTransformFeedback(void* self) {
GL2Encoder* ctx = (GL2Encoder*)self;
GLClientState* state = ctx->m_state;
+ SET_ERROR_IF(!state->getTransformFeedbackActive(), GL_INVALID_OPERATION);
ctx->m_glEndTransformFeedback_enc(ctx);
- state->setTransformFeedbackActiveUnpaused(false);
+ state->setTransformFeedbackActive(false);
+ state->setTransformFeedbackUnpaused(false);
}
void GL2Encoder::s_glPauseTransformFeedback(void* self) {
GL2Encoder* ctx = (GL2Encoder*)self;
GLClientState* state = ctx->m_state;
+ SET_ERROR_IF(!state->getTransformFeedbackActive(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!state->getTransformFeedbackUnpaused(), GL_INVALID_OPERATION);
ctx->m_glPauseTransformFeedback_enc(ctx);
- state->setTransformFeedbackActiveUnpaused(false);
+ state->setTransformFeedbackUnpaused(false);
}
void GL2Encoder::s_glResumeTransformFeedback(void* self) {
GL2Encoder* ctx = (GL2Encoder*)self;
GLClientState* state = ctx->m_state;
+ SET_ERROR_IF(!state->getTransformFeedbackActive(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(state->getTransformFeedbackUnpaused(), GL_INVALID_OPERATION);
ctx->m_glResumeTransformFeedback_enc(ctx);
- state->setTransformFeedbackActiveUnpaused(true);
+ state->setTransformFeedbackUnpaused(true);
}
void GL2Encoder::s_glTexImage3D(void* self, GLenum target, GLint level, GLint internalFormat,
@@ -3928,6 +4213,10 @@ void GL2Encoder::s_glTexImage3D(void* self, GLenum target, GLint level, GLint in
GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validation::pixelType(ctx, type), GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validation::pixelFormat(ctx, format), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::pixelSizedFormat(ctx, internalFormat, format, type), GL_INVALID_OPERATION);
+ SET_ERROR_IF(target == GL_TEXTURE_3D &&
+ ((format == GL_DEPTH_COMPONENT) ||
+ (format == GL_DEPTH_STENCIL)), GL_INVALID_OPERATION);
// If unpack buffer is nonzero, verify unmapped state.
SET_ERROR_IF(ctx->isBufferTargetMapped(GL_PIXEL_UNPACK_BUFFER), GL_INVALID_OPERATION);
@@ -3943,7 +4232,13 @@ void GL2Encoder::s_glTexImage3D(void* self, GLenum target, GLint level, GLint in
SET_ERROR_IF(width < 0 || height < 0 || depth < 0, GL_INVALID_VALUE);
SET_ERROR_IF(width > max_texture_size, GL_INVALID_VALUE);
SET_ERROR_IF(height > max_texture_size, GL_INVALID_VALUE);
- SET_ERROR_IF(depth > max_texture_size, GL_INVALID_VALUE);
+ if (target == GL_TEXTURE_3D) {
+ SET_ERROR_IF(depth > max_texture_size, GL_INVALID_VALUE);
+ } else {
+ GLint maxArrayTextureLayers;
+ ctx->glGetIntegerv(ctx, GL_MAX_ARRAY_TEXTURE_LAYERS, &maxArrayTextureLayers);
+ SET_ERROR_IF(depth > maxArrayTextureLayers, GL_INVALID_VALUE);
+ }
SET_ERROR_IF(width > max_3d_texture_size, GL_INVALID_VALUE);
SET_ERROR_IF(height > max_3d_texture_size, GL_INVALID_VALUE);
SET_ERROR_IF(depth > max_3d_texture_size, GL_INVALID_VALUE);
@@ -3951,12 +4246,12 @@ void GL2Encoder::s_glTexImage3D(void* self, GLenum target, GLint level, GLint in
// If unpack buffer is nonzero, verify buffer data fits and is evenly divisible by the type.
SET_ERROR_IF(ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) &&
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER) &&
- (ctx->m_state->pboNeededDataSize(width, height, depth, format, type, 0) >
+ ((uintptr_t)data + ctx->m_state->pboNeededDataSize(width, height, depth, format, type, 0) >
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER)->m_size),
GL_INVALID_OPERATION);
SET_ERROR_IF(ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) &&
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER) &&
- (ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER)->m_size %
+ ((uintptr_t)data %
glSizeof(type)),
GL_INVALID_OPERATION);
SET_ERROR_IF(state->isBoundTextureImmutableFormat(target), GL_INVALID_OPERATION);
@@ -3964,7 +4259,7 @@ void GL2Encoder::s_glTexImage3D(void* self, GLenum target, GLint level, GLint in
state->setBoundTextureInternalFormat(target, internalFormat);
state->setBoundTextureFormat(target, format);
state->setBoundTextureType(target, type);
- state->setBoundTextureDims(target, level, width, height, depth);
+ state->setBoundTextureDims(target, target, level, width, height, depth);
if (ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER)) {
ctx->glTexImage3DOffsetAEMU(
@@ -4012,13 +4307,12 @@ void GL2Encoder::s_glTexSubImage3D(void* self, GLenum target, GLint level, GLint
// If unpack buffer is nonzero, verify buffer data fits and is evenly divisible by the type.
SET_ERROR_IF(ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) &&
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER) &&
- (ctx->m_state->pboNeededDataSize(width, height, depth, format, type, 0) >
+ ((uintptr_t)data + ctx->m_state->pboNeededDataSize(width, height, depth, format, type, 0) >
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER)->m_size),
GL_INVALID_OPERATION);
SET_ERROR_IF(ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) &&
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER) &&
- (ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER)->m_size %
- glSizeof(type)),
+ ((uintptr_t)data % glSizeof(type)),
GL_INVALID_OPERATION);
SET_ERROR_IF(!ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) && !data, GL_INVALID_OPERATION);
SET_ERROR_IF(xoffset < 0 || yoffset < 0 || zoffset < 0, GL_INVALID_VALUE);
@@ -4042,22 +4336,48 @@ void GL2Encoder::s_glCompressedTexImage3D(void* self, GLenum target, GLint level
GL2Encoder* ctx = (GL2Encoder*)self;
GLClientState* state = ctx->m_state;
+ SET_ERROR_IF(target != GL_TEXTURE_3D &&
+ target != GL_TEXTURE_2D_ARRAY,
+ GL_INVALID_ENUM);
// Filter compressed formats support.
SET_ERROR_IF(!GLESv2Validation::supportedCompressedFormat(ctx, internalformat), GL_INVALID_ENUM);
+ SET_ERROR_IF(target == GL_TEXTURE_CUBE_MAP, GL_INVALID_ENUM);
// If unpack buffer is nonzero, verify unmapped state.
SET_ERROR_IF(ctx->isBufferTargetMapped(GL_PIXEL_UNPACK_BUFFER), GL_INVALID_OPERATION);
SET_ERROR_IF(width < 0 || height < 0 || depth < 0, GL_INVALID_VALUE);
SET_ERROR_IF(border, GL_INVALID_VALUE);
+
+ GLint max_texture_size;
+ GLint max_3d_texture_size;
+ ctx->glGetIntegerv(ctx, GL_MAX_TEXTURE_SIZE, &max_texture_size);
+ ctx->glGetIntegerv(ctx, GL_MAX_3D_TEXTURE_SIZE, &max_3d_texture_size);
+ SET_ERROR_IF(level < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(level > ilog2(max_texture_size), GL_INVALID_VALUE);
+ SET_ERROR_IF(level > ilog2(max_3d_texture_size), GL_INVALID_VALUE);
+
+ SET_ERROR_IF(width < 0 || height < 0 || depth < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(width > max_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(height > max_texture_size, GL_INVALID_VALUE);
+ if (target == GL_TEXTURE_3D) {
+ SET_ERROR_IF(depth > max_texture_size, GL_INVALID_VALUE);
+ } else {
+ GLint maxArrayTextureLayers;
+ ctx->glGetIntegerv(ctx, GL_MAX_ARRAY_TEXTURE_LAYERS, &maxArrayTextureLayers);
+ SET_ERROR_IF(depth > maxArrayTextureLayers, GL_INVALID_VALUE);
+ }
+ SET_ERROR_IF(width > max_3d_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(height > max_3d_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(depth > max_3d_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(GLESTextureUtils::isAstcFormat(internalformat) && GL_TEXTURE_3D == target, GL_INVALID_OPERATION);
+
// If unpack buffer is nonzero, verify buffer data fits.
SET_ERROR_IF(ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER) &&
ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER) &&
(imageSize > ctx->getBufferData(GL_PIXEL_UNPACK_BUFFER)->m_size),
GL_INVALID_OPERATION);
- // TODO: Fix:
- // If |imageSize| is too small for compressed dimensions.
- // SET_ERROR_IF(GLESv2Validation::compressedTexImageSize(internalformat, width, height, depth) > imageSize, GL_INVALID_VALUE);
+ SET_ERROR_IF(!ctx->m_state->compressedTexImageSizeCompatible(internalformat, width, height, depth, imageSize), GL_INVALID_VALUE);
state->setBoundTextureInternalFormat(target, (GLint)internalformat);
- state->setBoundTextureDims(target, level, width, height, depth);
+ state->setBoundTextureDims(target, target, level, width, height, depth);
if (ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER)) {
ctx->glCompressedTexImage3DOffsetAEMU(
@@ -4076,6 +4396,7 @@ void GL2Encoder::s_glCompressedTexSubImage3D(void* self, GLenum target, GLint le
GL2Encoder* ctx = (GL2Encoder*)self;
SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(target == GL_TEXTURE_CUBE_MAP, GL_INVALID_ENUM);
// If unpack buffer is nonzero, verify unmapped state.
SET_ERROR_IF(ctx->isBufferTargetMapped(GL_PIXEL_UNPACK_BUFFER), GL_INVALID_OPERATION);
SET_ERROR_IF(width < 0 || height < 0 || depth < 0, GL_INVALID_VALUE);
@@ -4086,6 +4407,52 @@ void GL2Encoder::s_glCompressedTexSubImage3D(void* self, GLenum target, GLint le
GL_INVALID_OPERATION);
SET_ERROR_IF(xoffset < 0 || yoffset < 0 || zoffset < 0, GL_INVALID_VALUE);
+ GLint max_texture_size;
+ GLint max_3d_texture_size;
+ ctx->glGetIntegerv(ctx, GL_MAX_TEXTURE_SIZE, &max_texture_size);
+ ctx->glGetIntegerv(ctx, GL_MAX_3D_TEXTURE_SIZE, &max_3d_texture_size);
+ SET_ERROR_IF(level < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(level > ilog2(max_texture_size), GL_INVALID_VALUE);
+ SET_ERROR_IF(level > ilog2(max_3d_texture_size), GL_INVALID_VALUE);
+ SET_ERROR_IF(width < 0 || height < 0 || depth < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(xoffset < 0 || yoffset < 0 || zoffset < 0, GL_INVALID_VALUE);
+ GLenum stateTarget = target;
+ if (target == GL_TEXTURE_CUBE_MAP_POSITIVE_X ||
+ target == GL_TEXTURE_CUBE_MAP_POSITIVE_Y ||
+ target == GL_TEXTURE_CUBE_MAP_POSITIVE_Z ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_X ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)
+ stateTarget = GL_TEXTURE_CUBE_MAP;
+
+ GLuint tex = ctx->m_state->getBoundTexture(stateTarget);
+ GLsizei neededWidth = xoffset + width;
+ GLsizei neededHeight = yoffset + height;
+ GLsizei neededDepth = zoffset + depth;
+
+ SET_ERROR_IF(tex &&
+ (neededWidth > ctx->m_state->queryTexWidth(level, tex) ||
+ neededHeight > ctx->m_state->queryTexHeight(level, tex) ||
+ neededDepth > ctx->m_state->queryTexDepth(level, tex)),
+ GL_INVALID_VALUE);
+
+ GLint internalFormat = ctx->m_state->queryTexInternalFormat(tex);
+ SET_ERROR_IF(internalFormat != format, GL_INVALID_OPERATION);
+
+ GLint totalWidth = ctx->m_state->queryTexWidth(level, tex);
+ GLint totalHeight = ctx->m_state->queryTexHeight(level, tex);
+
+ if (GLESTextureUtils::isEtc2Format(internalFormat)) {
+ SET_ERROR_IF((width % 4) && (totalWidth != xoffset + width), GL_INVALID_OPERATION);
+ SET_ERROR_IF((height % 4) && (totalHeight != yoffset + height), GL_INVALID_OPERATION);
+ SET_ERROR_IF((xoffset % 4) || (yoffset % 4), GL_INVALID_OPERATION);
+ }
+
+ SET_ERROR_IF(totalWidth < xoffset + width, GL_INVALID_VALUE);
+ SET_ERROR_IF(totalHeight < yoffset + height, GL_INVALID_VALUE);
+
+ SET_ERROR_IF(!ctx->m_state->compressedTexImageSizeCompatible(internalFormat, width, height, depth, imageSize), GL_INVALID_VALUE);
+
if (ctx->boundBuffer(GL_PIXEL_UNPACK_BUFFER)) {
ctx->glCompressedTexSubImage3DOffsetAEMU(
ctx, target, level,
@@ -4110,7 +4477,27 @@ void GL2Encoder::s_glTexStorage3D(void* self, GLenum target, GLsizei levels, GLe
GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validation::pixelInternalFormat(internalformat), GL_INVALID_ENUM);
SET_ERROR_IF(!state->getBoundTexture(target), GL_INVALID_OPERATION);
- SET_ERROR_IF(levels < 1 || width < 1 || height < 1, GL_INVALID_VALUE);
+ SET_ERROR_IF(levels < 1 || width < 1 || height < 1 || depth < 1, GL_INVALID_VALUE);
+ GLint max_texture_size;
+ GLint max_3d_texture_size;
+ ctx->glGetIntegerv(ctx, GL_MAX_TEXTURE_SIZE, &max_texture_size);
+ ctx->glGetIntegerv(ctx, GL_MAX_3D_TEXTURE_SIZE, &max_3d_texture_size);
+ SET_ERROR_IF(width > max_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(height > max_texture_size, GL_INVALID_VALUE);
+ if (target == GL_TEXTURE_3D) {
+ SET_ERROR_IF(depth > max_texture_size, GL_INVALID_VALUE);
+ } else {
+ GLint maxArrayTextureLayers;
+ ctx->glGetIntegerv(ctx, GL_MAX_ARRAY_TEXTURE_LAYERS, &maxArrayTextureLayers);
+ SET_ERROR_IF(depth > maxArrayTextureLayers, GL_INVALID_VALUE);
+ }
+
+ SET_ERROR_IF(width > max_3d_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(height > max_3d_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(depth > max_3d_texture_size, GL_INVALID_VALUE);
+
+ SET_ERROR_IF(GLESTextureUtils::isAstcFormat(internalformat) && GL_TEXTURE_3D == target, GL_INVALID_OPERATION);
+
SET_ERROR_IF(target == GL_TEXTURE_3D && (levels > ilog2((uint32_t)std::max(width, std::max(height, depth))) + 1),
GL_INVALID_OPERATION);
SET_ERROR_IF(target == GL_TEXTURE_2D_ARRAY && (levels > ilog2((uint32_t)std::max(width, height)) + 1),
@@ -4118,7 +4505,7 @@ void GL2Encoder::s_glTexStorage3D(void* self, GLenum target, GLsizei levels, GLe
SET_ERROR_IF(state->isBoundTextureImmutableFormat(target), GL_INVALID_OPERATION);
state->setBoundTextureInternalFormat(target, internalformat);
- state->setBoundTextureDims(target, -1, width, height, depth);
+ state->setBoundTextureDims(target, target, -1, width, height, depth);
state->setBoundTextureImmutableFormat(target);
ctx->m_glTexStorage3D_enc(ctx, target, levels, internalformat, width, height, depth);
state->setBoundTextureImmutableFormat(target);
@@ -4130,6 +4517,7 @@ void GL2Encoder::s_glDrawArraysInstanced(void* self, GLenum mode, GLint first, G
SET_ERROR_IF(!isValidDrawMode(mode), GL_INVALID_ENUM);
SET_ERROR_IF(count < 0, GL_INVALID_VALUE);
SET_ERROR_IF(primcount < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(ctx->m_state->checkFramebufferCompleteness(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION);
bool has_client_vertex_arrays = false;
bool has_indirect_arrays = false;
@@ -4146,6 +4534,7 @@ void GL2Encoder::s_glDrawArraysInstanced(void* self, GLenum mode, GLint first, G
ctx->m_glDrawArraysInstanced_enc(ctx, mode, first, count, primcount);
}
ctx->m_stream->flush();
+ ctx->m_state->postDraw();
}
void GL2Encoder::s_glDrawElementsInstanced(void* self, GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount)
@@ -4158,6 +4547,7 @@ void GL2Encoder::s_glDrawElementsInstanced(void* self, GLenum mode, GLsizei coun
SET_ERROR_IF(primcount < 0, GL_INVALID_VALUE);
SET_ERROR_IF(!(type == GL_UNSIGNED_BYTE || type == GL_UNSIGNED_SHORT || type == GL_UNSIGNED_INT), GL_INVALID_ENUM);
SET_ERROR_IF(ctx->m_state->getTransformFeedbackActiveUnpaused(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(ctx->m_state->checkFramebufferCompleteness(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION);
bool has_client_vertex_arrays = false;
bool has_indirect_arrays = false;
@@ -4237,6 +4627,7 @@ void GL2Encoder::s_glDrawElementsInstanced(void* self, GLenum mode, GLsizei coun
ALOGE("glDrawElements: direct index & direct buffer data - will be implemented in later versions;\n");
}
}
+ ctx->m_state->postDraw();
}
void GL2Encoder::s_glDrawRangeElements(void* self, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void* indices)
@@ -4249,6 +4640,7 @@ void GL2Encoder::s_glDrawRangeElements(void* self, GLenum mode, GLuint start, GL
SET_ERROR_IF(count < 0, GL_INVALID_VALUE);
SET_ERROR_IF(!(type == GL_UNSIGNED_BYTE || type == GL_UNSIGNED_SHORT || type == GL_UNSIGNED_INT), GL_INVALID_ENUM);
SET_ERROR_IF(ctx->m_state->getTransformFeedbackActiveUnpaused(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(ctx->m_state->checkFramebufferCompleteness(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION);
bool has_client_vertex_arrays = false;
bool has_indirect_arrays = false;
@@ -4334,6 +4726,7 @@ void GL2Encoder::s_glDrawRangeElements(void* self, GLenum mode, GLuint start, GL
ALOGE("glDrawElements: direct index & direct buffer data - will be implemented in later versions;\n");
}
}
+ ctx->m_state->postDraw();
}
const GLubyte* GL2Encoder::s_glGetStringi(void* self, GLenum name, GLuint index) {
@@ -4383,12 +4776,12 @@ const GLubyte* GL2Encoder::s_glGetStringi(void* self, GLenum name, GLuint index)
void GL2Encoder::s_glGetProgramBinary(void* self, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, void* binary) {
GL2Encoder *ctx = (GL2Encoder *)self;
- SET_ERROR_IF(!ctx->m_shared->isProgram(program), GL_INVALID_OPERATION);
+ VALIDATE_PROGRAM_NAME(program);
GLint linkStatus = 0;
- ctx->glGetProgramiv(self, program, GL_LINK_STATUS, &linkStatus);
+ ctx->m_glGetProgramiv_enc(self, program, GL_LINK_STATUS, &linkStatus);
GLint properLength = 0;
- ctx->glGetProgramiv(self, program, GL_PROGRAM_BINARY_LENGTH, &properLength);
+ ctx->m_glGetProgramiv_enc(self, program, GL_PROGRAM_BINARY_LENGTH, &properLength);
SET_ERROR_IF(!linkStatus, GL_INVALID_OPERATION);
SET_ERROR_IF(bufSize < properLength, GL_INVALID_OPERATION);
@@ -4401,6 +4794,7 @@ void GL2Encoder::s_glReadPixels(void* self, GLint x, GLint y, GLsizei width, GLs
SET_ERROR_IF(!GLESv2Validation::readPixelsFormat(format), GL_INVALID_ENUM);
SET_ERROR_IF(!GLESv2Validation::readPixelsType(type), GL_INVALID_ENUM);
+ SET_ERROR_IF(!(GLESv2Validation::pixelOp(format,type)),GL_INVALID_OPERATION);
SET_ERROR_IF(width < 0 || height < 0, GL_INVALID_VALUE);
SET_ERROR_IF(ctx->isBufferTargetMapped(GL_PIXEL_PACK_BUFFER), GL_INVALID_OPERATION);
SET_ERROR_IF(ctx->boundBuffer(GL_PIXEL_PACK_BUFFER) &&
@@ -4408,6 +4802,24 @@ void GL2Encoder::s_glReadPixels(void* self, GLint x, GLint y, GLsizei width, GLs
(ctx->m_state->pboNeededDataSize(width, height, 1, format, type, 1) >
ctx->getBufferData(GL_PIXEL_PACK_BUFFER)->m_size),
GL_INVALID_OPERATION);
+ SET_ERROR_IF(ctx->s_glCheckFramebufferStatus(ctx, GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION);
+
+ // now is complete
+ // GL_INVALID_OPERATION is generated if GL_READ_FRAMEBUFFER_BINDING is nonzero, the read fbo is complete, and the value of
+ // GL_SAMPLE_BUFFERS for the read framebuffer is greater than zero
+ if (ctx->m_state->boundFramebuffer(GL_READ_FRAMEBUFFER) &&
+ ctx->s_glCheckFramebufferStatus(ctx, GL_READ_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE) {
+ FboFormatInfo resInfo;
+ ctx->m_state->getBoundFramebufferFormat(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, &resInfo);
+ if (resInfo.type == FBO_ATTACHMENT_RENDERBUFFER) {
+ SET_ERROR_IF(resInfo.rb_multisamples > 0, GL_INVALID_OPERATION);
+ }
+ if (resInfo.type == FBO_ATTACHMENT_TEXTURE) {
+ SET_ERROR_IF(resInfo.tex_multisamples > 0, GL_INVALID_OPERATION);
+ }
+ }
+
+
/*
GL_INVALID_OPERATION is generated if the readbuffer of the currently bound framebuffer is a fixed point normalized surface and format and type are neither GL_RGBA and GL_UNSIGNED_BYTE, respectively, nor the format/type pair returned by querying GL_IMPLEMENTATION_COLOR_READ_FORMAT and GL_IMPLEMENTATION_COLOR_READ_TYPE.
@@ -4436,6 +4848,7 @@ GL_INVALID_OPERATION is generated if the readbuffer of the currently bound frame
ctx, x, y, width, height,
format, type, pixels);
}
+ ctx->m_state->postReadPixels();
}
// Track enabled state for some things like:
@@ -4443,6 +4856,8 @@ GL_INVALID_OPERATION is generated if the readbuffer of the currently bound frame
void GL2Encoder::s_glEnable(void* self, GLenum what) {
GL2Encoder *ctx = (GL2Encoder *)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedEnable(ctx->majorVersion(), ctx->minorVersion(), what), GL_INVALID_ENUM);
+
switch (what) {
case GL_PRIMITIVE_RESTART_FIXED_INDEX:
ctx->m_primitiveRestartEnabled = true;
@@ -4455,6 +4870,8 @@ void GL2Encoder::s_glEnable(void* self, GLenum what) {
void GL2Encoder::s_glDisable(void* self, GLenum what) {
GL2Encoder *ctx = (GL2Encoder *)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedEnable(ctx->majorVersion(), ctx->minorVersion(), what), GL_INVALID_ENUM);
+
switch (what) {
case GL_PRIMITIVE_RESTART_FIXED_INDEX:
ctx->m_primitiveRestartEnabled = false;
@@ -4467,7 +4884,18 @@ void GL2Encoder::s_glDisable(void* self, GLenum what) {
void GL2Encoder::s_glClearBufferiv(void* self, GLenum buffer, GLint drawBuffer, const GLint * value) {
GL2Encoder *ctx = (GL2Encoder *)self;
- SET_ERROR_IF(buffer == GL_DEPTH || buffer == GL_DEPTH_STENCIL, GL_INVALID_ENUM);
+ SET_ERROR_IF(buffer != GL_COLOR && buffer != GL_STENCIL, GL_INVALID_ENUM);
+
+ GLint maxDrawBuffers;
+ ctx->glGetIntegerv(ctx, GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
+
+ SET_ERROR_IF(!value, GL_INVALID_VALUE);
+
+ if (buffer == GL_COLOR) {
+ SET_ERROR_IF(drawBuffer < 0 || drawBuffer>= maxDrawBuffers, GL_INVALID_VALUE);
+ } else {
+ SET_ERROR_IF(drawBuffer != 0, GL_INVALID_VALUE);
+ }
ctx->m_glClearBufferiv_enc(ctx, buffer, drawBuffer, value);
}
@@ -4475,7 +4903,12 @@ void GL2Encoder::s_glClearBufferiv(void* self, GLenum buffer, GLint drawBuffer,
void GL2Encoder::s_glClearBufferuiv(void* self, GLenum buffer, GLint drawBuffer, const GLuint * value) {
GL2Encoder *ctx = (GL2Encoder *)self;
- SET_ERROR_IF(buffer == GL_DEPTH || buffer == GL_STENCIL || buffer == GL_DEPTH_STENCIL, GL_INVALID_ENUM);
+ SET_ERROR_IF(buffer != GL_COLOR, GL_INVALID_ENUM);
+ SET_ERROR_IF(!value, GL_INVALID_VALUE);
+
+ GLint maxDrawBuffers;
+ ctx->glGetIntegerv(ctx, GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
+ SET_ERROR_IF(drawBuffer < 0 || drawBuffer>= maxDrawBuffers, GL_INVALID_VALUE);
ctx->m_glClearBufferuiv_enc(ctx, buffer, drawBuffer, value);
}
@@ -4483,11 +4916,31 @@ void GL2Encoder::s_glClearBufferuiv(void* self, GLenum buffer, GLint drawBuffer,
void GL2Encoder::s_glClearBufferfv(void* self, GLenum buffer, GLint drawBuffer, const GLfloat * value) {
GL2Encoder *ctx = (GL2Encoder *)self;
- SET_ERROR_IF(buffer == GL_STENCIL || buffer == GL_DEPTH_STENCIL, GL_INVALID_ENUM);
+ SET_ERROR_IF(buffer != GL_COLOR && buffer != GL_DEPTH, GL_INVALID_ENUM);
+
+ SET_ERROR_IF(!value, GL_INVALID_VALUE);
+
+ GLint maxDrawBuffers;
+ ctx->glGetIntegerv(ctx, GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
+
+ if (buffer == GL_COLOR) {
+ SET_ERROR_IF(drawBuffer < 0 || drawBuffer>= maxDrawBuffers, GL_INVALID_VALUE);
+ } else {
+ SET_ERROR_IF(drawBuffer != 0, GL_INVALID_VALUE);
+ }
ctx->m_glClearBufferfv_enc(ctx, buffer, drawBuffer, value);
}
+void GL2Encoder::s_glClearBufferfi(void* self, GLenum buffer, GLint drawBuffer, float depth, int stencil) {
+ GL2Encoder *ctx = (GL2Encoder *)self;
+
+ SET_ERROR_IF(buffer != GL_DEPTH_STENCIL, GL_INVALID_ENUM);
+ SET_ERROR_IF(drawBuffer != 0, GL_INVALID_VALUE);
+
+ ctx->m_glClearBufferfi_enc(ctx, buffer, drawBuffer, depth, stencil);
+}
+
void GL2Encoder::s_glBlitFramebuffer(void* self, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
GL2Encoder *ctx = (GL2Encoder *)self;
GLClientState* state = ctx->m_state;
@@ -4495,6 +4948,7 @@ void GL2Encoder::s_glBlitFramebuffer(void* self, GLint srcX0, GLint srcY0, GLint
bool validateColor = mask & GL_COLOR_BUFFER_BIT;
bool validateDepth = mask & GL_DEPTH_BUFFER_BIT;
bool validateStencil = mask & GL_STENCIL_BUFFER_BIT;
+ bool validateDepthOrStencil = validateDepth || validateStencil;
FboFormatInfo read_fbo_format_info;
FboFormatInfo draw_fbo_format_info;
@@ -4502,6 +4956,13 @@ void GL2Encoder::s_glBlitFramebuffer(void* self, GLint srcX0, GLint srcY0, GLint
state->getBoundFramebufferFormat(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, &read_fbo_format_info);
state->getBoundFramebufferFormat(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, &draw_fbo_format_info);
+ if (read_fbo_format_info.type == FBO_ATTACHMENT_TEXTURE) {
+ SET_ERROR_IF(
+ GL_LINEAR == filter &&
+ GLESv2Validation::isIntegerFormat(read_fbo_format_info.tex_format),
+ GL_INVALID_OPERATION);
+ }
+
if (read_fbo_format_info.type == FBO_ATTACHMENT_TEXTURE &&
draw_fbo_format_info.type == FBO_ATTACHMENT_TEXTURE) {
SET_ERROR_IF(
@@ -4546,6 +5007,10 @@ void GL2Encoder::s_glBlitFramebuffer(void* self, GLint srcX0, GLint srcY0, GLint
}
}
+ if (validateDepthOrStencil) {
+ SET_ERROR_IF(filter != GL_NEAREST, GL_INVALID_OPERATION);
+ }
+
state->getBoundFramebufferFormat(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, &draw_fbo_format_info);
SET_ERROR_IF(
draw_fbo_format_info.type == FBO_ATTACHMENT_RENDERBUFFER &&
@@ -4633,6 +5098,17 @@ void GL2Encoder::s_glGenerateMipmap(void* self, GLenum target) {
GLESv2Validation::filterableTexFormat(ctx, internalformat)),
GL_INVALID_OPERATION);
+ GLenum stateTarget = target;
+ if (target == GL_TEXTURE_CUBE_MAP_POSITIVE_X ||
+ target == GL_TEXTURE_CUBE_MAP_POSITIVE_Y ||
+ target == GL_TEXTURE_CUBE_MAP_POSITIVE_Z ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_X ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y ||
+ target == GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)
+ stateTarget = GL_TEXTURE_CUBE_MAP;
+
+ SET_ERROR_IF(!ctx->m_state->isBoundTextureComplete(stateTarget), GL_INVALID_OPERATION);
+
if (target == GL_TEXTURE_2D) {
ctx->override2DTextureTarget(target);
}
@@ -4649,35 +5125,42 @@ void GL2Encoder::s_glBindSampler(void* self, GLuint unit, GLuint sampler) {
GLint maxCombinedUnits;
ctx->glGetIntegerv(ctx, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxCombinedUnits);
SET_ERROR_IF(unit >= maxCombinedUnits, GL_INVALID_VALUE);
-
- ctx->doSamplerBindEncodeCached(unit, sampler);
-}
-
-void GL2Encoder::doSamplerBindEncodeCached(GLuint unit, GLuint sampler) {
- if (m_state->isSamplerBindNoOp(unit, sampler)) return;
- m_glBindSampler_enc(this, unit, sampler);
- m_state->bindSampler(unit, sampler);
+ SET_ERROR_IF(!ctx->m_state->samplerExists(sampler), GL_INVALID_OPERATION);
+ if (ctx->m_state->isSamplerBindNoOp(unit, sampler)) return;
+ ctx->m_glBindSampler_enc(ctx, unit, sampler);
+ ctx->m_state->bindSampler(unit, sampler);
}
void GL2Encoder::s_glDeleteSamplers(void* self, GLsizei n, const GLuint* samplers) {
GL2Encoder *ctx = (GL2Encoder *)self;
ctx->m_state->onDeleteSamplers(n, samplers);
+ ctx->m_state->setExistence(GLClientState::ObjectType::Sampler, false, n, samplers);
ctx->m_glDeleteSamplers_enc(ctx, n, samplers);
}
GLsync GL2Encoder::s_glFenceSync(void* self, GLenum condition, GLbitfield flags) {
GL2Encoder *ctx = (GL2Encoder *)self;
+ RET_AND_SET_ERROR_IF(condition != GL_SYNC_GPU_COMMANDS_COMPLETE, GL_INVALID_ENUM, 0);
+ RET_AND_SET_ERROR_IF(flags != 0, GL_INVALID_VALUE, 0);
uint64_t syncHandle = ctx->glFenceSyncAEMU(ctx, condition, flags);
- return (GLsync)(uintptr_t)syncHandle;
+
+ GLsync res = (GLsync)(uintptr_t)syncHandle;
+ GLClientState::onFenceCreated(res);
+ return res;
}
GLenum GL2Encoder::s_glClientWaitSync(void* self, GLsync wait_on, GLbitfield flags, GLuint64 timeout) {
GL2Encoder *ctx = (GL2Encoder *)self;
+ RET_AND_SET_ERROR_IF(!GLClientState::fenceExists(wait_on), GL_INVALID_VALUE, GL_WAIT_FAILED);
+ RET_AND_SET_ERROR_IF(flags && !(flags & GL_SYNC_FLUSH_COMMANDS_BIT), GL_INVALID_VALUE, GL_WAIT_FAILED);
return ctx->glClientWaitSyncAEMU(ctx, (uint64_t)(uintptr_t)wait_on, flags, timeout);
}
void GL2Encoder::s_glWaitSync(void* self, GLsync wait_on, GLbitfield flags, GLuint64 timeout) {
GL2Encoder *ctx = (GL2Encoder *)self;
+ SET_ERROR_IF(flags != 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(timeout != GL_TIMEOUT_IGNORED, GL_INVALID_VALUE);
+ SET_ERROR_IF(!GLClientState::fenceExists(wait_on), GL_INVALID_VALUE);
ctx->glWaitSyncAEMU(ctx, (uint64_t)(uintptr_t)wait_on, flags, timeout);
}
@@ -4686,6 +5169,8 @@ void GL2Encoder::s_glDeleteSync(void* self, GLsync sync) {
if (!sync) return;
+ SET_ERROR_IF(!GLClientState::fenceExists(sync), GL_INVALID_VALUE);
+ GLClientState::onFenceDestroyed(sync);
ctx->glDeleteSyncAEMU(ctx, (uint64_t)(uintptr_t)sync);
}
@@ -4697,7 +5182,9 @@ GLboolean GL2Encoder::s_glIsSync(void* self, GLsync sync) {
void GL2Encoder::s_glGetSynciv(void* self, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) {
GL2Encoder *ctx = (GL2Encoder *)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedGetSyncParam(pname), GL_INVALID_ENUM);
SET_ERROR_IF(bufSize < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(!GLClientState::fenceExists(sync), GL_INVALID_VALUE);
return ctx->glGetSyncivAEMU(ctx, (uint64_t)(uintptr_t)sync, pname, bufSize, length, values);
}
@@ -4819,6 +5306,10 @@ void GL2Encoder::s_glGetBooleani_v(void* self, GLenum param, GLuint index, GLboo
void GL2Encoder::s_glGetShaderiv(void* self, GLuint shader, GLenum pname, GLint* params) {
GL2Encoder *ctx = (GL2Encoder *)self;
ctx->m_glGetShaderiv_enc(self, shader, pname, params);
+
+ SET_ERROR_IF(!GLESv2Validation::allowedGetShader(pname), GL_INVALID_ENUM);
+ VALIDATE_SHADER_NAME(shader);
+
if (pname == GL_SHADER_SOURCE_LENGTH) {
ShaderData* shaderData = ctx->m_shared->getShaderData(shader);
if (shaderData) {
@@ -4848,7 +5339,7 @@ void GL2Encoder::s_glActiveShaderProgram(void* self, GLuint pipeline, GLuint pro
}
}
-GLuint GL2Encoder::s_glCreateShaderProgramv(void* self, GLenum type, GLsizei count, const char** strings) {
+GLuint GL2Encoder::s_glCreateShaderProgramv(void* self, GLenum shaderType, GLsizei count, const char** strings) {
GLint* length = NULL;
GL2Encoder* ctx = (GL2Encoder*)self;
@@ -4869,12 +5360,13 @@ GLuint GL2Encoder::s_glCreateShaderProgramv(void* self, GLenum type, GLsizei cou
return -1;
}
- GLuint res = ctx->glCreateShaderProgramvAEMU(ctx, type, count, str, len + 1);
+ GLuint res = ctx->glCreateShaderProgramvAEMU(ctx, shaderType, count, str, len + 1);
delete [] str;
// Phase 2: do glLinkProgram-related initialization for locationWorkARound
GLint linkStatus = 0;
- ctx->glGetProgramiv(self, res, GL_LINK_STATUS ,&linkStatus);
+ ctx->m_glGetProgramiv_enc(self, res, GL_LINK_STATUS ,&linkStatus);
+ ctx->m_shared->setProgramLinkStatus(res, linkStatus);
if (!linkStatus) {
ctx->m_shared->deleteShaderProgramDataById(spDataId);
return -1;
@@ -4883,20 +5375,39 @@ GLuint GL2Encoder::s_glCreateShaderProgramv(void* self, GLenum type, GLsizei cou
ctx->m_shared->associateGLShaderProgram(res, spDataId);
GLint numUniforms = 0;
- ctx->glGetProgramiv(self, res, GL_ACTIVE_UNIFORMS, &numUniforms);
- ctx->m_shared->initShaderProgramData(res, numUniforms);
+ GLint numAttributes = 0;
+ ctx->m_glGetProgramiv_enc(self, res, GL_ACTIVE_UNIFORMS, &numUniforms);
+ ctx->m_glGetProgramiv_enc(self, res, GL_ACTIVE_ATTRIBUTES, &numAttributes);
+ ctx->m_shared->initShaderProgramData(res, numUniforms, numAttributes);
GLint maxLength=0;
- ctx->glGetProgramiv(self, res, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxLength);
+ GLint maxAttribLength=0;
+ ctx->m_glGetProgramiv_enc(self, res, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxLength);
+ ctx->m_glGetProgramiv_enc(self, res, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &maxAttribLength);
- GLint size; GLenum uniformType; GLchar* name = new GLchar[maxLength + 1];
+ size_t bufLen = maxLength > maxAttribLength ? maxLength : maxAttribLength;
+ GLint size; GLenum type; GLchar *name = new GLchar[bufLen + 1];
for (GLint i = 0; i < numUniforms; ++i) {
- ctx->glGetActiveUniform(self, res, i, maxLength, NULL, &size, &uniformType, name);
+ ctx->m_glGetActiveUniform_enc(self, res, i, maxLength, NULL, &size, &type, name);
GLint location = ctx->m_glGetUniformLocation_enc(self, res, name);
- ctx->m_shared->setShaderProgramIndexInfo(res, i, location, size, uniformType, name);
+ ctx->m_shared->setShaderProgramIndexInfo(res, i, location, size, type, name);
+ }
+
+ for (GLint i = 0; i < numAttributes; ++i) {
+ ctx->m_glGetActiveAttrib_enc(self, res, i, maxAttribLength, NULL, &size, &type, name);
+ GLint location = ctx->m_glGetAttribLocation_enc(self, res, name);
+ ctx->m_shared->setProgramAttribInfo(res, i, location, size, type, name);
}
+ GLint numBlocks;
+ ctx->m_glGetProgramiv_enc(ctx, res, GL_ACTIVE_UNIFORM_BLOCKS, &numBlocks);
+ ctx->m_shared->setActiveUniformBlockCountForProgram(res, numBlocks);
+
+ GLint tfVaryingsCount;
+ ctx->m_glGetProgramiv_enc(ctx, res, GL_TRANSFORM_FEEDBACK_VARYINGS, &tfVaryingsCount);
+ ctx->m_shared->setTransformFeedbackVaryingsCountForProgram(res, tfVaryingsCount);
+
delete [] name;
return res;
@@ -4905,22 +5416,19 @@ GLuint GL2Encoder::s_glCreateShaderProgramv(void* self, GLenum type, GLsizei cou
void GL2Encoder::s_glProgramUniform1f(void* self, GLuint program, GLint location, GLfloat v0)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform1f_enc(self, program, hostLoc, v0);
+ ctx->m_glProgramUniform1f_enc(self, program, location, v0);
}
void GL2Encoder::s_glProgramUniform1fv(void* self, GLuint program, GLint location, GLsizei count, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform1fv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform1fv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform1i(void* self, GLuint program, GLint location, GLint v0)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform1i_enc(self, program, hostLoc, v0);
+ ctx->m_glProgramUniform1i_enc(self, program, location, v0);
GLClientState* state = ctx->m_state;
GLSharedGroupPtr shared = ctx->m_shared;
@@ -4938,15 +5446,13 @@ void GL2Encoder::s_glProgramUniform1i(void* self, GLuint program, GLint location
void GL2Encoder::s_glProgramUniform1iv(void* self, GLuint program, GLint location, GLsizei count, const GLint *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform1iv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform1iv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform1ui(void* self, GLuint program, GLint location, GLuint v0)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform1ui_enc(self, program, hostLoc, v0);
+ ctx->m_glProgramUniform1ui_enc(self, program, location, v0);
GLClientState* state = ctx->m_state;
GLSharedGroupPtr shared = ctx->m_shared;
@@ -4964,201 +5470,176 @@ void GL2Encoder::s_glProgramUniform1ui(void* self, GLuint program, GLint locatio
void GL2Encoder::s_glProgramUniform1uiv(void* self, GLuint program, GLint location, GLsizei count, const GLuint *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform1uiv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform1uiv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform2f(void* self, GLuint program, GLint location, GLfloat v0, GLfloat v1)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform2f_enc(self, program, hostLoc, v0, v1);
+ ctx->m_glProgramUniform2f_enc(self, program, location, v0, v1);
}
void GL2Encoder::s_glProgramUniform2fv(void* self, GLuint program, GLint location, GLsizei count, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform2fv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform2fv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform2i(void* self, GLuint program, GLint location, GLint v0, GLint v1)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform2i_enc(self, program, hostLoc, v0, v1);
+ ctx->m_glProgramUniform2i_enc(self, program, location, v0, v1);
}
void GL2Encoder::s_glProgramUniform2iv(void* self, GLuint program, GLint location, GLsizei count, const GLint *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform2iv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform2iv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform2ui(void* self, GLuint program, GLint location, GLint v0, GLuint v1)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform2ui_enc(self, program, hostLoc, v0, v1);
+ ctx->m_glProgramUniform2ui_enc(self, program, location, v0, v1);
}
void GL2Encoder::s_glProgramUniform2uiv(void* self, GLuint program, GLint location, GLsizei count, const GLuint *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform2uiv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform2uiv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform3f(void* self, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform3f_enc(self, program, hostLoc, v0, v1, v2);
+ ctx->m_glProgramUniform3f_enc(self, program, location, v0, v1, v2);
}
void GL2Encoder::s_glProgramUniform3fv(void* self, GLuint program, GLint location, GLsizei count, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform3fv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform3fv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform3i(void* self, GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform3i_enc(self, program, hostLoc, v0, v1, v2);
+ ctx->m_glProgramUniform3i_enc(self, program, location, v0, v1, v2);
}
void GL2Encoder::s_glProgramUniform3iv(void* self, GLuint program, GLint location, GLsizei count, const GLint *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform3iv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform3iv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform3ui(void* self, GLuint program, GLint location, GLint v0, GLint v1, GLuint v2)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform3ui_enc(self, program, hostLoc, v0, v1, v2);
+ ctx->m_glProgramUniform3ui_enc(self, program, location, v0, v1, v2);
}
void GL2Encoder::s_glProgramUniform3uiv(void* self, GLuint program, GLint location, GLsizei count, const GLuint *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform3uiv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform3uiv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform4f(void* self, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform4f_enc(self, program, hostLoc, v0, v1, v2, v3);
+ ctx->m_glProgramUniform4f_enc(self, program, location, v0, v1, v2, v3);
}
void GL2Encoder::s_glProgramUniform4fv(void* self, GLuint program, GLint location, GLsizei count, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform4fv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform4fv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform4i(void* self, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform4i_enc(self, program, hostLoc, v0, v1, v2, v3);
+ ctx->m_glProgramUniform4i_enc(self, program, location, v0, v1, v2, v3);
}
void GL2Encoder::s_glProgramUniform4iv(void* self, GLuint program, GLint location, GLsizei count, const GLint *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform4iv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform4iv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniform4ui(void* self, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLuint v3)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform4ui_enc(self, program, hostLoc, v0, v1, v2, v3);
+ ctx->m_glProgramUniform4ui_enc(self, program, location, v0, v1, v2, v3);
}
void GL2Encoder::s_glProgramUniform4uiv(void* self, GLuint program, GLint location, GLsizei count, const GLuint *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniform4uiv_enc(self, program, hostLoc, count, value);
+ ctx->m_glProgramUniform4uiv_enc(self, program, location, count, value);
}
void GL2Encoder::s_glProgramUniformMatrix2fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniformMatrix2fv_enc(self, program, hostLoc, count, transpose, value);
+ ctx->m_glProgramUniformMatrix2fv_enc(self, program, location, count, transpose, value);
}
void GL2Encoder::s_glProgramUniformMatrix2x3fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniformMatrix2x3fv_enc(self, program, hostLoc, count, transpose, value);
+ ctx->m_glProgramUniformMatrix2x3fv_enc(self, program, location, count, transpose, value);
}
void GL2Encoder::s_glProgramUniformMatrix2x4fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniformMatrix2x4fv_enc(self, program, hostLoc, count, transpose, value);
+ ctx->m_glProgramUniformMatrix2x4fv_enc(self, program, location, count, transpose, value);
}
void GL2Encoder::s_glProgramUniformMatrix3fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniformMatrix3fv_enc(self, program, hostLoc, count, transpose, value);
+ ctx->m_glProgramUniformMatrix3fv_enc(self, program, location, count, transpose, value);
}
void GL2Encoder::s_glProgramUniformMatrix3x2fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniformMatrix3x2fv_enc(self, program, hostLoc, count, transpose, value);
+ ctx->m_glProgramUniformMatrix3x2fv_enc(self, program, location, count, transpose, value);
}
void GL2Encoder::s_glProgramUniformMatrix3x4fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniformMatrix3x4fv_enc(self, program, hostLoc, count, transpose, value);
+ ctx->m_glProgramUniformMatrix3x4fv_enc(self, program, location, count, transpose, value);
}
void GL2Encoder::s_glProgramUniformMatrix4fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniformMatrix4fv_enc(self, program, hostLoc, count, transpose, value);
+ ctx->m_glProgramUniformMatrix4fv_enc(self, program, location, count, transpose, value);
}
void GL2Encoder::s_glProgramUniformMatrix4x2fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniformMatrix4x2fv_enc(self, program, hostLoc, count, transpose, value);
+ ctx->m_glProgramUniformMatrix4x2fv_enc(self, program, location, count, transpose, value);
}
void GL2Encoder::s_glProgramUniformMatrix4x3fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
GL2Encoder *ctx = (GL2Encoder*)self;
- GLint hostLoc = location;
- ctx->m_glProgramUniformMatrix4x3fv_enc(self, program, hostLoc, count, transpose, value);
+ ctx->m_glProgramUniformMatrix4x3fv_enc(self, program, location, count, transpose, value);
}
void GL2Encoder::s_glProgramParameteri(void* self, GLuint program, GLenum pname, GLint value) {
GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_PROGRAM_NAME(program);
+ SET_ERROR_IF(pname != GL_PROGRAM_BINARY_RETRIEVABLE_HINT && pname != GL_PROGRAM_SEPARABLE, GL_INVALID_ENUM);
+ SET_ERROR_IF(value != GL_FALSE && value != GL_TRUE, GL_INVALID_VALUE);
ctx->m_glProgramParameteri_enc(self, program, pname, value);
}
@@ -5182,6 +5663,11 @@ void GL2Encoder::s_glUseProgramStages(void *self, GLuint pipeline, GLbitfield st
// Otherwise, update host texture 2D bindings.
ctx->updateHostTexture2DBindingsFromProgramData(program);
+
+ if (program) {
+ ctx->m_state->currentUniformValidationInfo = ctx->m_shared->getUniformValidationInfo(program);
+ ctx->m_state->currentAttribValidationInfo = ctx->m_shared->getAttribValidationInfo(program);
+ }
}
void GL2Encoder::s_glBindProgramPipeline(void* self, GLuint pipeline)
@@ -5349,6 +5835,7 @@ void GL2Encoder::s_glDrawArraysIndirect(void* self, GLenum mode, const void* ind
SET_ERROR_IF(hasClientArrays, GL_INVALID_OPERATION);
SET_ERROR_IF(!state->currentVertexArrayObject(), GL_INVALID_OPERATION);
SET_ERROR_IF(!ctx->boundBuffer(GL_DRAW_INDIRECT_BUFFER), GL_INVALID_OPERATION);
+ SET_ERROR_IF(ctx->m_state->checkFramebufferCompleteness(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION);
GLuint indirectStructSize = glUtilsIndirectStructSize(INDIRECT_COMMAND_DRAWARRAYS);
if (ctx->boundBuffer(GL_DRAW_INDIRECT_BUFFER)) {
@@ -5362,6 +5849,7 @@ void GL2Encoder::s_glDrawArraysIndirect(void* self, GLenum mode, const void* ind
// This is purely for debug/dev purposes.
ctx->glDrawArraysIndirectDataAEMU(ctx, mode, indirect, indirectStructSize);
}
+ ctx->m_state->postDraw();
}
void GL2Encoder::s_glDrawElementsIndirect(void* self, GLenum mode, GLenum type, const void* indirect) {
@@ -5378,6 +5866,7 @@ void GL2Encoder::s_glDrawElementsIndirect(void* self, GLenum mode, GLenum type,
SET_ERROR_IF(!ctx->boundBuffer(GL_DRAW_INDIRECT_BUFFER), GL_INVALID_OPERATION);
SET_ERROR_IF(ctx->m_state->getTransformFeedbackActiveUnpaused(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(ctx->m_state->checkFramebufferCompleteness(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION);
GLuint indirectStructSize = glUtilsIndirectStructSize(INDIRECT_COMMAND_DRAWELEMENTS);
if (ctx->boundBuffer(GL_DRAW_INDIRECT_BUFFER)) {
@@ -5391,7 +5880,7 @@ void GL2Encoder::s_glDrawElementsIndirect(void* self, GLenum mode, GLenum type,
// This is purely for debug/dev purposes.
ctx->glDrawElementsIndirectDataAEMU(ctx, mode, type, indirect, indirectStructSize);
}
-
+ ctx->m_state->postDraw();
}
void GL2Encoder::s_glTexStorage2DMultisample(void* self, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) {
@@ -5408,7 +5897,7 @@ void GL2Encoder::s_glTexStorage2DMultisample(void* self, GLenum target, GLsizei
SET_ERROR_IF(samples > max_samples, GL_INVALID_OPERATION);
state->setBoundTextureInternalFormat(target, internalformat);
- state->setBoundTextureDims(target, 0, width, height, 1);
+ state->setBoundTextureDims(target, target, 0, width, height, 1);
state->setBoundTextureImmutableFormat(target);
state->setBoundTextureSamples(target, samples);
@@ -5427,6 +5916,7 @@ void GL2Encoder::s_glReadnPixelsEXT(void* self, GLint x, GLint y, GLsizei width,
SET_ERROR_IF(bufSize < glesv2_enc::pixelDataSize(self, width, height, format,
type, 1), GL_INVALID_OPERATION);
s_glReadPixels(self, x, y, width, height, format, type, pixels);
+ ctx->m_state->postReadPixels();
}
void GL2Encoder::s_glGetnUniformfvEXT(void *self, GLuint program, GLint location,
@@ -5447,14 +5937,627 @@ void GL2Encoder::s_glGetnUniformivEXT(void *self, GLuint program, GLint location
void GL2Encoder::s_glInvalidateFramebuffer(void* self, GLenum target, GLsizei numAttachments, const GLenum *attachments) {
GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF((target != GL_FRAMEBUFFER) &&
+ (target != GL_READ_FRAMEBUFFER) &&
+ (target != GL_DRAW_FRAMEBUFFER), GL_INVALID_ENUM);
SET_ERROR_IF(numAttachments < 0, GL_INVALID_VALUE);
+
+ GLint maxColorAttachments;
+ ctx->glGetIntegerv(ctx, GL_MAX_COLOR_ATTACHMENTS, &maxColorAttachments);
+ for (GLsizei i = 0; i < numAttachments; ++i) {
+ if (attachments[i] != GL_DEPTH_ATTACHMENT && attachments[i] != GL_STENCIL_ATTACHMENT && attachments[i] != GL_DEPTH_STENCIL_ATTACHMENT) {
+ SET_ERROR_IF(attachments[i] >= GL_COLOR_ATTACHMENT0 + maxColorAttachments, GL_INVALID_OPERATION);
+ }
+ }
+
ctx->m_glInvalidateFramebuffer_enc(ctx, target, numAttachments, attachments);
}
void GL2Encoder::s_glInvalidateSubFramebuffer(void* self, GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height) {
GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(target != GL_FRAMEBUFFER && target != GL_READ_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER, GL_INVALID_ENUM);
SET_ERROR_IF(numAttachments < 0, GL_INVALID_VALUE);
SET_ERROR_IF(width < 0, GL_INVALID_VALUE);
SET_ERROR_IF(height < 0, GL_INVALID_VALUE);
+ GLint maxColorAttachments;
+ ctx->glGetIntegerv(ctx, GL_MAX_COLOR_ATTACHMENTS, &maxColorAttachments);
+ for (GLsizei i = 0; i < numAttachments; ++i) {
+ if (attachments[i] != GL_DEPTH_ATTACHMENT && attachments[i] != GL_STENCIL_ATTACHMENT && attachments[i] != GL_DEPTH_STENCIL_ATTACHMENT) {
+ SET_ERROR_IF(attachments[i] >= GL_COLOR_ATTACHMENT0 + maxColorAttachments, GL_INVALID_OPERATION);
+ }
+ }
ctx->m_glInvalidateSubFramebuffer_enc(ctx, target, numAttachments, attachments, x, y, width, height);
}
+
+void GL2Encoder::s_glDispatchCompute(void* self, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ ctx->m_glDispatchCompute_enc(ctx, num_groups_x, num_groups_y, num_groups_z);
+ ctx->m_state->postDispatchCompute();
+}
+
+void GL2Encoder::s_glDispatchComputeIndirect(void* self, GLintptr indirect) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ ctx->m_glDispatchComputeIndirect_enc(ctx, indirect);
+ ctx->m_state->postDispatchCompute();
+}
+
+void GL2Encoder::s_glGenTransformFeedbacks(void* self, GLsizei n, GLuint* ids) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ ctx->m_glGenTransformFeedbacks_enc(ctx, n, ids);
+ ctx->m_state->setExistence(GLClientState::ObjectType::TransformFeedback, true, n, ids);
+}
+
+void GL2Encoder::s_glDeleteTransformFeedbacks(void* self, GLsizei n, const GLuint* ids) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(ctx->m_state->getTransformFeedbackActive(), GL_INVALID_OPERATION);
+
+ ctx->m_state->setExistence(GLClientState::ObjectType::TransformFeedback, false, n, ids);
+ ctx->m_glDeleteTransformFeedbacks_enc(ctx, n, ids);
+}
+
+void GL2Encoder::s_glGenSamplers(void* self, GLsizei n, GLuint* ids) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ ctx->m_glGenSamplers_enc(ctx, n, ids);
+ ctx->m_state->setExistence(GLClientState::ObjectType::Sampler, true, n, ids);
+}
+
+void GL2Encoder::s_glGenQueries(void* self, GLsizei n, GLuint* ids) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ ctx->m_glGenQueries_enc(ctx, n, ids);
+ ctx->m_state->setExistence(GLClientState::ObjectType::Query, true, n, ids);
+}
+
+void GL2Encoder::s_glDeleteQueries(void* self, GLsizei n, const GLuint* ids) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ ctx->m_state->setExistence(GLClientState::ObjectType::Query, false, n, ids);
+ ctx->m_glDeleteQueries_enc(ctx, n, ids);
+}
+
+void GL2Encoder::s_glBindTransformFeedback(void* self, GLenum target, GLuint id) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(GL_TRANSFORM_FEEDBACK != target, GL_INVALID_ENUM);
+ SET_ERROR_IF(ctx->m_state->getTransformFeedbackActiveUnpaused(), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->m_state->tryBind(target, id), GL_INVALID_OPERATION);
+ ctx->m_glBindTransformFeedback_enc(ctx, target, id);
+}
+
+void GL2Encoder::s_glBeginQuery(void* self, GLenum target, GLuint query) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedQueryTarget(target), GL_INVALID_ENUM);
+
+ if (target != GL_ANY_SAMPLES_PASSED_CONSERVATIVE &&
+ target != GL_ANY_SAMPLES_PASSED) {
+ SET_ERROR_IF(ctx->m_state->isQueryBound(target), GL_INVALID_OPERATION);
+ } else {
+ SET_ERROR_IF(ctx->m_state->isQueryBound(GL_ANY_SAMPLES_PASSED_CONSERVATIVE), GL_INVALID_OPERATION);
+ SET_ERROR_IF(ctx->m_state->isQueryBound(GL_ANY_SAMPLES_PASSED), GL_INVALID_OPERATION);
+ }
+
+ GLenum lastTarget = ctx->m_state->getLastQueryTarget(query);
+
+ if (lastTarget) {
+ SET_ERROR_IF(target != lastTarget, GL_INVALID_OPERATION);
+ }
+
+ SET_ERROR_IF(!query, GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->m_state->tryBind(target, query), GL_INVALID_OPERATION);
+ ctx->m_state->setLastQueryTarget(target, query);
+ ctx->m_glBeginQuery_enc(ctx, target, query);
+}
+
+void GL2Encoder::s_glEndQuery(void* self, GLenum target) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedQueryTarget(target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!ctx->m_state->isBoundTargetValid(target), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!ctx->m_state->tryBind(target, 0), GL_INVALID_OPERATION);
+ ctx->m_glEndQuery_enc(ctx, target);
+}
+
+void GL2Encoder::s_glClear(void* self, GLbitfield mask) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+
+ GLbitfield allowed_bits = GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT;
+ GLbitfield has_disallowed_bits = (mask & ~allowed_bits);
+ SET_ERROR_IF(has_disallowed_bits, GL_INVALID_VALUE);
+
+ ctx->m_glClear_enc(ctx, mask);
+}
+
+void GL2Encoder::s_glCopyTexSubImage2D(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::textureTarget(ctx, target), GL_INVALID_ENUM);
+ SET_ERROR_IF(level < 0, GL_INVALID_VALUE);
+ GLint max_texture_size;
+ GLint max_cube_map_texture_size;
+ ctx->glGetIntegerv(ctx, GL_MAX_TEXTURE_SIZE, &max_texture_size);
+ ctx->glGetIntegerv(ctx, GL_MAX_CUBE_MAP_TEXTURE_SIZE, &max_cube_map_texture_size);
+ SET_ERROR_IF(level > ilog2(max_texture_size), GL_INVALID_VALUE);
+ SET_ERROR_IF((target == GL_TEXTURE_CUBE_MAP) &&
+ (level > ilog2(max_cube_map_texture_size)), GL_INVALID_VALUE);
+ SET_ERROR_IF(xoffset < 0 || yoffset < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(width < 0 || height < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(width > max_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(height > max_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(GLESv2Validation::isCubeMapTarget(target) && width > max_cube_map_texture_size, GL_INVALID_VALUE);
+ SET_ERROR_IF(GLESv2Validation::isCubeMapTarget(target) && height > max_cube_map_texture_size, GL_INVALID_VALUE);
+ GLuint tex = ctx->m_state->getBoundTexture(target);
+ GLsizei neededWidth = xoffset + width;
+ GLsizei neededHeight = yoffset + height;
+ SET_ERROR_IF(tex &&
+ (neededWidth > ctx->m_state->queryTexWidth(level, tex) ||
+ neededHeight > ctx->m_state->queryTexHeight(level, tex)),
+ GL_INVALID_VALUE);
+ SET_ERROR_IF(ctx->glCheckFramebufferStatus(ctx, GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE,
+ GL_INVALID_FRAMEBUFFER_OPERATION);
+
+ ctx->m_glCopyTexSubImage2D_enc(ctx, target, level, xoffset, yoffset, x, y, width, height);
+}
+
+void GL2Encoder::s_glCopyTexSubImage3D(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(target != GL_TEXTURE_3D &&
+ target != GL_TEXTURE_2D_ARRAY,
+ GL_INVALID_ENUM);
+ GLint max_texture_size;
+ GLint max_3d_texture_size;
+ ctx->glGetIntegerv(ctx, GL_MAX_TEXTURE_SIZE, &max_texture_size);
+ ctx->glGetIntegerv(ctx, GL_MAX_3D_TEXTURE_SIZE, &max_3d_texture_size);
+ SET_ERROR_IF(level < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(level > ilog2(max_texture_size), GL_INVALID_VALUE);
+ SET_ERROR_IF(level > ilog2(max_3d_texture_size), GL_INVALID_VALUE);
+ SET_ERROR_IF(width < 0 || height < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(xoffset < 0 || yoffset < 0 || zoffset < 0, GL_INVALID_VALUE);
+ GLuint tex = ctx->m_state->getBoundTexture(target);
+ GLsizei neededWidth = xoffset + width;
+ GLsizei neededHeight = yoffset + height;
+ GLsizei neededDepth = zoffset + 1;
+ SET_ERROR_IF(tex &&
+ (neededWidth > ctx->m_state->queryTexWidth(level, tex) ||
+ neededHeight > ctx->m_state->queryTexHeight(level, tex) ||
+ neededDepth > ctx->m_state->queryTexDepth(level, tex)),
+ GL_INVALID_VALUE);
+ SET_ERROR_IF(ctx->glCheckFramebufferStatus(ctx, GL_READ_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE,
+ GL_INVALID_FRAMEBUFFER_OPERATION);
+
+ ctx->m_glCopyTexSubImage3D_enc(ctx, target, level, xoffset, yoffset, zoffset, x, y, width, height);
+}
+
+void GL2Encoder::s_glCompileShader(void* self, GLuint shader) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ bool isShaderOrProgramObject =
+ ctx->m_shared->isShaderOrProgramObject(shader);
+ bool isShader =
+ ctx->m_shared->isShader(shader);
+
+ SET_ERROR_IF(isShaderOrProgramObject && !isShader, GL_INVALID_OPERATION);
+ SET_ERROR_IF(!isShaderOrProgramObject && !isShader, GL_INVALID_VALUE);
+
+ ctx->m_glCompileShader_enc(ctx, shader);
+}
+
+void GL2Encoder::s_glValidateProgram(void* self, GLuint program ) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+
+ VALIDATE_PROGRAM_NAME(program);
+
+ ctx->m_glValidateProgram_enc(self, program);
+}
+
+void GL2Encoder::s_glProgramBinary(void *self , GLuint program, GLenum binaryFormat, const void* binary, GLsizei length) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+
+ VALIDATE_PROGRAM_NAME(program);
+
+ SET_ERROR_IF(~0 == binaryFormat, GL_INVALID_ENUM);
+
+ ctx->m_glProgramBinary_enc(self, program, binaryFormat, binary, length);
+}
+
+void GL2Encoder::s_glGetSamplerParameterfv(void *self, GLuint sampler, GLenum pname, GLfloat* params) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+
+ SET_ERROR_IF(!ctx->m_state->samplerExists(sampler), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!GLESv2Validation::samplerParams(ctx, pname), GL_INVALID_ENUM);
+
+ if (!params) return;
+
+ ctx->m_glGetSamplerParameterfv_enc(ctx, sampler, pname, params);
+}
+
+void GL2Encoder::s_glGetSamplerParameteriv(void *self, GLuint sampler, GLenum pname, GLint* params) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!ctx->m_state->samplerExists(sampler), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!GLESv2Validation::samplerParams(ctx, pname), GL_INVALID_ENUM);
+
+ if (!params) return;
+
+ ctx->m_glGetSamplerParameteriv_enc(ctx, sampler, pname, params);
+}
+
+void GL2Encoder::s_glSamplerParameterf(void *self , GLuint sampler, GLenum pname, GLfloat param) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!ctx->m_state->samplerExists(sampler), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!GLESv2Validation::samplerParams(ctx, pname), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureParamValue(ctx, pname, (GLint)param, param, (GLenum)param), GL_INVALID_ENUM);
+
+ ctx->m_glSamplerParameterf_enc(ctx, sampler, pname, param);
+}
+
+void GL2Encoder::s_glSamplerParameteri(void *self , GLuint sampler, GLenum pname, GLint param) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!ctx->m_state->samplerExists(sampler), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!GLESv2Validation::samplerParams(ctx, pname), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::textureParamValue(ctx, pname, param, (GLfloat)param, (GLenum)param), GL_INVALID_ENUM);
+
+ ctx->m_glSamplerParameteri_enc(ctx, sampler, pname, param);
+}
+
+void GL2Encoder::s_glSamplerParameterfv(void *self , GLuint sampler, GLenum pname, const GLfloat* params) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!ctx->m_state->samplerExists(sampler), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!GLESv2Validation::samplerParams(ctx, pname), GL_INVALID_ENUM);
+ SET_ERROR_IF(!params, GL_INVALID_VALUE);
+ GLfloat param = *params;
+ SET_ERROR_IF(!GLESv2Validation::textureParamValue(ctx, pname, (GLint)param, param, (GLenum)param), GL_INVALID_ENUM);
+
+ ctx->m_glSamplerParameterfv_enc(ctx, sampler, pname, params);
+}
+
+void GL2Encoder::s_glSamplerParameteriv(void *self , GLuint sampler, GLenum pname, const GLint* params) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!ctx->m_state->samplerExists(sampler), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!GLESv2Validation::samplerParams(ctx, pname), GL_INVALID_ENUM);
+ SET_ERROR_IF(!params, GL_INVALID_VALUE);
+ GLint param = *params;
+ SET_ERROR_IF(!GLESv2Validation::textureParamValue(ctx, pname, (GLint)param, param, (GLenum)param), GL_INVALID_ENUM);
+
+ ctx->m_glSamplerParameteriv_enc(ctx, sampler, pname, params);
+}
+
+int GL2Encoder::s_glGetAttribLocation(void *self , GLuint program, const GLchar* name) {
+ GL2Encoder *ctx = (GL2Encoder*)self;
+
+ bool isShaderOrProgramObject =
+ ctx->m_shared->isShaderOrProgramObject(program);
+ bool isProgram =
+ ctx->m_shared->isProgram(program);
+
+ RET_AND_SET_ERROR_IF(!isShaderOrProgramObject, GL_INVALID_VALUE, -1);
+ RET_AND_SET_ERROR_IF(!isProgram, GL_INVALID_OPERATION, -1);
+ RET_AND_SET_ERROR_IF(!ctx->m_shared->getProgramLinkStatus(program), GL_INVALID_OPERATION, -1);
+
+ return ctx->m_glGetAttribLocation_enc(ctx, program, name);
+}
+
+void GL2Encoder::s_glBindAttribLocation(void *self , GLuint program, GLuint index, const GLchar* name) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+
+ VALIDATE_PROGRAM_NAME(program);
+
+ GLint maxVertexAttribs;
+ ctx->glGetIntegerv(self, GL_MAX_VERTEX_ATTRIBS, &maxVertexAttribs);
+ SET_ERROR_IF(!(index < maxVertexAttribs), GL_INVALID_VALUE);
+ SET_ERROR_IF(index > maxVertexAttribs, GL_INVALID_VALUE);
+ SET_ERROR_IF(name && !strncmp("gl_", name, 3), GL_INVALID_OPERATION);
+
+ fprintf(stderr, "%s: bind attrib %u name %s\n", __func__, index, name);
+ ctx->m_glBindAttribLocation_enc(ctx, program, index, name);
+}
+
+// TODO-SLOW
+void GL2Encoder::s_glUniformBlockBinding(void *self , GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+
+ VALIDATE_PROGRAM_NAME(program);
+ SET_ERROR_IF(uniformBlockIndex >= ctx->m_shared->getActiveUniformBlockCount(program), GL_INVALID_VALUE);
+
+ GLint maxUniformBufferBindings;
+ ctx->glGetIntegerv(ctx, GL_MAX_UNIFORM_BUFFER_BINDINGS, &maxUniformBufferBindings);
+ SET_ERROR_IF(uniformBlockBinding >= maxUniformBufferBindings, GL_INVALID_VALUE);
+
+ ctx->m_glUniformBlockBinding_enc(ctx, program, uniformBlockIndex, uniformBlockBinding);
+}
+
+void GL2Encoder::s_glGetTransformFeedbackVarying(void *self , GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, char* name) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+
+ VALIDATE_PROGRAM_NAME(program);
+ SET_ERROR_IF(!ctx->m_shared->getProgramLinkStatus(program), GL_INVALID_OPERATION);
+ SET_ERROR_IF(index >= ctx->m_shared->getTransformFeedbackVaryingsCountForProgram(program), GL_INVALID_VALUE);
+
+ ctx->m_glGetTransformFeedbackVarying_enc(ctx, program, index, bufSize, length, size, type, name);
+}
+
+void GL2Encoder::s_glScissor(void *self , GLint x, GLint y, GLsizei width, GLsizei height) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(width < 0 || height < 0, GL_INVALID_VALUE);
+ ctx->m_glScissor_enc(ctx, x, y, width, height);
+}
+
+void GL2Encoder::s_glDepthFunc(void *self , GLenum func) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(
+ (func != GL_NEVER) &&
+ (func != GL_ALWAYS) &&
+ (func != GL_LESS) &&
+ (func != GL_LEQUAL) &&
+ (func != GL_EQUAL) &&
+ (func != GL_GREATER) &&
+ (func != GL_GEQUAL) &&
+ (func != GL_NOTEQUAL),
+ GL_INVALID_ENUM);
+ ctx->m_glDepthFunc_enc(ctx, func);
+}
+
+void GL2Encoder::s_glViewport(void *self , GLint x, GLint y, GLsizei width, GLsizei height) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(width < 0 || height < 0, GL_INVALID_VALUE);
+ ctx->m_glViewport_enc(ctx, x, y, width, height);
+}
+
+void GL2Encoder::s_glStencilFunc(void *self , GLenum func, GLint ref, GLuint mask) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedFunc(func), GL_INVALID_ENUM);
+ ctx->m_glStencilFunc_enc(ctx, func, ref, mask);
+}
+
+void GL2Encoder::s_glStencilFuncSeparate(void *self , GLenum face, GLenum func, GLint ref, GLuint mask) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedFace(face) || !GLESv2Validation::allowedFunc(func), GL_INVALID_ENUM);
+ ctx->m_glStencilFuncSeparate_enc(ctx, face, func, ref, mask);
+}
+
+void GL2Encoder::s_glStencilOp(void *self , GLenum fail, GLenum zfail, GLenum zpass) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(
+ !GLESv2Validation::allowedStencilOp(fail) ||
+ !GLESv2Validation::allowedStencilOp(zfail) ||
+ !GLESv2Validation::allowedStencilOp(zpass),
+ GL_INVALID_ENUM);
+ ctx->m_glStencilOp_enc(ctx, fail, zfail, zpass);
+}
+
+void GL2Encoder::s_glStencilOpSeparate(void *self , GLenum face, GLenum fail, GLenum zfail, GLenum zpass) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(
+ !GLESv2Validation::allowedFace(face) ||
+ !GLESv2Validation::allowedStencilOp(fail) ||
+ !GLESv2Validation::allowedStencilOp(zfail) ||
+ !GLESv2Validation::allowedStencilOp(zpass),
+ GL_INVALID_ENUM);
+ ctx->m_glStencilOpSeparate_enc(ctx, face, fail, zfail, zpass);
+}
+
+void GL2Encoder::s_glStencilMaskSeparate(void *self , GLenum face, GLuint mask) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(
+ !GLESv2Validation::allowedFace(face),
+ GL_INVALID_ENUM);
+ ctx->m_glStencilMaskSeparate_enc(ctx, face, mask);
+}
+
+void GL2Encoder::s_glBlendEquation(void *self , GLenum mode) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(
+ !GLESv2Validation::allowedBlendEquation(mode),
+ GL_INVALID_ENUM);
+ ctx->m_glBlendEquation_enc(ctx, mode);
+}
+
+void GL2Encoder::s_glBlendEquationSeparate(void *self , GLenum modeRGB, GLenum modeAlpha) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(
+ !GLESv2Validation::allowedBlendEquation(modeRGB) ||
+ !GLESv2Validation::allowedBlendEquation(modeAlpha),
+ GL_INVALID_ENUM);
+ ctx->m_glBlendEquationSeparate_enc(ctx, modeRGB, modeAlpha);
+}
+
+void GL2Encoder::s_glBlendFunc(void *self , GLenum sfactor, GLenum dfactor) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(
+ !GLESv2Validation::allowedBlendFunc(sfactor) ||
+ !GLESv2Validation::allowedBlendFunc(dfactor),
+ GL_INVALID_ENUM);
+ ctx->m_glBlendFunc_enc(ctx, sfactor, dfactor);
+}
+
+void GL2Encoder::s_glBlendFuncSeparate(void *self , GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(
+ !GLESv2Validation::allowedBlendFunc(srcRGB) ||
+ !GLESv2Validation::allowedBlendFunc(dstRGB) ||
+ !GLESv2Validation::allowedBlendFunc(srcAlpha) ||
+ !GLESv2Validation::allowedBlendFunc(dstAlpha),
+ GL_INVALID_ENUM);
+ ctx->m_glBlendFuncSeparate_enc(ctx, srcRGB, dstRGB, srcAlpha, dstAlpha);
+}
+
+void GL2Encoder::s_glCullFace(void *self , GLenum mode) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(
+ !GLESv2Validation::allowedCullFace(mode),
+ GL_INVALID_ENUM);
+ ctx->m_glCullFace_enc(ctx, mode);
+}
+
+void GL2Encoder::s_glFrontFace(void *self , GLenum mode) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(
+ !GLESv2Validation::allowedFrontFace(mode),
+ GL_INVALID_ENUM);
+ ctx->m_glFrontFace_enc(ctx, mode);
+}
+
+void GL2Encoder::s_glLineWidth(void *self , GLfloat width) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(width <= 0.0f, GL_INVALID_VALUE);
+ ctx->m_glLineWidth_enc(ctx, width);
+}
+
+void GL2Encoder::s_glVertexAttrib1f(void *self , GLuint indx, GLfloat x) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(indx);
+ ctx->m_glVertexAttrib1f_enc(ctx, indx, x);
+}
+
+void GL2Encoder::s_glVertexAttrib2f(void *self , GLuint indx, GLfloat x, GLfloat y) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(indx);
+ ctx->m_glVertexAttrib2f_enc(ctx, indx, x, y);
+}
+
+void GL2Encoder::s_glVertexAttrib3f(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloat z) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(indx);
+ ctx->m_glVertexAttrib3f_enc(ctx, indx, x, y, z);
+}
+
+void GL2Encoder::s_glVertexAttrib4f(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(indx);
+ ctx->m_glVertexAttrib4f_enc(ctx, indx, x, y, z, w);
+}
+
+void GL2Encoder::s_glVertexAttrib1fv(void *self , GLuint indx, const GLfloat* values) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(indx);
+ ctx->m_glVertexAttrib1fv_enc(ctx, indx, values);
+}
+
+void GL2Encoder::s_glVertexAttrib2fv(void *self , GLuint indx, const GLfloat* values) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(indx);
+ ctx->m_glVertexAttrib2fv_enc(ctx, indx, values);
+}
+
+void GL2Encoder::s_glVertexAttrib3fv(void *self , GLuint indx, const GLfloat* values) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(indx);
+ ctx->m_glVertexAttrib3fv_enc(ctx, indx, values);
+}
+
+void GL2Encoder::s_glVertexAttrib4fv(void *self , GLuint indx, const GLfloat* values) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(indx);
+ ctx->m_glVertexAttrib4fv_enc(ctx, indx, values);
+}
+
+void GL2Encoder::s_glVertexAttribI4i(void *self , GLuint index, GLint v0, GLint v1, GLint v2, GLint v3) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(index);
+ ctx->m_glVertexAttribI4i_enc(ctx, index, v0, v1, v2, v3);
+}
+
+void GL2Encoder::s_glVertexAttribI4ui(void *self , GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(index);
+ ctx->m_glVertexAttribI4ui_enc(ctx, index, v0, v1, v2, v3);
+}
+
+void GL2Encoder::s_glVertexAttribI4iv(void *self , GLuint index, const GLint* v) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(index);
+ ctx->m_glVertexAttribI4iv_enc(ctx, index, v);
+}
+
+void GL2Encoder::s_glVertexAttribI4uiv(void *self , GLuint index, const GLuint* v) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_VERTEX_ATTRIB_INDEX(index);
+ ctx->m_glVertexAttribI4uiv_enc(ctx, index, v);
+}
+
+void GL2Encoder::s_glGetShaderPrecisionFormat(void *self , GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedShaderType(shadertype), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::allowedPrecisionType(precisiontype), GL_INVALID_ENUM);
+ ctx->m_glGetShaderPrecisionFormat_enc(ctx, shadertype, precisiontype, range, precision);
+}
+
+void GL2Encoder::s_glGetProgramiv(void *self , GLuint program, GLenum pname, GLint* params) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedGetProgram(ctx->majorVersion(), ctx->minorVersion(), pname), GL_INVALID_ENUM);
+ VALIDATE_PROGRAM_NAME(program);
+ ctx->m_glGetProgramiv_enc(ctx, program, pname, params);
+}
+
+void GL2Encoder::s_glGetActiveUniform(void *self , GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_PROGRAM_NAME(program);
+ SET_ERROR_IF(index >= ctx->m_shared->getActiveUniformsCountForProgram(program), GL_INVALID_VALUE);
+ ctx->m_glGetActiveUniform_enc(ctx, program, index, bufsize, length, size, type, name);
+}
+
+void GL2Encoder::s_glGetActiveUniformsiv(void *self , GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_PROGRAM_NAME(program);
+ SET_ERROR_IF(uniformCount < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(!GLESv2Validation::allowedGetActiveUniforms(pname), GL_INVALID_ENUM);
+ int activeUniformsCount = ctx->m_shared->getActiveUniformsCountForProgram(program);
+ for (GLsizei i = 0; i < uniformCount; ++i) {
+ SET_ERROR_IF(uniformIndices[i] >= activeUniformsCount, GL_INVALID_VALUE);
+ }
+ ctx->m_glGetActiveUniformsiv_enc(ctx, program, uniformCount, uniformIndices, pname, params);
+}
+
+void GL2Encoder::s_glGetActiveUniformBlockName(void *self , GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_PROGRAM_NAME(program);
+ SET_ERROR_IF(bufSize < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(uniformBlockIndex >= ctx->m_shared->getActiveUniformBlockCount(program), GL_INVALID_VALUE);
+ ctx->m_glGetActiveUniformBlockName_enc(ctx, program, uniformBlockIndex, bufSize, length, uniformBlockName);
+}
+
+void GL2Encoder::s_glGetActiveAttrib(void *self , GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_PROGRAM_NAME(program);
+ VALIDATE_VERTEX_ATTRIB_INDEX(index);
+ SET_ERROR_IF(bufsize < 0, GL_INVALID_VALUE);
+ SET_ERROR_IF(index >= ctx->m_shared->getActiveAttributesCountForProgram(program), GL_INVALID_VALUE);
+ ctx->m_glGetActiveAttrib_enc(ctx, program, index, bufsize, length, size, type, name);
+}
+
+void GL2Encoder::s_glGetRenderbufferParameteriv(void *self , GLenum target, GLenum pname, GLint* params) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(target != GL_RENDERBUFFER, GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::allowedGetRenderbufferParameter(pname), GL_INVALID_ENUM);
+ ctx->m_glGetRenderbufferParameteriv_enc(ctx, target, pname, params);
+}
+
+void GL2Encoder::s_glGetQueryiv(void *self , GLenum target, GLenum pname, GLint* params) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedQueryTarget(target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::allowedQueryParam(pname), GL_INVALID_ENUM);
+ ctx->m_glGetQueryiv_enc(ctx, target, pname, params);
+}
+
+void GL2Encoder::s_glGetQueryObjectuiv(void *self , GLuint query, GLenum pname, GLuint* params) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ GLClientState* state = ctx->m_state;
+ SET_ERROR_IF(!GLESv2Validation::allowedQueryObjectParam(pname), GL_INVALID_ENUM);
+ SET_ERROR_IF(!state->queryExistence(GLClientState::ObjectType::Query, query), GL_INVALID_OPERATION);
+ SET_ERROR_IF(!state->getLastQueryTarget(query), GL_INVALID_OPERATION);
+ SET_ERROR_IF(ctx->m_state->isQueryObjectActive(query), GL_INVALID_OPERATION);
+
+ ctx->m_glGetQueryObjectuiv_enc(ctx, query, pname, params);
+}
+
+GLboolean GL2Encoder::s_glIsEnabled(void *self , GLenum cap) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ RET_AND_SET_ERROR_IF(!GLESv2Validation::allowedEnable(ctx->majorVersion(), ctx->minorVersion(), cap), GL_INVALID_ENUM, 0);
+ return ctx->m_glIsEnabled_enc(ctx, cap);
+}
+
+void GL2Encoder::s_glHint(void *self , GLenum target, GLenum mode) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ SET_ERROR_IF(!GLESv2Validation::allowedHintTarget(target), GL_INVALID_ENUM);
+ SET_ERROR_IF(!GLESv2Validation::allowedHintMode(mode), GL_INVALID_ENUM);
+ ctx->m_glHint_enc(ctx, target, mode);
+}
+
+GLint GL2Encoder::s_glGetFragDataLocation (void *self , GLuint program, const char* name) {
+ GL2Encoder* ctx = (GL2Encoder*)self;
+ VALIDATE_PROGRAM_NAME_RET(program, -1);
+ RET_AND_SET_ERROR_IF(!ctx->m_shared->getProgramLinkStatus(program), GL_INVALID_OPERATION, -1);
+ return ctx->m_glGetFragDataLocation_enc(ctx, program, name);
+}
diff --git a/system/GLESv2_enc/GL2Encoder.h b/system/GLESv2_enc/GL2Encoder.h
index 0ceb9deb..61aed340 100644
--- a/system/GLESv2_enc/GL2Encoder.h
+++ b/system/GLESv2_enc/GL2Encoder.h
@@ -62,8 +62,11 @@ public:
}
void setSharedGroup(GLSharedGroupPtr shared) {
m_shared = shared;
- if (m_state && m_shared.Ptr())
+ if (m_state && m_shared.Ptr()) {
m_state->setTextureData(m_shared->getTextureData());
+ m_state->setRenderbufferInfo(m_shared->getRenderbufferInfo());
+ m_state->setSamplerInfo(m_shared->getSamplerInfo());
+ }
}
int majorVersion() const { return m_currMajorVersion; }
int minorVersion() const { return m_currMinorVersion; }
@@ -71,6 +74,7 @@ public:
const std::vector<std::string>& extArray) {
m_currExtensions = std::string(exts);
m_currExtensionsArray = extArray;
+ m_state->setExtensions(m_currExtensions);
}
bool hasExtension(const char* ext) const {
return m_currExtensions.find(ext) != std::string::npos;
@@ -85,6 +89,9 @@ public:
virtual void setError(GLenum error){ m_error = error; };
virtual GLenum getError() { return m_error; };
+ __attribute__((always_inline)) GLenum* getErrorPtr() { return &m_error; }
+ __attribute__((always_inline)) bool hasError() const { return m_error != GL_NO_ERROR; }
+
void override2DTextureTarget(GLenum target);
void restore2DTextureTarget(GLenum target);
void associateEGLImage(GLenum target, GLeglImageOES eglImage);
@@ -118,6 +125,7 @@ private:
GLint m_max_combinedTextureImageUnits;
GLint m_max_vertexTextureImageUnits;
+ GLint m_max_array_texture_layers;;
GLint m_max_textureImageUnits;
GLint m_max_cubeMapTextureSize;
GLint m_max_renderBufferSize;
@@ -137,6 +145,8 @@ private:
GLuint m_ssbo_offset_align;
GLuint m_ubo_offset_align;
+ GLint m_log2MaxTextureSize;
+
std::vector<char> m_fixedBuffer;
uint32_t m_drawCallFlushInterval;
@@ -161,8 +171,6 @@ private:
bool updateHostTexture2DBinding(GLenum texUnit, GLenum newTarget);
void updateHostTexture2DBindingsFromProgramData(GLuint program);
bool texture2DNeedsOverride(GLenum target) const;
- bool isCompleteFbo(GLenum target, const GLClientState* state, GLenum attachment) const;
- bool checkFramebufferCompleteness(GLenum target, const GLClientState* state) const;
// Utility classes for safe queries that
// need access to private class members
@@ -614,7 +622,6 @@ private:
glBindSampler_client_proc_t m_glBindSampler_enc;
static void s_glBindSampler(void* self, GLuint unit, GLuint sampler);
- void doSamplerBindEncodeCached(GLuint unit, GLuint sampler);
glDeleteSamplers_client_proc_t m_glDeleteSamplers_enc;
static void s_glDeleteSamplers(void* self, GLsizei n, const GLuint* samplers);
@@ -769,6 +776,167 @@ private:
glInvalidateFramebuffer_client_proc_t m_glInvalidateFramebuffer_enc;
glInvalidateSubFramebuffer_client_proc_t m_glInvalidateSubFramebuffer_enc;;
+ // Dispatch compute
+ static void s_glDispatchCompute(void* self, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+ static void s_glDispatchComputeIndirect(void* self, GLintptr indirect);
+
+ glDispatchCompute_client_proc_t m_glDispatchCompute_enc;
+ glDispatchComputeIndirect_client_proc_t m_glDispatchComputeIndirect_enc;
+
+ // State tracking for transform feedbacks, samplers, and query objects
+ static void s_glGenTransformFeedbacks(void* self, GLsizei n, GLuint* ids);
+ static void s_glDeleteTransformFeedbacks(void* self, GLsizei n, const GLuint* ids);
+ static void s_glGenSamplers(void* self, GLsizei n, GLuint* ids);
+ static void s_glGenQueries(void* self, GLsizei n, GLuint* ids);
+ static void s_glDeleteQueries(void* self, GLsizei n, const GLuint* ids);
+
+ glGenTransformFeedbacks_client_proc_t m_glGenTransformFeedbacks_enc;
+ glDeleteTransformFeedbacks_client_proc_t m_glDeleteTransformFeedbacks_enc;
+ glGenSamplers_client_proc_t m_glGenSamplers_enc;
+ glGenQueries_client_proc_t m_glGenQueries_enc;
+ glDeleteQueries_client_proc_t m_glDeleteQueries_enc;
+
+ static void s_glBindTransformFeedback(void* self, GLenum target, GLuint id);
+ static void s_glBeginQuery(void* self, GLenum target, GLuint query);
+ static void s_glEndQuery(void* self, GLenum target);
+
+ glBindTransformFeedback_client_proc_t m_glBindTransformFeedback_enc;
+ glBeginQuery_client_proc_t m_glBeginQuery_enc;
+ glEndQuery_client_proc_t m_glEndQuery_enc;
+
+ static void s_glClear(void* self, GLbitfield mask);
+ glClear_client_proc_t m_glClear_enc;
+
+ static void s_glClearBufferfi(void* self, GLenum buffer, GLint drawBuffer, float depth, int stencil);
+ glClearBufferfi_client_proc_t m_glClearBufferfi_enc;
+
+ static void s_glCopyTexSubImage2D(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+ glCopyTexSubImage2D_client_proc_t m_glCopyTexSubImage2D_enc;
+
+ static void s_glCopyTexSubImage3D(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+ glCopyTexSubImage3D_client_proc_t m_glCopyTexSubImage3D_enc;
+
+ static void s_glCompileShader(void* self, GLuint shader);
+ glCompileShader_client_proc_t m_glCompileShader_enc;
+
+ static void s_glValidateProgram(void* self, GLuint program);
+ glValidateProgram_client_proc_t m_glValidateProgram_enc;
+
+ static void s_glProgramBinary(void *self , GLuint program, GLenum binaryFormat, const void* binary, GLsizei length);
+ glProgramBinary_client_proc_t m_glProgramBinary_enc;
+
+ static void s_glGetSamplerParameterfv(void *self, GLuint sampler, GLenum pname, GLfloat* params);
+ static void s_glGetSamplerParameteriv(void *self, GLuint sampler, GLenum pname, GLint* params);
+ glGetSamplerParameterfv_client_proc_t m_glGetSamplerParameterfv_enc;
+ glGetSamplerParameteriv_client_proc_t m_glGetSamplerParameteriv_enc;
+
+ static void s_glSamplerParameterf(void *self , GLuint sampler, GLenum pname, GLfloat param);
+ static void s_glSamplerParameteri(void *self , GLuint sampler, GLenum pname, GLint param);
+ static void s_glSamplerParameterfv(void *self , GLuint sampler, GLenum pname, const GLfloat* params);
+ static void s_glSamplerParameteriv(void *self , GLuint sampler, GLenum pname, const GLint* params);
+
+ glSamplerParameterf_client_proc_t m_glSamplerParameterf_enc;
+ glSamplerParameteri_client_proc_t m_glSamplerParameteri_enc;
+ glSamplerParameterfv_client_proc_t m_glSamplerParameterfv_enc;
+ glSamplerParameteriv_client_proc_t m_glSamplerParameteriv_enc;
+
+ static int s_glGetAttribLocation(void *self , GLuint program, const GLchar* name);
+ glGetAttribLocation_client_proc_t m_glGetAttribLocation_enc;
+
+ static void s_glBindAttribLocation(void *self , GLuint program, GLuint index, const GLchar* name);
+ static void s_glUniformBlockBinding(void *self , GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+ static void s_glGetTransformFeedbackVarying(void *self , GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, char* name);
+ static void s_glScissor(void *self , GLint x, GLint y, GLsizei width, GLsizei height);
+ static void s_glDepthFunc(void *self , GLenum func);
+ static void s_glViewport(void *self , GLint x, GLint y, GLsizei width, GLsizei height);
+ static void s_glStencilFunc(void *self , GLenum func, GLint ref, GLuint mask);
+ static void s_glStencilFuncSeparate(void *self , GLenum face, GLenum func, GLint ref, GLuint mask);
+ static void s_glStencilOp(void *self , GLenum fail, GLenum zfail, GLenum zpass);
+ static void s_glStencilOpSeparate(void *self , GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
+ static void s_glStencilMaskSeparate(void *self , GLenum face, GLuint mask);
+ static void s_glBlendEquation(void *self , GLenum mode);
+ static void s_glBlendEquationSeparate(void *self , GLenum modeRGB, GLenum modeAlpha);
+ static void s_glBlendFunc(void *self , GLenum sfactor, GLenum dfactor);
+ static void s_glBlendFuncSeparate(void *self , GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+ static void s_glCullFace(void *self , GLenum mode);
+ static void s_glFrontFace(void *self , GLenum mode);
+ static void s_glLineWidth(void *self , GLfloat width);
+ static void s_glVertexAttrib1f(void *self , GLuint indx, GLfloat x);
+ static void s_glVertexAttrib2f(void *self , GLuint indx, GLfloat x, GLfloat y);
+ static void s_glVertexAttrib3f(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloat z);
+ static void s_glVertexAttrib4f(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+ static void s_glVertexAttrib1fv(void *self , GLuint indx, const GLfloat* values);
+ static void s_glVertexAttrib2fv(void *self , GLuint indx, const GLfloat* values);
+ static void s_glVertexAttrib3fv(void *self , GLuint indx, const GLfloat* values);
+ static void s_glVertexAttrib4fv(void *self , GLuint indx, const GLfloat* values);
+ static void s_glVertexAttribI4i(void *self , GLuint index, GLint v0, GLint v1, GLint v2, GLint v3);
+ static void s_glVertexAttribI4ui(void *self , GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+ static void s_glVertexAttribI4iv(void *self , GLuint index, const GLint* v);
+ static void s_glVertexAttribI4uiv(void *self , GLuint index, const GLuint* v);
+
+ static void s_glGetShaderPrecisionFormat(void *self , GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
+ static void s_glGetProgramiv(void *self , GLuint program, GLenum pname, GLint* params);
+ static void s_glGetActiveUniform(void *self , GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
+ static void s_glGetActiveUniformsiv(void *self , GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params);
+ static void s_glGetActiveUniformBlockName(void *self , GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName);
+ static void s_glGetActiveAttrib(void *self , GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
+ static void s_glGetRenderbufferParameteriv(void *self , GLenum target, GLenum pname, GLint* params);
+ static void s_glGetQueryiv(void *self , GLenum target, GLenum pname, GLint* params);
+ static void s_glGetQueryObjectuiv(void *self , GLuint query, GLenum pname, GLuint* params);
+ static GLboolean s_glIsEnabled(void *self , GLenum cap);
+ static void s_glHint(void *self , GLenum target, GLenum mode);
+ static GLint s_glGetFragDataLocation (void *self , GLuint program, const char* name);
+
+#define LIST_REMAINING_FUNCTIONS_FOR_VALIDATION(f) \
+ f(glBindAttribLocation) \
+ f(glUniformBlockBinding) \
+ f(glGetTransformFeedbackVarying) \
+ f(glScissor) \
+ f(glDepthFunc) \
+ f(glViewport) \
+ f(glStencilFunc) \
+ f(glStencilFuncSeparate) \
+ f(glStencilOp) \
+ f(glStencilOpSeparate) \
+ f(glStencilMaskSeparate) \
+ f(glBlendEquation) \
+ f(glBlendEquationSeparate) \
+ f(glBlendFunc) \
+ f(glBlendFuncSeparate) \
+ f(glCullFace) \
+ f(glFrontFace) \
+ f(glLineWidth) \
+ f(glVertexAttrib1f) \
+ f(glVertexAttrib2f) \
+ f(glVertexAttrib3f) \
+ f(glVertexAttrib4f) \
+ f(glVertexAttrib1fv) \
+ f(glVertexAttrib2fv) \
+ f(glVertexAttrib3fv) \
+ f(glVertexAttrib4fv) \
+ f(glVertexAttribI4i) \
+ f(glVertexAttribI4ui) \
+ f(glVertexAttribI4iv) \
+ f(glVertexAttribI4uiv) \
+ f(glGetShaderPrecisionFormat) \
+ f(glGetProgramiv) \
+ f(glGetActiveUniform) \
+ f(glGetActiveUniformsiv) \
+ f(glGetActiveUniformBlockName) \
+ f(glGetActiveAttrib) \
+ f(glGetRenderbufferParameteriv) \
+ f(glGetQueryiv) \
+ f(glGetQueryObjectuiv) \
+ f(glIsEnabled) \
+ f(glHint) \
+ f(glGetFragDataLocation) \
+
+#define DECLARE_CLIENT_ENCODER_PROC(n) \
+ n##_client_proc_t m_##n##_enc;
+
+ LIST_REMAINING_FUNCTIONS_FOR_VALIDATION(DECLARE_CLIENT_ENCODER_PROC)
+
+
public:
glEGLImageTargetTexture2DOES_client_proc_t m_glEGLImageTargetTexture2DOES_enc;
diff --git a/system/GLESv2_enc/GLESv2Validation.cpp b/system/GLESv2_enc/GLESv2Validation.cpp
index aff79022..b3b46371 100644
--- a/system/GLESv2_enc/GLESv2Validation.cpp
+++ b/system/GLESv2_enc/GLESv2Validation.cpp
@@ -18,6 +18,241 @@
#include <sstream>
+#define LIST_VALID_TEX_INTERNALFORMATS(f) \
+ f(GL_BGRA8_EXT) \
+ f(GL_R8) \
+ f(GL_R8_SNORM) \
+ f(GL_R16F) \
+ f(GL_R32F) \
+ f(GL_R8UI) \
+ f(GL_R8I) \
+ f(GL_R16UI) \
+ f(GL_R16I) \
+ f(GL_R32UI) \
+ f(GL_R32I) \
+ f(GL_RG8) \
+ f(GL_RG8_SNORM) \
+ f(GL_RG16F) \
+ f(GL_RG32F) \
+ f(GL_RG8UI) \
+ f(GL_RG8I) \
+ f(GL_RG16UI) \
+ f(GL_RG16I) \
+ f(GL_RG32UI) \
+ f(GL_RG32I) \
+ f(GL_RGB8) \
+ f(GL_SRGB8) \
+ f(GL_RGB565) \
+ f(GL_RGB8_SNORM) \
+ f(GL_R11F_G11F_B10F) \
+ f(GL_RGB9_E5) \
+ f(GL_RGB16F) \
+ f(GL_RGB32F) \
+ f(GL_RGB8UI) \
+ f(GL_RGB8I) \
+ f(GL_RGB16UI) \
+ f(GL_RGB16I) \
+ f(GL_RGB32UI) \
+ f(GL_RGB32I) \
+ f(GL_RGBA8) \
+ f(GL_SRGB8_ALPHA8) \
+ f(GL_RGBA8_SNORM) \
+ f(GL_RGB5_A1) \
+ f(GL_RGBA4) \
+ f(GL_RGB10_A2) \
+ f(GL_RGBA16F) \
+ f(GL_RGBA32F) \
+ f(GL_RGBA8UI) \
+ f(GL_RGBA8I) \
+ f(GL_RGB10_A2UI) \
+ f(GL_RGBA16UI) \
+ f(GL_RGBA16I) \
+ f(GL_RGBA32I) \
+ f(GL_RGBA32UI) \
+ f(GL_DEPTH_COMPONENT16) \
+ f(GL_DEPTH_COMPONENT24) \
+ f(GL_DEPTH_COMPONENT32F) \
+ f(GL_DEPTH24_STENCIL8) \
+ f(GL_DEPTH32F_STENCIL8) \
+ f(GL_ETC1_RGB8_OES) \
+ f(GL_COMPRESSED_R11_EAC) \
+ f(GL_COMPRESSED_SIGNED_R11_EAC) \
+ f(GL_COMPRESSED_RG11_EAC) \
+ f(GL_COMPRESSED_SIGNED_RG11_EAC) \
+ f(GL_COMPRESSED_RGB8_ETC2) \
+ f(GL_COMPRESSED_SRGB8_ETC2) \
+ f(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2) \
+ f(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2) \
+ f(GL_COMPRESSED_RGBA8_ETC2_EAC) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC) \
+ f(GL_COMPRESSED_RGBA_ASTC_4x4_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_5x4_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_5x5_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_6x5_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_6x6_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_8x5_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_8x6_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_8x8_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_10x5_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_10x6_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_10x8_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_10x10_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_12x10_KHR) \
+ f(GL_COMPRESSED_RGBA_ASTC_12x12_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR) \
+
+#define LIST_INTEGER_TEX_FORMATS(f) \
+ f(GL_RED_INTEGER) \
+ f(GL_RG_INTEGER) \
+ f(GL_RGB_INTEGER) \
+ f(GL_RGBA_INTEGER) \
+ f(GL_R8UI) \
+ f(GL_R8I) \
+ f(GL_R16UI) \
+ f(GL_R16I) \
+ f(GL_R32UI) \
+ f(GL_R32I) \
+ f(GL_RG8UI) \
+ f(GL_RG8I) \
+ f(GL_RG16UI) \
+ f(GL_RG16I) \
+ f(GL_RG32UI) \
+ f(GL_RG32I) \
+ f(GL_RGB8UI) \
+ f(GL_RGB8I) \
+ f(GL_RGB16UI) \
+ f(GL_RGB16I) \
+ f(GL_RGB32UI) \
+ f(GL_RGB32I) \
+ f(GL_RGBA8UI) \
+ f(GL_RGBA8I) \
+ f(GL_RGB10_A2UI) \
+ f(GL_RGBA16UI) \
+ f(GL_RGBA16I) \
+ f(GL_RGBA32I) \
+ f(GL_RGBA32UI) \
+
+#define LIST_VALID_TEXFORMAT_COMBINATIONS(f) \
+ f(GL_BGRA8_EXT, GL_BGRA_EXT, GL_UNSIGNED_BYTE) \
+ f(GL_R8, GL_RED, GL_UNSIGNED_BYTE) \
+ f(GL_R8_SNORM, GL_RED, GL_BYTE) \
+ f(GL_R16F, GL_RED, GL_FLOAT) \
+ f(GL_R16F, GL_RED, GL_HALF_FLOAT) \
+ f(GL_R32F, GL_RED, GL_FLOAT) \
+ f(GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE) \
+ f(GL_R8I, GL_RED_INTEGER, GL_BYTE) \
+ f(GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT) \
+ f(GL_R16I, GL_RED_INTEGER, GL_SHORT) \
+ f(GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT) \
+ f(GL_R32I, GL_RED_INTEGER, GL_INT) \
+ f(GL_RG8, GL_RG, GL_UNSIGNED_BYTE) \
+ f(GL_RG8_SNORM, GL_RG, GL_BYTE) \
+ f(GL_RG16F, GL_RG, GL_HALF_FLOAT) \
+ f(GL_RG16F, GL_RG, GL_FLOAT) \
+ f(GL_RG32F, GL_RG, GL_FLOAT) \
+ f(GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE) \
+ f(GL_RG8I, GL_RG_INTEGER, GL_BYTE) \
+ f(GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT) \
+ f(GL_RG16I, GL_RG_INTEGER, GL_SHORT) \
+ f(GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT) \
+ f(GL_RG32I, GL_RG_INTEGER, GL_INT) \
+ f(GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE) \
+ f(GL_SRGB8, GL_RGB, GL_UNSIGNED_BYTE) \
+ f(GL_RGB565, GL_RGB, GL_UNSIGNED_BYTE) \
+ f(GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5) \
+ f(GL_RGB8_SNORM, GL_RGB, GL_BYTE) \
+ f(GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV) \
+ f(GL_R11F_G11F_B10F, GL_RGB, GL_HALF_FLOAT) \
+ f(GL_R11F_G11F_B10F, GL_RGB, GL_FLOAT) \
+ f(GL_RGB9_E5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV) \
+ f(GL_RGB9_E5, GL_RGB, GL_HALF_FLOAT) \
+ f(GL_RGB9_E5, GL_RGB, GL_FLOAT) \
+ f(GL_RGB16F, GL_RGB, GL_HALF_FLOAT) \
+ f(GL_RGB16F, GL_RGB, GL_FLOAT) \
+ f(GL_RGB32F, GL_RGB, GL_FLOAT) \
+ f(GL_RGB8UI, GL_RGB_INTEGER, GL_UNSIGNED_BYTE) \
+ f(GL_RGB8I, GL_RGB_INTEGER, GL_BYTE) \
+ f(GL_RGB16UI, GL_RGB_INTEGER, GL_UNSIGNED_SHORT) \
+ f(GL_RGB16I, GL_RGB_INTEGER, GL_SHORT) \
+ f(GL_RGB32UI, GL_RGB_INTEGER, GL_UNSIGNED_INT) \
+ f(GL_RGB32I, GL_RGB_INTEGER, GL_INT) \
+ f(GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_RGBA8_SNORM, GL_RGBA, GL_BYTE) \
+ f(GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1) \
+ f(GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV) \
+ f(GL_RGBA4, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4) \
+ f(GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV) \
+ f(GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT) \
+ f(GL_RGBA16F, GL_RGBA, GL_FLOAT) \
+ f(GL_RGBA32F, GL_RGBA, GL_FLOAT) \
+ f(GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE) \
+ f(GL_RGBA8I, GL_RGBA_INTEGER, GL_BYTE) \
+ f(GL_RGB10_A2UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV) \
+ f(GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT) \
+ f(GL_RGBA16I, GL_RGBA_INTEGER, GL_SHORT) \
+ f(GL_RGBA32I, GL_RGBA_INTEGER, GL_INT) \
+ f(GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT) \
+ f(GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT) \
+ f(GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT) \
+ f(GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT) \
+ f(GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT) \
+ f(GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8) \
+ f(GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV) \
+ f(GL_COMPRESSED_R11_EAC, GL_RED, GL_FLOAT) \
+ f(GL_COMPRESSED_SIGNED_R11_EAC, GL_RED, GL_FLOAT) \
+ f(GL_COMPRESSED_RG11_EAC, GL_RG, GL_FLOAT) \
+ f(GL_COMPRESSED_SIGNED_RG11_EAC, GL_RG, GL_FLOAT) \
+ f(GL_COMPRESSED_RGB8_ETC2, GL_RGB, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ETC2, GL_RGB, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA8_ETC2_EAC, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_4x4_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_5x4_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_5x5_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_6x5_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_6x6_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_8x5_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_8x6_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_8x8_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_10x5_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_10x6_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_10x8_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_10x10_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_12x10_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_RGBA_ASTC_12x12_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+ f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, GL_RGBA, GL_UNSIGNED_BYTE) \
+
namespace GLESv2Validation {
GLbitfield allBufferMapAccessFlags =
@@ -69,6 +304,24 @@ bool bufferParam(GL2Encoder* ctx, GLenum pname) {
}
}
+bool bufferUsage(GL2Encoder* ctx, GLenum usage) {
+ int glesMajorVersion = ctx->majorVersion();
+ switch(usage) {
+ case GL_STREAM_DRAW:
+ case GL_STATIC_DRAW:
+ case GL_DYNAMIC_DRAW:
+ return true;
+ case GL_STREAM_READ:
+ case GL_STATIC_READ:
+ case GL_DYNAMIC_READ:
+ case GL_STREAM_COPY:
+ case GL_STATIC_COPY:
+ case GL_DYNAMIC_COPY:
+ return glesMajorVersion >= 3;
+ }
+ return false;
+
+}
bool pixelStoreParam(GL2Encoder* ctx, GLenum param) {
int glesMajorVersion = ctx->majorVersion();
switch(param) {
@@ -260,6 +513,17 @@ bool readPixelsType(GLenum format) {
return false;
}
+bool pixelOp(GLenum format,GLenum type) {
+ switch(type) {
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ return format == GL_RGBA;
+ case GL_UNSIGNED_SHORT_5_6_5:
+ return format == GL_RGB;
+ }
+ return true;
+}
+
bool vertexAttribType(GL2Encoder* ctx, GLenum type)
{
int glesMajorVersion = ctx->majorVersion();
@@ -347,32 +611,133 @@ bool textureTarget(GL2Encoder* ctx, GLenum target) {
return false;
}
-static GLsizei ceildiv(GLsizei x, GLsizei y) {
- return (x + y - 1) / y;
+bool textureParams(GL2Encoder* ctx, GLenum param) {
+ int glesMajorVersion = ctx->majorVersion();
+ int glesMinorVersion = ctx->minorVersion();
+ switch(param) {
+ case GL_TEXTURE_MIN_FILTER:
+ case GL_TEXTURE_MAG_FILTER:
+ case GL_TEXTURE_WRAP_S:
+ case GL_TEXTURE_WRAP_T:
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+ return true;
+ case GL_TEXTURE_SWIZZLE_R:
+ case GL_TEXTURE_SWIZZLE_G:
+ case GL_TEXTURE_SWIZZLE_B:
+ case GL_TEXTURE_SWIZZLE_A:
+ case GL_TEXTURE_MIN_LOD:
+ case GL_TEXTURE_MAX_LOD:
+ case GL_TEXTURE_BASE_LEVEL:
+ case GL_TEXTURE_MAX_LEVEL:
+ case GL_TEXTURE_COMPARE_MODE:
+ case GL_TEXTURE_COMPARE_FUNC:
+ case GL_TEXTURE_WRAP_R:
+ case GL_TEXTURE_IMMUTABLE_FORMAT:
+ case GL_TEXTURE_IMMUTABLE_LEVELS:
+ return glesMajorVersion >= 3;
+ case GL_DEPTH_STENCIL_TEXTURE_MODE:
+ return glesMajorVersion >= 3 && glesMinorVersion >= 1;
+ default:
+ return false;
+ }
}
-GLsizei compressedTexImageSize(GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) {
- GLsizei base_size = ceildiv(width, 4) * ceildiv(height, 4) * depth;
-#define COMPRESSED_TEX_IMAGE_SIZE_CASE(internal, multiplier) \
- case internal: \
- return base_size * multiplier; \
+bool samplerParams(GL2Encoder* ctx, GLenum param) {
+ (void)ctx;
+ switch(param) {
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+ case GL_TEXTURE_MIN_FILTER:
+ case GL_TEXTURE_MAG_FILTER:
+ case GL_TEXTURE_WRAP_S:
+ case GL_TEXTURE_WRAP_T:
+ case GL_TEXTURE_WRAP_R:
+ case GL_TEXTURE_MIN_LOD:
+ case GL_TEXTURE_MAX_LOD:
+ case GL_TEXTURE_COMPARE_MODE:
+ case GL_TEXTURE_COMPARE_FUNC:
+ return true;
+ default:
+ return false;
+ }
+}
- switch (internalformat) {
- COMPRESSED_TEX_IMAGE_SIZE_CASE(GL_COMPRESSED_R11_EAC, 8)
- COMPRESSED_TEX_IMAGE_SIZE_CASE(GL_COMPRESSED_SIGNED_R11_EAC, 8)
- COMPRESSED_TEX_IMAGE_SIZE_CASE(GL_COMPRESSED_RG11_EAC, 16)
- COMPRESSED_TEX_IMAGE_SIZE_CASE(GL_COMPRESSED_SIGNED_RG11_EAC, 16)
- COMPRESSED_TEX_IMAGE_SIZE_CASE(GL_COMPRESSED_RGB8_ETC2, 8)
- COMPRESSED_TEX_IMAGE_SIZE_CASE(GL_COMPRESSED_SRGB8_ETC2, 8)
- COMPRESSED_TEX_IMAGE_SIZE_CASE(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, 8)
- COMPRESSED_TEX_IMAGE_SIZE_CASE(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, 8)
- COMPRESSED_TEX_IMAGE_SIZE_CASE(GL_COMPRESSED_RGBA8_ETC2_EAC, 16)
- COMPRESSED_TEX_IMAGE_SIZE_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, 16)
+bool textureParamValue(GL2Encoder* ctx, GLenum pname, GLint intval, GLfloat floatval, GLenum enumval) {
+ (void)ctx;
+ (void)floatval;
+ switch (pname) {
+ case GL_TEXTURE_BASE_LEVEL:
+ return intval >= 0;
+ case GL_TEXTURE_COMPARE_MODE:
+ return
+ (enumval == GL_NONE) ||
+ (enumval == GL_COMPARE_REF_TO_TEXTURE);
+ case GL_TEXTURE_COMPARE_FUNC:
+ return
+ (enumval == GL_LEQUAL) ||
+ (enumval == GL_GEQUAL) ||
+ (enumval == GL_LESS) ||
+ (enumval == GL_GREATER) ||
+ (enumval == GL_EQUAL) ||
+ (enumval == GL_NOTEQUAL) ||
+ (enumval == GL_ALWAYS) ||
+ (enumval == GL_NEVER);
+ case GL_TEXTURE_MAG_FILTER:
+ return
+ (enumval == GL_NEAREST) ||
+ (enumval == GL_LINEAR);
+ case GL_TEXTURE_MAX_LEVEL:
+ return intval >= 0;
+ case GL_TEXTURE_MAX_LOD:
+ return true;
+ case GL_TEXTURE_MIN_FILTER:
+ return
+ (enumval == GL_NEAREST) ||
+ (enumval == GL_LINEAR) ||
+ (enumval == GL_NEAREST_MIPMAP_NEAREST) ||
+ (enumval == GL_NEAREST_MIPMAP_LINEAR) ||
+ (enumval == GL_LINEAR_MIPMAP_NEAREST) ||
+ (enumval == GL_LINEAR_MIPMAP_LINEAR);
+ case GL_TEXTURE_MIN_LOD:
+ return true;
+ case GL_TEXTURE_SWIZZLE_R:
+ case GL_TEXTURE_SWIZZLE_G:
+ case GL_TEXTURE_SWIZZLE_B:
+ case GL_TEXTURE_SWIZZLE_A:
+ return
+ (enumval == GL_RED) ||
+ (enumval == GL_GREEN) ||
+ (enumval == GL_BLUE) ||
+ (enumval == GL_ALPHA) ||
+ (enumval == GL_ZERO) ||
+ (enumval == GL_ONE);
+ case GL_TEXTURE_WRAP_S:
+ case GL_TEXTURE_WRAP_T:
+ case GL_TEXTURE_WRAP_R:
+ return
+ (enumval == GL_CLAMP_TO_EDGE) ||
+ (enumval == GL_REPEAT) ||
+ (enumval == GL_MIRRORED_REPEAT);
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+ return true;
+ case GL_TEXTURE_IMMUTABLE_FORMAT:
+ case GL_TEXTURE_IMMUTABLE_LEVELS:
+ case GL_DEPTH_STENCIL_TEXTURE_MODE:
+ return true;
default:
- break;
+ return true;
}
+}
- return 0;
+bool isIntegerFormat(GLenum format) {
+
+#define CHECK_EQUAL(x) case x: return true;
+
+ switch (format) {
+ LIST_INTEGER_TEX_FORMATS(CHECK_EQUAL)
+
+ default:
+ return false;
+ }
}
bool isCompressedFormat(GLenum internalformat) {
@@ -445,6 +810,7 @@ bool supportedCompressedFormat(GL2Encoder* ctx, GLenum internalformat) {
return false ; \
switch (internalformat) {
+ COMPRESSED_TEX_IMAGE_SUPPORT_CASE(GL_ETC1_RGB8_OES, 2, 0)
COMPRESSED_TEX_IMAGE_SUPPORT_CASE(GL_COMPRESSED_R11_EAC, 2, 0)
COMPRESSED_TEX_IMAGE_SUPPORT_CASE(GL_COMPRESSED_SIGNED_R11_EAC, 2, 0)
COMPRESSED_TEX_IMAGE_SUPPORT_CASE(GL_COMPRESSED_RG11_EAC, 2, 0)
@@ -486,7 +852,7 @@ bool supportedCompressedFormat(GL2Encoder* ctx, GLenum internalformat) {
default:
break;
}
- return true;
+ return false;
}
bool unsizedFormat(GLenum format) {
@@ -730,103 +1096,6 @@ bool pixelFormat(GL2Encoder* ctx, GLenum format) {
}
return false;
}
-#define LIST_VALID_TEX_INTERNALFORMATS(f) \
- f(GL_BGRA8_EXT) \
- f(GL_R8) \
- f(GL_R8_SNORM) \
- f(GL_R16F) \
- f(GL_R32F) \
- f(GL_R8UI) \
- f(GL_R8I) \
- f(GL_R16UI) \
- f(GL_R16I) \
- f(GL_R32UI) \
- f(GL_R32I) \
- f(GL_RG8) \
- f(GL_RG8_SNORM) \
- f(GL_RG16F) \
- f(GL_RG32F) \
- f(GL_RG8UI) \
- f(GL_RG8I) \
- f(GL_RG16UI) \
- f(GL_RG16I) \
- f(GL_RG32UI) \
- f(GL_RG32I) \
- f(GL_RGB8) \
- f(GL_SRGB8) \
- f(GL_RGB565) \
- f(GL_RGB8_SNORM) \
- f(GL_R11F_G11F_B10F) \
- f(GL_RGB9_E5) \
- f(GL_RGB16F) \
- f(GL_RGB32F) \
- f(GL_RGB8UI) \
- f(GL_RGB8I) \
- f(GL_RGB16UI) \
- f(GL_RGB16I) \
- f(GL_RGB32UI) \
- f(GL_RGB32I) \
- f(GL_RGBA8) \
- f(GL_SRGB8_ALPHA8) \
- f(GL_RGBA8_SNORM) \
- f(GL_RGB5_A1) \
- f(GL_RGBA4) \
- f(GL_RGB10_A2) \
- f(GL_RGBA16F) \
- f(GL_RGBA32F) \
- f(GL_RGBA8UI) \
- f(GL_RGBA8I) \
- f(GL_RGB10_A2UI) \
- f(GL_RGBA16UI) \
- f(GL_RGBA16I) \
- f(GL_RGBA32I) \
- f(GL_RGBA32UI) \
- f(GL_DEPTH_COMPONENT16) \
- f(GL_DEPTH_COMPONENT24) \
- f(GL_DEPTH_COMPONENT32F) \
- f(GL_DEPTH24_STENCIL8) \
- f(GL_DEPTH32F_STENCIL8) \
- f(GL_ETC1_RGB8_OES) \
- f(GL_COMPRESSED_R11_EAC) \
- f(GL_COMPRESSED_SIGNED_R11_EAC) \
- f(GL_COMPRESSED_RG11_EAC) \
- f(GL_COMPRESSED_SIGNED_RG11_EAC) \
- f(GL_COMPRESSED_RGB8_ETC2) \
- f(GL_COMPRESSED_SRGB8_ETC2) \
- f(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2) \
- f(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2) \
- f(GL_COMPRESSED_RGBA8_ETC2_EAC) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC) \
- f(GL_COMPRESSED_RGBA_ASTC_4x4_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_5x4_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_5x5_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_6x5_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_6x6_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_8x5_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_8x6_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_8x8_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_10x5_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_10x6_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_10x8_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_10x10_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_12x10_KHR) \
- f(GL_COMPRESSED_RGBA_ASTC_12x12_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR) \
- f(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR) \
-
-
bool pixelInternalFormat(GLenum internalformat) {
#define VALID_INTERNAL_FORMAT(format) \
case format: \
@@ -840,6 +1109,83 @@ bool pixelInternalFormat(GLenum internalformat) {
return false;
}
+bool pixelSizedFormat(GL2Encoder* ctx, GLenum internalformat, GLenum format, GLenum type) {
+ int glesMajorVersion = ctx->majorVersion();
+ if (internalformat == format) {
+ return true;
+ }
+
+ if (glesMajorVersion < 3) {
+ switch (format) {
+ case GL_RED:
+ switch (type) {
+ case GL_UNSIGNED_BYTE:
+ return internalformat == GL_R8;
+ case GL_HALF_FLOAT:
+ case GL_FLOAT:
+ return internalformat == GL_R16F;
+ case GL_BYTE:
+ return internalformat == GL_R8_SNORM;
+ default:
+ return false;
+ }
+ break;
+ case GL_RG:
+ switch (type) {
+ case GL_UNSIGNED_BYTE:
+ return internalformat == GL_RG8;
+ case GL_HALF_FLOAT:
+ case GL_FLOAT:
+ return internalformat == GL_RG16F;
+ default:
+ return false;
+ }
+ break;
+ case GL_RGB:
+ switch (type) {
+ case GL_HALF_FLOAT:
+ case GL_FLOAT:
+ return internalformat == GL_RGB16F
+ || internalformat == GL_R11F_G11F_B10F;
+ case GL_UNSIGNED_INT_10F_11F_11F_REV:
+ return internalformat == GL_R11F_G11F_B10F;
+ default:
+ return internalformat == GL_RGB8 ||
+ internalformat == GL_RGB;
+ }
+ break;
+ case GL_RGBA:
+ switch (type) {
+ case GL_HALF_FLOAT:
+ case GL_FLOAT:
+ return internalformat == GL_RGBA16F;
+ default:
+ return internalformat == GL_RGBA8 ||
+ internalformat == GL_RGBA;
+ }
+ break;
+ }
+ }
+
+#define VALIDATE_FORMAT_COMBINATION(x, y, z) \
+ if (internalformat == x && format == y && type == z) return true; \
+
+ LIST_VALID_TEXFORMAT_COMBINATIONS(VALIDATE_FORMAT_COMBINATION)
+
+ return false;
+}
+
+void getCompatibleFormatTypeForInternalFormat(GLenum internalformat, GLenum* format_out, GLenum* type_out) {
+#define RETURN_COMPATIBLE_FORMAT(x, y, z) \
+ if (internalformat == x) { \
+ *format_out = y; \
+ *type_out = z; \
+ return; \
+ } \
+
+ LIST_VALID_TEXFORMAT_COMBINATIONS(RETURN_COMPATIBLE_FORMAT)
+}
+
bool shaderType(GL2Encoder* ctx, GLenum type) {
int glesMajorVersion = ctx->majorVersion();
int glesMinorVersion = ctx->minorVersion();
@@ -873,4 +1219,323 @@ std::string vertexAttribIndexRangeErrorMsg(GL2Encoder* ctx, GLuint index) {
return ss.str();
}
+bool allowedFace(GLenum face) {
+ switch (face) {
+ case GL_FRONT:
+ case GL_BACK:
+ case GL_FRONT_AND_BACK:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedFunc(GLenum func) {
+ switch (func) {
+ case GL_NEVER:
+ case GL_ALWAYS:
+ case GL_LESS:
+ case GL_LEQUAL:
+ case GL_EQUAL:
+ case GL_GREATER:
+ case GL_GEQUAL:
+ case GL_NOTEQUAL:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedStencilOp(GLenum op) {
+ switch (op) {
+ case GL_KEEP:
+ case GL_ZERO:
+ case GL_REPLACE:
+ case GL_INCR:
+ case GL_DECR:
+ case GL_INVERT:
+ case GL_INCR_WRAP:
+ case GL_DECR_WRAP:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedBlendEquation(GLenum eq) {
+ switch (eq) {
+ case GL_FUNC_ADD:
+ case GL_FUNC_SUBTRACT:
+ case GL_FUNC_REVERSE_SUBTRACT:
+ case GL_MIN:
+ case GL_MAX:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedBlendFunc(GLenum func) {
+ switch (func) {
+ case GL_ZERO:
+ case GL_ONE:
+ case GL_SRC_COLOR:
+ case GL_ONE_MINUS_SRC_COLOR:
+ case GL_DST_COLOR:
+ case GL_ONE_MINUS_DST_COLOR:
+ case GL_SRC_ALPHA:
+ case GL_ONE_MINUS_SRC_ALPHA:
+ case GL_DST_ALPHA:
+ case GL_ONE_MINUS_DST_ALPHA:
+ case GL_CONSTANT_COLOR:
+ case GL_ONE_MINUS_CONSTANT_COLOR:
+ case GL_CONSTANT_ALPHA:
+ case GL_ONE_MINUS_CONSTANT_ALPHA:
+ case GL_SRC_ALPHA_SATURATE:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedCullFace(GLenum mode) {
+ switch (mode) {
+ case GL_FRONT:
+ case GL_BACK:
+ case GL_FRONT_AND_BACK:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedFrontFace(GLenum mode) {
+ switch (mode) {
+ case GL_CCW:
+ case GL_CW:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedEnable(int majorVersion, int minorVersion, GLenum cap) {
+ switch (cap) {
+ case GL_CULL_FACE:
+ case GL_POLYGON_OFFSET_FILL:
+ case GL_SAMPLE_ALPHA_TO_COVERAGE:
+ case GL_SAMPLE_COVERAGE:
+ case GL_SCISSOR_TEST:
+ case GL_STENCIL_TEST:
+ case GL_DEPTH_TEST:
+ case GL_BLEND:
+ case GL_DITHER:
+ return true;
+ case GL_PRIMITIVE_RESTART_FIXED_INDEX:
+ case GL_RASTERIZER_DISCARD:
+ return majorVersion >= 3;
+ case GL_SAMPLE_MASK:
+ return majorVersion >= 3 && minorVersion >= 1;
+ default:
+ return false;
+ }
+}
+
+bool allowedGetShader(GLenum pname) {
+ switch (pname) {
+ case GL_SHADER_TYPE:
+ case GL_DELETE_STATUS:
+ case GL_COMPILE_STATUS:
+ case GL_INFO_LOG_LENGTH:
+ case GL_SHADER_SOURCE_LENGTH:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedShaderType(GLenum shadertype) {
+ switch (shadertype) {
+ case GL_VERTEX_SHADER:
+ case GL_FRAGMENT_SHADER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedPrecisionType(GLenum precisiontype) {
+ switch (precisiontype) {
+ case GL_LOW_FLOAT:
+ case GL_MEDIUM_FLOAT:
+ case GL_HIGH_FLOAT:
+ case GL_LOW_INT:
+ case GL_MEDIUM_INT:
+ case GL_HIGH_INT:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedGetProgram(int majorVersion, int minorVersion, GLenum pname) {
+ switch (pname) {
+ case GL_DELETE_STATUS:
+ case GL_LINK_STATUS:
+ case GL_VALIDATE_STATUS:
+ case GL_INFO_LOG_LENGTH:
+ case GL_ATTACHED_SHADERS:
+ case GL_ACTIVE_ATTRIBUTES:
+ case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
+ case GL_ACTIVE_UNIFORMS:
+ case GL_ACTIVE_UNIFORM_MAX_LENGTH:
+ return true;
+ case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
+ case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
+ case GL_PROGRAM_BINARY_LENGTH:
+ case GL_TRANSFORM_FEEDBACK_VARYINGS:
+ case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
+ case GL_ACTIVE_UNIFORM_BLOCKS:
+ case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
+ return majorVersion > 2;
+ case GL_COMPUTE_WORK_GROUP_SIZE:
+ case GL_PROGRAM_SEPARABLE:
+ case GL_ACTIVE_ATOMIC_COUNTER_BUFFERS:
+ return majorVersion > 2 && minorVersion > 0;
+ default:
+ return false;
+ }
+}
+
+bool allowedGetActiveUniforms(GLenum pname) {
+ switch (pname) {
+ case GL_UNIFORM_TYPE:
+ case GL_UNIFORM_SIZE:
+ case GL_UNIFORM_NAME_LENGTH:
+ case GL_UNIFORM_BLOCK_INDEX:
+ case GL_UNIFORM_OFFSET:
+ case GL_UNIFORM_ARRAY_STRIDE:
+ case GL_UNIFORM_MATRIX_STRIDE:
+ case GL_UNIFORM_IS_ROW_MAJOR:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedGetActiveUniformBlock(GLenum pname) {
+ switch (pname) {
+ case GL_UNIFORM_BLOCK_BINDING:
+ case GL_UNIFORM_BLOCK_DATA_SIZE:
+ case GL_UNIFORM_BLOCK_NAME_LENGTH:
+ case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
+ case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
+ case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
+ case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedGetVertexAttrib(GLenum pname) {
+ switch (pname) {
+ case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
+ case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
+ case GL_VERTEX_ATTRIB_ARRAY_SIZE:
+ case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
+ case GL_VERTEX_ATTRIB_ARRAY_TYPE:
+ case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
+ case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
+ case GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
+ case GL_VERTEX_ATTRIB_BINDING:
+ case GL_VERTEX_ATTRIB_RELATIVE_OFFSET:
+ case GL_CURRENT_VERTEX_ATTRIB:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedGetRenderbufferParameter(GLenum pname) {
+ switch (pname) {
+ case GL_RENDERBUFFER_WIDTH:
+ case GL_RENDERBUFFER_HEIGHT:
+ case GL_RENDERBUFFER_INTERNAL_FORMAT:
+ case GL_RENDERBUFFER_RED_SIZE:
+ case GL_RENDERBUFFER_GREEN_SIZE:
+ case GL_RENDERBUFFER_BLUE_SIZE:
+ case GL_RENDERBUFFER_ALPHA_SIZE:
+ case GL_RENDERBUFFER_DEPTH_SIZE:
+ case GL_RENDERBUFFER_STENCIL_SIZE:
+ case GL_RENDERBUFFER_SAMPLES:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedQueryTarget(GLenum target) {
+ switch (target) {
+ case GL_ANY_SAMPLES_PASSED:
+ case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+ case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedQueryParam(GLenum pname) {
+ switch (pname) {
+ case GL_CURRENT_QUERY:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedQueryObjectParam(GLenum pname) {
+ switch (pname) {
+ case GL_QUERY_RESULT:
+ case GL_QUERY_RESULT_AVAILABLE:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedGetSyncParam(GLenum pname) {
+ switch (pname) {
+ case GL_OBJECT_TYPE:
+ case GL_SYNC_STATUS:
+ case GL_SYNC_CONDITION:
+ case GL_SYNC_FLAGS:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedHintTarget(GLenum target) {
+ switch (target) {
+ case GL_GENERATE_MIPMAP_HINT:
+ case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool allowedHintMode(GLenum mode) {
+ switch (mode) {
+ case GL_DONT_CARE:
+ case GL_NICEST:
+ case GL_FASTEST:
+ return true;
+ default:
+ return false;
+ }
+}
+
} // namespace GLESv2Validation
diff --git a/system/GLESv2_enc/GLESv2Validation.h b/system/GLESv2_enc/GLESv2Validation.h
index a37bd586..4ac57875 100644
--- a/system/GLESv2_enc/GLESv2Validation.h
+++ b/system/GLESv2_enc/GLESv2Validation.h
@@ -33,6 +33,7 @@ namespace GLESv2Validation {
extern GLbitfield allBufferMapAccessFlags;
bool bufferTarget(GL2Encoder* ctx, GLenum target);
bool bufferParam(GL2Encoder* ctx, GLenum param);
+bool bufferUsage(GL2Encoder* ctx, GLenum usage);
bool pixelStoreParam(GL2Encoder* ctx, GLenum param);
bool pixelStoreValue(GLenum param, GLint value);
@@ -44,6 +45,7 @@ bool framebufferAttachment(GL2Encoder* ctx, GLenum attachment);
bool readPixelsFormat(GLenum format);
bool readPixelsType(GLenum type);
+bool pixelOp(GLenum format, GLenum type);
bool vertexAttribType(GL2Encoder* ctx, GLenum type);
@@ -51,9 +53,11 @@ bool readPixelsFboFormatMatch(GLenum format, GLenum type, GLenum fboTexType);
bool blitFramebufferFormat(GLenum readFormat, GLenum drawFormat);
bool textureTarget(GL2Encoder* ctx, GLenum target);
+bool textureParams(GL2Encoder* ctx, GLenum pname);
+bool samplerParams(GL2Encoder* ctx, GLenum pname);
+bool textureParamValue(GL2Encoder* ctx, GLenum pname, GLint intval, GLfloat floatval, GLenum enumval);
-GLsizei compressedTexImageSize(GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
-
+bool isIntegerFormat(GLenum format);
bool isCompressedFormat(GLenum internalformat);
bool supportedCompressedFormat(GL2Encoder* ctx, GLenum internalformat);
@@ -70,6 +74,8 @@ bool pixelType(GL2Encoder* ctx, GLenum type);
bool pixelFormat(GL2Encoder* ctx, GLenum format);
bool pixelInternalFormat(GLenum internalformat);
+bool pixelSizedFormat(GL2Encoder* ctx, GLenum internalformat, GLenum format, GLenum type);
+void getCompatibleFormatTypeForInternalFormat(GLenum internalformat, GLenum* format_out, GLenum* type_out);
bool shaderType(GL2Encoder* ctx, GLenum type);
@@ -77,6 +83,40 @@ bool internalFormatTarget(GL2Encoder* ctx, GLenum target);
std::string vertexAttribIndexRangeErrorMsg(GL2Encoder* ctx, GLuint index);
+bool allowedFace(GLenum face);
+bool allowedFunc(GLenum func);
+bool allowedStencilOp(GLenum op);
+bool allowedBlendEquation(GLenum eq);
+bool allowedBlendFunc(GLenum func);
+
+bool allowedCullFace(GLenum mode);
+bool allowedFrontFace(GLenum mode);
+
+bool allowedEnable(int majorVersion, int minorVersion, GLenum mode);
+
+bool allowedGetShader(GLenum pname);
+
+bool allowedShaderType(GLenum shadertype);
+bool allowedPrecisionType(GLenum precisiontype);
+
+bool allowedGetProgram(int majorVersion, int minorVersion, GLenum pname);
+
+bool allowedGetActiveUniforms(GLenum pname) ;
+bool allowedGetActiveUniformBlock(GLenum pname) ;
+
+bool allowedGetVertexAttrib(GLenum pname) ;
+
+bool allowedGetRenderbufferParameter(GLenum pname);
+
+bool allowedQueryTarget(GLenum target);
+bool allowedQueryParam(GLenum pname);
+bool allowedQueryObjectParam(GLenum pname);
+
+bool allowedGetSyncParam(GLenum pname);
+
+bool allowedHintTarget(GLenum target);
+bool allowedHintMode(GLenum pname);
+
} // namespace GLESv2Validation
#endif
diff --git a/system/GLESv2_enc/gl2_enc.cpp b/system/GLESv2_enc/gl2_enc.cpp
index 814021bb..d59dbebf 100644
--- a/system/GLESv2_enc/gl2_enc.cpp
+++ b/system/GLESv2_enc/gl2_enc.cpp
@@ -12,6 +12,7 @@
#include <stdio.h>
+#include "android/base/Tracing.h"
namespace {
void enc_unsupported()
@@ -21,6 +22,7 @@ void enc_unsupported()
void glActiveTexture_enc(void *self , GLenum texture)
{
+ AEMU_SCOPED_TRACE("glActiveTexture encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -46,6 +48,7 @@ void glActiveTexture_enc(void *self , GLenum texture)
void glAttachShader_enc(void *self , GLuint program, GLuint shader)
{
+ AEMU_SCOPED_TRACE("glAttachShader encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -72,6 +75,7 @@ void glAttachShader_enc(void *self , GLuint program, GLuint shader)
void glBindAttribLocation_enc(void *self , GLuint program, GLuint index, const GLchar* name)
{
+ AEMU_SCOPED_TRACE("glBindAttribLocation encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -101,6 +105,7 @@ void glBindAttribLocation_enc(void *self , GLuint program, GLuint index, const G
void glBindBuffer_enc(void *self , GLenum target, GLuint buffer)
{
+ AEMU_SCOPED_TRACE("glBindBuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -127,6 +132,7 @@ void glBindBuffer_enc(void *self , GLenum target, GLuint buffer)
void glBindFramebuffer_enc(void *self , GLenum target, GLuint framebuffer)
{
+ AEMU_SCOPED_TRACE("glBindFramebuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -153,6 +159,7 @@ void glBindFramebuffer_enc(void *self , GLenum target, GLuint framebuffer)
void glBindRenderbuffer_enc(void *self , GLenum target, GLuint renderbuffer)
{
+ AEMU_SCOPED_TRACE("glBindRenderbuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -179,6 +186,7 @@ void glBindRenderbuffer_enc(void *self , GLenum target, GLuint renderbuffer)
void glBindTexture_enc(void *self , GLenum target, GLuint texture)
{
+ AEMU_SCOPED_TRACE("glBindTexture encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -205,6 +213,7 @@ void glBindTexture_enc(void *self , GLenum target, GLuint texture)
void glBlendColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
{
+ AEMU_SCOPED_TRACE("glBlendColor encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -233,6 +242,7 @@ void glBlendColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue,
void glBlendEquation_enc(void *self , GLenum mode)
{
+ AEMU_SCOPED_TRACE("glBlendEquation encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -258,6 +268,7 @@ void glBlendEquation_enc(void *self , GLenum mode)
void glBlendEquationSeparate_enc(void *self , GLenum modeRGB, GLenum modeAlpha)
{
+ AEMU_SCOPED_TRACE("glBlendEquationSeparate encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -284,6 +295,7 @@ void glBlendEquationSeparate_enc(void *self , GLenum modeRGB, GLenum modeAlpha)
void glBlendFunc_enc(void *self , GLenum sfactor, GLenum dfactor)
{
+ AEMU_SCOPED_TRACE("glBlendFunc encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -310,6 +322,7 @@ void glBlendFunc_enc(void *self , GLenum sfactor, GLenum dfactor)
void glBlendFuncSeparate_enc(void *self , GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
{
+ AEMU_SCOPED_TRACE("glBlendFuncSeparate encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -338,6 +351,7 @@ void glBlendFuncSeparate_enc(void *self , GLenum srcRGB, GLenum dstRGB, GLenum s
void glBufferData_enc(void *self , GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
{
+ AEMU_SCOPED_TRACE("glBufferData encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -378,6 +392,7 @@ void glBufferData_enc(void *self , GLenum target, GLsizeiptr size, const GLvoid*
void glBufferSubData_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glBufferSubData encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -414,6 +429,7 @@ void glBufferSubData_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr
GLenum glCheckFramebufferStatus_enc(void *self , GLenum target)
{
+ AEMU_SCOPED_TRACE("glCheckFramebufferStatus encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -454,6 +470,7 @@ GLenum glCheckFramebufferStatus_enc(void *self , GLenum target)
void glClear_enc(void *self , GLbitfield mask)
{
+ AEMU_SCOPED_TRACE("glClear encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -479,6 +496,7 @@ void glClear_enc(void *self , GLbitfield mask)
void glClearColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
{
+ AEMU_SCOPED_TRACE("glClearColor encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -507,6 +525,7 @@ void glClearColor_enc(void *self , GLclampf red, GLclampf green, GLclampf blue,
void glClearDepthf_enc(void *self , GLclampf depth)
{
+ AEMU_SCOPED_TRACE("glClearDepthf encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -532,6 +551,7 @@ void glClearDepthf_enc(void *self , GLclampf depth)
void glClearStencil_enc(void *self , GLint s)
{
+ AEMU_SCOPED_TRACE("glClearStencil encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -557,6 +577,7 @@ void glClearStencil_enc(void *self , GLint s)
void glColorMask_enc(void *self , GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
{
+ AEMU_SCOPED_TRACE("glColorMask encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -585,6 +606,7 @@ void glColorMask_enc(void *self , GLboolean red, GLboolean green, GLboolean blue
void glCompileShader_enc(void *self , GLuint shader)
{
+ AEMU_SCOPED_TRACE("glCompileShader encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -610,6 +632,7 @@ void glCompileShader_enc(void *self , GLuint shader)
void glCompressedTexImage2D_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glCompressedTexImage2D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -650,6 +673,7 @@ void glCompressedTexImage2D_enc(void *self , GLenum target, GLint level, GLenum
void glCompressedTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glCompressedTexSubImage2D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -691,6 +715,7 @@ void glCompressedTexSubImage2D_enc(void *self , GLenum target, GLint level, GLin
void glCopyTexImage2D_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
{
+ AEMU_SCOPED_TRACE("glCopyTexImage2D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -723,6 +748,7 @@ void glCopyTexImage2D_enc(void *self , GLenum target, GLint level, GLenum intern
void glCopyTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glCopyTexSubImage2D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -755,6 +781,7 @@ void glCopyTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoff
GLuint glCreateProgram_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glCreateProgram encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -794,6 +821,7 @@ GLuint glCreateProgram_enc(void *self )
GLuint glCreateShader_enc(void *self , GLenum type)
{
+ AEMU_SCOPED_TRACE("glCreateShader encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -834,6 +862,7 @@ GLuint glCreateShader_enc(void *self , GLenum type)
void glCullFace_enc(void *self , GLenum mode)
{
+ AEMU_SCOPED_TRACE("glCullFace encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -859,6 +888,7 @@ void glCullFace_enc(void *self , GLenum mode)
void glDeleteBuffers_enc(void *self , GLsizei n, const GLuint* buffers)
{
+ AEMU_SCOPED_TRACE("glDeleteBuffers encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -887,6 +917,7 @@ void glDeleteBuffers_enc(void *self , GLsizei n, const GLuint* buffers)
void glDeleteFramebuffers_enc(void *self , GLsizei n, const GLuint* framebuffers)
{
+ AEMU_SCOPED_TRACE("glDeleteFramebuffers encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -915,6 +946,7 @@ void glDeleteFramebuffers_enc(void *self , GLsizei n, const GLuint* framebuffers
void glDeleteProgram_enc(void *self , GLuint program)
{
+ AEMU_SCOPED_TRACE("glDeleteProgram encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -940,6 +972,7 @@ void glDeleteProgram_enc(void *self , GLuint program)
void glDeleteRenderbuffers_enc(void *self , GLsizei n, const GLuint* renderbuffers)
{
+ AEMU_SCOPED_TRACE("glDeleteRenderbuffers encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -968,6 +1001,7 @@ void glDeleteRenderbuffers_enc(void *self , GLsizei n, const GLuint* renderbuffe
void glDeleteShader_enc(void *self , GLuint shader)
{
+ AEMU_SCOPED_TRACE("glDeleteShader encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -993,6 +1027,7 @@ void glDeleteShader_enc(void *self , GLuint shader)
void glDeleteTextures_enc(void *self , GLsizei n, const GLuint* textures)
{
+ AEMU_SCOPED_TRACE("glDeleteTextures encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1021,6 +1056,7 @@ void glDeleteTextures_enc(void *self , GLsizei n, const GLuint* textures)
void glDepthFunc_enc(void *self , GLenum func)
{
+ AEMU_SCOPED_TRACE("glDepthFunc encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1046,6 +1082,7 @@ void glDepthFunc_enc(void *self , GLenum func)
void glDepthMask_enc(void *self , GLboolean flag)
{
+ AEMU_SCOPED_TRACE("glDepthMask encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1071,6 +1108,7 @@ void glDepthMask_enc(void *self , GLboolean flag)
void glDepthRangef_enc(void *self , GLclampf zNear, GLclampf zFar)
{
+ AEMU_SCOPED_TRACE("glDepthRangef encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1097,6 +1135,7 @@ void glDepthRangef_enc(void *self , GLclampf zNear, GLclampf zFar)
void glDetachShader_enc(void *self , GLuint program, GLuint shader)
{
+ AEMU_SCOPED_TRACE("glDetachShader encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1123,6 +1162,7 @@ void glDetachShader_enc(void *self , GLuint program, GLuint shader)
void glDisable_enc(void *self , GLenum cap)
{
+ AEMU_SCOPED_TRACE("glDisable encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1148,6 +1188,7 @@ void glDisable_enc(void *self , GLenum cap)
void glDisableVertexAttribArray_enc(void *self , GLuint index)
{
+ AEMU_SCOPED_TRACE("glDisableVertexAttribArray encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1173,6 +1214,7 @@ void glDisableVertexAttribArray_enc(void *self , GLuint index)
void glDrawArrays_enc(void *self , GLenum mode, GLint first, GLsizei count)
{
+ AEMU_SCOPED_TRACE("glDrawArrays encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1200,6 +1242,7 @@ void glDrawArrays_enc(void *self , GLenum mode, GLint first, GLsizei count)
void glEnable_enc(void *self , GLenum cap)
{
+ AEMU_SCOPED_TRACE("glEnable encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1225,6 +1268,7 @@ void glEnable_enc(void *self , GLenum cap)
void glEnableVertexAttribArray_enc(void *self , GLuint index)
{
+ AEMU_SCOPED_TRACE("glEnableVertexAttribArray encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1250,6 +1294,7 @@ void glEnableVertexAttribArray_enc(void *self , GLuint index)
void glFinish_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glFinish encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1274,6 +1319,7 @@ void glFinish_enc(void *self )
void glFlush_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glFlush encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1298,6 +1344,7 @@ void glFlush_enc(void *self )
void glFramebufferRenderbuffer_enc(void *self , GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
{
+ AEMU_SCOPED_TRACE("glFramebufferRenderbuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1326,6 +1373,7 @@ void glFramebufferRenderbuffer_enc(void *self , GLenum target, GLenum attachment
void glFramebufferTexture2D_enc(void *self , GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
{
+ AEMU_SCOPED_TRACE("glFramebufferTexture2D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1355,6 +1403,7 @@ void glFramebufferTexture2D_enc(void *self , GLenum target, GLenum attachment, G
void glFrontFace_enc(void *self , GLenum mode)
{
+ AEMU_SCOPED_TRACE("glFrontFace encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1380,6 +1429,7 @@ void glFrontFace_enc(void *self , GLenum mode)
void glGenBuffers_enc(void *self , GLsizei n, GLuint* buffers)
{
+ AEMU_SCOPED_TRACE("glGenBuffers encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1419,6 +1469,7 @@ void glGenBuffers_enc(void *self , GLsizei n, GLuint* buffers)
void glGenerateMipmap_enc(void *self , GLenum target)
{
+ AEMU_SCOPED_TRACE("glGenerateMipmap encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1444,6 +1495,7 @@ void glGenerateMipmap_enc(void *self , GLenum target)
void glGenFramebuffers_enc(void *self , GLsizei n, GLuint* framebuffers)
{
+ AEMU_SCOPED_TRACE("glGenFramebuffers encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1483,6 +1535,7 @@ void glGenFramebuffers_enc(void *self , GLsizei n, GLuint* framebuffers)
void glGenRenderbuffers_enc(void *self , GLsizei n, GLuint* renderbuffers)
{
+ AEMU_SCOPED_TRACE("glGenRenderbuffers encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1522,6 +1575,7 @@ void glGenRenderbuffers_enc(void *self , GLsizei n, GLuint* renderbuffers)
void glGenTextures_enc(void *self , GLsizei n, GLuint* textures)
{
+ AEMU_SCOPED_TRACE("glGenTextures encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1561,6 +1615,7 @@ void glGenTextures_enc(void *self , GLsizei n, GLuint* textures)
void glGetActiveAttrib_enc(void *self , GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
{
+ AEMU_SCOPED_TRACE("glGetActiveAttrib encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1622,6 +1677,7 @@ void glGetActiveAttrib_enc(void *self , GLuint program, GLuint index, GLsizei bu
void glGetActiveUniform_enc(void *self , GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
{
+ AEMU_SCOPED_TRACE("glGetActiveUniform encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1683,6 +1739,7 @@ void glGetActiveUniform_enc(void *self , GLuint program, GLuint index, GLsizei b
void glGetAttachedShaders_enc(void *self , GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
{
+ AEMU_SCOPED_TRACE("glGetAttachedShaders encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1729,6 +1786,7 @@ void glGetAttachedShaders_enc(void *self , GLuint program, GLsizei maxcount, GLs
int glGetAttribLocation_enc(void *self , GLuint program, const GLchar* name)
{
+ AEMU_SCOPED_TRACE("glGetAttribLocation encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1772,6 +1830,7 @@ int glGetAttribLocation_enc(void *self , GLuint program, const GLchar* name)
void glGetBooleanv_enc(void *self , GLenum pname, GLboolean* params)
{
+ AEMU_SCOPED_TRACE("glGetBooleanv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1811,6 +1870,7 @@ void glGetBooleanv_enc(void *self , GLenum pname, GLboolean* params)
void glGetBufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetBufferParameteriv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1851,6 +1911,7 @@ void glGetBufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint*
GLenum glGetError_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glGetError encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1890,6 +1951,7 @@ GLenum glGetError_enc(void *self )
void glGetFloatv_enc(void *self , GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetFloatv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1929,6 +1991,7 @@ void glGetFloatv_enc(void *self , GLenum pname, GLfloat* params)
void glGetFramebufferAttachmentParameteriv_enc(void *self , GLenum target, GLenum attachment, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetFramebufferAttachmentParameteriv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1970,6 +2033,7 @@ void glGetFramebufferAttachmentParameteriv_enc(void *self , GLenum target, GLenu
void glGetIntegerv_enc(void *self , GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetIntegerv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2009,6 +2073,7 @@ void glGetIntegerv_enc(void *self , GLenum pname, GLint* params)
void glGetProgramiv_enc(void *self , GLuint program, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetProgramiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2049,6 +2114,7 @@ void glGetProgramiv_enc(void *self , GLuint program, GLenum pname, GLint* params
void glGetProgramInfoLog_enc(void *self , GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
{
+ AEMU_SCOPED_TRACE("glGetProgramInfoLog encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2095,6 +2161,7 @@ void glGetProgramInfoLog_enc(void *self , GLuint program, GLsizei bufsize, GLsiz
void glGetRenderbufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetRenderbufferParameteriv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2135,6 +2202,7 @@ void glGetRenderbufferParameteriv_enc(void *self , GLenum target, GLenum pname,
void glGetShaderiv_enc(void *self , GLuint shader, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetShaderiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2175,6 +2243,7 @@ void glGetShaderiv_enc(void *self , GLuint shader, GLenum pname, GLint* params)
void glGetShaderInfoLog_enc(void *self , GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
{
+ AEMU_SCOPED_TRACE("glGetShaderInfoLog encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2221,6 +2290,7 @@ void glGetShaderInfoLog_enc(void *self , GLuint shader, GLsizei bufsize, GLsizei
void glGetShaderPrecisionFormat_enc(void *self , GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
{
+ AEMU_SCOPED_TRACE("glGetShaderPrecisionFormat encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2265,6 +2335,7 @@ void glGetShaderPrecisionFormat_enc(void *self , GLenum shadertype, GLenum preci
void glGetShaderSource_enc(void *self , GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
{
+ AEMU_SCOPED_TRACE("glGetShaderSource encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2311,6 +2382,7 @@ void glGetShaderSource_enc(void *self , GLuint shader, GLsizei bufsize, GLsizei*
void glGetTexParameterfv_enc(void *self , GLenum target, GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetTexParameterfv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2351,6 +2423,7 @@ void glGetTexParameterfv_enc(void *self , GLenum target, GLenum pname, GLfloat*
void glGetTexParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetTexParameteriv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2391,6 +2464,7 @@ void glGetTexParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* pa
void glGetUniformfv_enc(void *self , GLuint program, GLint location, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetUniformfv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2431,6 +2505,7 @@ void glGetUniformfv_enc(void *self , GLuint program, GLint location, GLfloat* pa
void glGetUniformiv_enc(void *self , GLuint program, GLint location, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetUniformiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2471,6 +2546,7 @@ void glGetUniformiv_enc(void *self , GLuint program, GLint location, GLint* para
int glGetUniformLocation_enc(void *self , GLuint program, const GLchar* name)
{
+ AEMU_SCOPED_TRACE("glGetUniformLocation encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2514,6 +2590,7 @@ int glGetUniformLocation_enc(void *self , GLuint program, const GLchar* name)
void glGetVertexAttribfv_enc(void *self , GLuint index, GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetVertexAttribfv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2554,6 +2631,7 @@ void glGetVertexAttribfv_enc(void *self , GLuint index, GLenum pname, GLfloat* p
void glGetVertexAttribiv_enc(void *self , GLuint index, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetVertexAttribiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2594,6 +2672,7 @@ void glGetVertexAttribiv_enc(void *self , GLuint index, GLenum pname, GLint* par
void glHint_enc(void *self , GLenum target, GLenum mode)
{
+ AEMU_SCOPED_TRACE("glHint encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2620,6 +2699,7 @@ void glHint_enc(void *self , GLenum target, GLenum mode)
GLboolean glIsBuffer_enc(void *self , GLuint buffer)
{
+ AEMU_SCOPED_TRACE("glIsBuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2660,6 +2740,7 @@ GLboolean glIsBuffer_enc(void *self , GLuint buffer)
GLboolean glIsEnabled_enc(void *self , GLenum cap)
{
+ AEMU_SCOPED_TRACE("glIsEnabled encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2700,6 +2781,7 @@ GLboolean glIsEnabled_enc(void *self , GLenum cap)
GLboolean glIsFramebuffer_enc(void *self , GLuint framebuffer)
{
+ AEMU_SCOPED_TRACE("glIsFramebuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2740,6 +2822,7 @@ GLboolean glIsFramebuffer_enc(void *self , GLuint framebuffer)
GLboolean glIsProgram_enc(void *self , GLuint program)
{
+ AEMU_SCOPED_TRACE("glIsProgram encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2780,6 +2863,7 @@ GLboolean glIsProgram_enc(void *self , GLuint program)
GLboolean glIsRenderbuffer_enc(void *self , GLuint renderbuffer)
{
+ AEMU_SCOPED_TRACE("glIsRenderbuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2820,6 +2904,7 @@ GLboolean glIsRenderbuffer_enc(void *self , GLuint renderbuffer)
GLboolean glIsShader_enc(void *self , GLuint shader)
{
+ AEMU_SCOPED_TRACE("glIsShader encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2860,6 +2945,7 @@ GLboolean glIsShader_enc(void *self , GLuint shader)
GLboolean glIsTexture_enc(void *self , GLuint texture)
{
+ AEMU_SCOPED_TRACE("glIsTexture encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2900,6 +2986,7 @@ GLboolean glIsTexture_enc(void *self , GLuint texture)
void glLineWidth_enc(void *self , GLfloat width)
{
+ AEMU_SCOPED_TRACE("glLineWidth encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2925,6 +3012,7 @@ void glLineWidth_enc(void *self , GLfloat width)
void glLinkProgram_enc(void *self , GLuint program)
{
+ AEMU_SCOPED_TRACE("glLinkProgram encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2950,6 +3038,7 @@ void glLinkProgram_enc(void *self , GLuint program)
void glPixelStorei_enc(void *self , GLenum pname, GLint param)
{
+ AEMU_SCOPED_TRACE("glPixelStorei encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -2976,6 +3065,7 @@ void glPixelStorei_enc(void *self , GLenum pname, GLint param)
void glPolygonOffset_enc(void *self , GLfloat factor, GLfloat units)
{
+ AEMU_SCOPED_TRACE("glPolygonOffset encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3002,6 +3092,7 @@ void glPolygonOffset_enc(void *self , GLfloat factor, GLfloat units)
void glReadPixels_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
{
+ AEMU_SCOPED_TRACE("glReadPixels encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3046,6 +3137,7 @@ void glReadPixels_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei heig
void glReleaseShaderCompiler_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glReleaseShaderCompiler encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3070,6 +3162,7 @@ void glReleaseShaderCompiler_enc(void *self )
void glRenderbufferStorage_enc(void *self , GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glRenderbufferStorage encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3098,6 +3191,7 @@ void glRenderbufferStorage_enc(void *self , GLenum target, GLenum internalformat
void glSampleCoverage_enc(void *self , GLclampf value, GLboolean invert)
{
+ AEMU_SCOPED_TRACE("glSampleCoverage encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3124,6 +3218,7 @@ void glSampleCoverage_enc(void *self , GLclampf value, GLboolean invert)
void glScissor_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glScissor encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3152,6 +3247,7 @@ void glScissor_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height)
void glStencilFunc_enc(void *self , GLenum func, GLint ref, GLuint mask)
{
+ AEMU_SCOPED_TRACE("glStencilFunc encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3179,6 +3275,7 @@ void glStencilFunc_enc(void *self , GLenum func, GLint ref, GLuint mask)
void glStencilFuncSeparate_enc(void *self , GLenum face, GLenum func, GLint ref, GLuint mask)
{
+ AEMU_SCOPED_TRACE("glStencilFuncSeparate encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3207,6 +3304,7 @@ void glStencilFuncSeparate_enc(void *self , GLenum face, GLenum func, GLint ref,
void glStencilMask_enc(void *self , GLuint mask)
{
+ AEMU_SCOPED_TRACE("glStencilMask encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3232,6 +3330,7 @@ void glStencilMask_enc(void *self , GLuint mask)
void glStencilMaskSeparate_enc(void *self , GLenum face, GLuint mask)
{
+ AEMU_SCOPED_TRACE("glStencilMaskSeparate encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3258,6 +3357,7 @@ void glStencilMaskSeparate_enc(void *self , GLenum face, GLuint mask)
void glStencilOp_enc(void *self , GLenum fail, GLenum zfail, GLenum zpass)
{
+ AEMU_SCOPED_TRACE("glStencilOp encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3285,6 +3385,7 @@ void glStencilOp_enc(void *self , GLenum fail, GLenum zfail, GLenum zpass)
void glStencilOpSeparate_enc(void *self , GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
{
+ AEMU_SCOPED_TRACE("glStencilOpSeparate encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3313,6 +3414,7 @@ void glStencilOpSeparate_enc(void *self , GLenum face, GLenum fail, GLenum zfail
void glTexImage2D_enc(void *self , GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
{
+ AEMU_SCOPED_TRACE("glTexImage2D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3354,6 +3456,7 @@ void glTexImage2D_enc(void *self , GLenum target, GLint level, GLint internalfor
void glTexParameterf_enc(void *self , GLenum target, GLenum pname, GLfloat param)
{
+ AEMU_SCOPED_TRACE("glTexParameterf encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3381,6 +3484,7 @@ void glTexParameterf_enc(void *self , GLenum target, GLenum pname, GLfloat param
void glTexParameterfv_enc(void *self , GLenum target, GLenum pname, const GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glTexParameterfv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3410,6 +3514,7 @@ void glTexParameterfv_enc(void *self , GLenum target, GLenum pname, const GLfloa
void glTexParameteri_enc(void *self , GLenum target, GLenum pname, GLint param)
{
+ AEMU_SCOPED_TRACE("glTexParameteri encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3437,6 +3542,7 @@ void glTexParameteri_enc(void *self , GLenum target, GLenum pname, GLint param)
void glTexParameteriv_enc(void *self , GLenum target, GLenum pname, const GLint* params)
{
+ AEMU_SCOPED_TRACE("glTexParameteriv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3466,6 +3572,7 @@ void glTexParameteriv_enc(void *self , GLenum target, GLenum pname, const GLint*
void glTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
{
+ AEMU_SCOPED_TRACE("glTexSubImage2D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3507,6 +3614,7 @@ void glTexSubImage2D_enc(void *self , GLenum target, GLint level, GLint xoffset,
void glUniform1f_enc(void *self , GLint location, GLfloat x)
{
+ AEMU_SCOPED_TRACE("glUniform1f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3533,6 +3641,7 @@ void glUniform1f_enc(void *self , GLint location, GLfloat x)
void glUniform1fv_enc(void *self , GLint location, GLsizei count, const GLfloat* v)
{
+ AEMU_SCOPED_TRACE("glUniform1fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3562,6 +3671,7 @@ void glUniform1fv_enc(void *self , GLint location, GLsizei count, const GLfloat*
void glUniform1i_enc(void *self , GLint location, GLint x)
{
+ AEMU_SCOPED_TRACE("glUniform1i encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3588,6 +3698,7 @@ void glUniform1i_enc(void *self , GLint location, GLint x)
void glUniform1iv_enc(void *self , GLint location, GLsizei count, const GLint* v)
{
+ AEMU_SCOPED_TRACE("glUniform1iv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3617,6 +3728,7 @@ void glUniform1iv_enc(void *self , GLint location, GLsizei count, const GLint* v
void glUniform2f_enc(void *self , GLint location, GLfloat x, GLfloat y)
{
+ AEMU_SCOPED_TRACE("glUniform2f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3644,6 +3756,7 @@ void glUniform2f_enc(void *self , GLint location, GLfloat x, GLfloat y)
void glUniform2fv_enc(void *self , GLint location, GLsizei count, const GLfloat* v)
{
+ AEMU_SCOPED_TRACE("glUniform2fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3673,6 +3786,7 @@ void glUniform2fv_enc(void *self , GLint location, GLsizei count, const GLfloat*
void glUniform2i_enc(void *self , GLint location, GLint x, GLint y)
{
+ AEMU_SCOPED_TRACE("glUniform2i encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3700,6 +3814,7 @@ void glUniform2i_enc(void *self , GLint location, GLint x, GLint y)
void glUniform2iv_enc(void *self , GLint location, GLsizei count, const GLint* v)
{
+ AEMU_SCOPED_TRACE("glUniform2iv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3729,6 +3844,7 @@ void glUniform2iv_enc(void *self , GLint location, GLsizei count, const GLint* v
void glUniform3f_enc(void *self , GLint location, GLfloat x, GLfloat y, GLfloat z)
{
+ AEMU_SCOPED_TRACE("glUniform3f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3757,6 +3873,7 @@ void glUniform3f_enc(void *self , GLint location, GLfloat x, GLfloat y, GLfloat
void glUniform3fv_enc(void *self , GLint location, GLsizei count, const GLfloat* v)
{
+ AEMU_SCOPED_TRACE("glUniform3fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3786,6 +3903,7 @@ void glUniform3fv_enc(void *self , GLint location, GLsizei count, const GLfloat*
void glUniform3i_enc(void *self , GLint location, GLint x, GLint y, GLint z)
{
+ AEMU_SCOPED_TRACE("glUniform3i encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3814,6 +3932,7 @@ void glUniform3i_enc(void *self , GLint location, GLint x, GLint y, GLint z)
void glUniform3iv_enc(void *self , GLint location, GLsizei count, const GLint* v)
{
+ AEMU_SCOPED_TRACE("glUniform3iv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3843,6 +3962,7 @@ void glUniform3iv_enc(void *self , GLint location, GLsizei count, const GLint* v
void glUniform4f_enc(void *self , GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
{
+ AEMU_SCOPED_TRACE("glUniform4f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3872,6 +3992,7 @@ void glUniform4f_enc(void *self , GLint location, GLfloat x, GLfloat y, GLfloat
void glUniform4fv_enc(void *self , GLint location, GLsizei count, const GLfloat* v)
{
+ AEMU_SCOPED_TRACE("glUniform4fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3901,6 +4022,7 @@ void glUniform4fv_enc(void *self , GLint location, GLsizei count, const GLfloat*
void glUniform4i_enc(void *self , GLint location, GLint x, GLint y, GLint z, GLint w)
{
+ AEMU_SCOPED_TRACE("glUniform4i encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3930,6 +4052,7 @@ void glUniform4i_enc(void *self , GLint location, GLint x, GLint y, GLint z, GLi
void glUniform4iv_enc(void *self , GLint location, GLsizei count, const GLint* v)
{
+ AEMU_SCOPED_TRACE("glUniform4iv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3959,6 +4082,7 @@ void glUniform4iv_enc(void *self , GLint location, GLsizei count, const GLint* v
void glUniformMatrix2fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glUniformMatrix2fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -3989,6 +4113,7 @@ void glUniformMatrix2fv_enc(void *self , GLint location, GLsizei count, GLboolea
void glUniformMatrix3fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glUniformMatrix3fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4019,6 +4144,7 @@ void glUniformMatrix3fv_enc(void *self , GLint location, GLsizei count, GLboolea
void glUniformMatrix4fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glUniformMatrix4fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4049,6 +4175,7 @@ void glUniformMatrix4fv_enc(void *self , GLint location, GLsizei count, GLboolea
void glUseProgram_enc(void *self , GLuint program)
{
+ AEMU_SCOPED_TRACE("glUseProgram encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4074,6 +4201,7 @@ void glUseProgram_enc(void *self , GLuint program)
void glValidateProgram_enc(void *self , GLuint program)
{
+ AEMU_SCOPED_TRACE("glValidateProgram encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4099,6 +4227,7 @@ void glValidateProgram_enc(void *self , GLuint program)
void glVertexAttrib1f_enc(void *self , GLuint indx, GLfloat x)
{
+ AEMU_SCOPED_TRACE("glVertexAttrib1f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4125,6 +4254,7 @@ void glVertexAttrib1f_enc(void *self , GLuint indx, GLfloat x)
void glVertexAttrib1fv_enc(void *self , GLuint indx, const GLfloat* values)
{
+ AEMU_SCOPED_TRACE("glVertexAttrib1fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4153,6 +4283,7 @@ void glVertexAttrib1fv_enc(void *self , GLuint indx, const GLfloat* values)
void glVertexAttrib2f_enc(void *self , GLuint indx, GLfloat x, GLfloat y)
{
+ AEMU_SCOPED_TRACE("glVertexAttrib2f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4180,6 +4311,7 @@ void glVertexAttrib2f_enc(void *self , GLuint indx, GLfloat x, GLfloat y)
void glVertexAttrib2fv_enc(void *self , GLuint indx, const GLfloat* values)
{
+ AEMU_SCOPED_TRACE("glVertexAttrib2fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4208,6 +4340,7 @@ void glVertexAttrib2fv_enc(void *self , GLuint indx, const GLfloat* values)
void glVertexAttrib3f_enc(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloat z)
{
+ AEMU_SCOPED_TRACE("glVertexAttrib3f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4236,6 +4369,7 @@ void glVertexAttrib3f_enc(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloa
void glVertexAttrib3fv_enc(void *self , GLuint indx, const GLfloat* values)
{
+ AEMU_SCOPED_TRACE("glVertexAttrib3fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4264,6 +4398,7 @@ void glVertexAttrib3fv_enc(void *self , GLuint indx, const GLfloat* values)
void glVertexAttrib4f_enc(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
{
+ AEMU_SCOPED_TRACE("glVertexAttrib4f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4293,6 +4428,7 @@ void glVertexAttrib4f_enc(void *self , GLuint indx, GLfloat x, GLfloat y, GLfloa
void glVertexAttrib4fv_enc(void *self , GLuint indx, const GLfloat* values)
{
+ AEMU_SCOPED_TRACE("glVertexAttrib4fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4321,6 +4457,7 @@ void glVertexAttrib4fv_enc(void *self , GLuint indx, const GLfloat* values)
void glViewport_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glViewport encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4349,6 +4486,7 @@ void glViewport_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height
void glEGLImageTargetTexture2DOES_enc(void *self , GLenum target, GLeglImageOES image)
{
+ AEMU_SCOPED_TRACE("glEGLImageTargetTexture2DOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4375,6 +4513,7 @@ void glEGLImageTargetTexture2DOES_enc(void *self , GLenum target, GLeglImageOES
void glEGLImageTargetRenderbufferStorageOES_enc(void *self , GLenum target, GLeglImageOES image)
{
+ AEMU_SCOPED_TRACE("glEGLImageTargetRenderbufferStorageOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4401,6 +4540,7 @@ void glEGLImageTargetRenderbufferStorageOES_enc(void *self , GLenum target, GLeg
GLboolean glUnmapBufferOES_enc(void *self , GLenum target)
{
+ AEMU_SCOPED_TRACE("glUnmapBufferOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4441,6 +4581,7 @@ GLboolean glUnmapBufferOES_enc(void *self , GLenum target)
void glTexImage3DOES_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
{
+ AEMU_SCOPED_TRACE("glTexImage3DOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4483,6 +4624,7 @@ void glTexImage3DOES_enc(void *self , GLenum target, GLint level, GLenum interna
void glTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels)
{
+ AEMU_SCOPED_TRACE("glTexSubImage3DOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4526,6 +4668,7 @@ void glTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint xoffs
void glCopyTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glCopyTexSubImage3DOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4559,6 +4702,7 @@ void glCopyTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint x
void glCompressedTexImage3DOES_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glCompressedTexImage3DOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4600,6 +4744,7 @@ void glCompressedTexImage3DOES_enc(void *self , GLenum target, GLint level, GLen
void glCompressedTexSubImage3DOES_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glCompressedTexSubImage3DOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4643,6 +4788,7 @@ void glCompressedTexSubImage3DOES_enc(void *self , GLenum target, GLint level, G
void glFramebufferTexture3DOES_enc(void *self , GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
{
+ AEMU_SCOPED_TRACE("glFramebufferTexture3DOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4673,6 +4819,7 @@ void glFramebufferTexture3DOES_enc(void *self , GLenum target, GLenum attachment
void glBindVertexArrayOES_enc(void *self , GLuint array)
{
+ AEMU_SCOPED_TRACE("glBindVertexArrayOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4698,6 +4845,7 @@ void glBindVertexArrayOES_enc(void *self , GLuint array)
void glDeleteVertexArraysOES_enc(void *self , GLsizei n, const GLuint* arrays)
{
+ AEMU_SCOPED_TRACE("glDeleteVertexArraysOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4726,6 +4874,7 @@ void glDeleteVertexArraysOES_enc(void *self , GLsizei n, const GLuint* arrays)
void glGenVertexArraysOES_enc(void *self , GLsizei n, GLuint* arrays)
{
+ AEMU_SCOPED_TRACE("glGenVertexArraysOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4765,6 +4914,7 @@ void glGenVertexArraysOES_enc(void *self , GLsizei n, GLuint* arrays)
GLboolean glIsVertexArrayOES_enc(void *self , GLuint array)
{
+ AEMU_SCOPED_TRACE("glIsVertexArrayOES encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4805,6 +4955,7 @@ GLboolean glIsVertexArrayOES_enc(void *self , GLuint array)
void glDiscardFramebufferEXT_enc(void *self , GLenum target, GLsizei numAttachments, const GLenum* attachments)
{
+ AEMU_SCOPED_TRACE("glDiscardFramebufferEXT encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4834,6 +4985,7 @@ void glDiscardFramebufferEXT_enc(void *self , GLenum target, GLsizei numAttachme
void glVertexAttribPointerData_enc(void *self , GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glVertexAttribPointerData encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4867,6 +5019,7 @@ void glVertexAttribPointerData_enc(void *self , GLuint indx, GLint size, GLenum
void glVertexAttribPointerOffset_enc(void *self , GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glVertexAttribPointerOffset encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4897,6 +5050,7 @@ void glVertexAttribPointerOffset_enc(void *self , GLuint indx, GLint size, GLenu
void glDrawElementsOffset_enc(void *self , GLenum mode, GLsizei count, GLenum type, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glDrawElementsOffset encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4925,6 +5079,7 @@ void glDrawElementsOffset_enc(void *self , GLenum mode, GLsizei count, GLenum ty
void glDrawElementsData_enc(void *self , GLenum mode, GLsizei count, GLenum type, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glDrawElementsData encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4956,6 +5111,7 @@ void glDrawElementsData_enc(void *self , GLenum mode, GLsizei count, GLenum type
void glGetCompressedTextureFormats_enc(void *self , int count, GLint* formats)
{
+ AEMU_SCOPED_TRACE("glGetCompressedTextureFormats encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -4995,6 +5151,7 @@ void glGetCompressedTextureFormats_enc(void *self , int count, GLint* formats)
void glShaderString_enc(void *self , GLuint shader, const GLchar* string, GLsizei len)
{
+ AEMU_SCOPED_TRACE("glShaderString encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5024,6 +5181,7 @@ void glShaderString_enc(void *self , GLuint shader, const GLchar* string, GLsize
int glFinishRoundTrip_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glFinishRoundTrip encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5063,6 +5221,7 @@ int glFinishRoundTrip_enc(void *self )
void glGenVertexArrays_enc(void *self , GLsizei n, GLuint* arrays)
{
+ AEMU_SCOPED_TRACE("glGenVertexArrays encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5102,6 +5261,7 @@ void glGenVertexArrays_enc(void *self , GLsizei n, GLuint* arrays)
void glBindVertexArray_enc(void *self , GLuint array)
{
+ AEMU_SCOPED_TRACE("glBindVertexArray encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5127,6 +5287,7 @@ void glBindVertexArray_enc(void *self , GLuint array)
void glDeleteVertexArrays_enc(void *self , GLsizei n, const GLuint* arrays)
{
+ AEMU_SCOPED_TRACE("glDeleteVertexArrays encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5155,6 +5316,7 @@ void glDeleteVertexArrays_enc(void *self , GLsizei n, const GLuint* arrays)
GLboolean glIsVertexArray_enc(void *self , GLuint array)
{
+ AEMU_SCOPED_TRACE("glIsVertexArray encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5195,6 +5357,7 @@ GLboolean glIsVertexArray_enc(void *self , GLuint array)
void glMapBufferRangeAEMU_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* mapped)
{
+ AEMU_SCOPED_TRACE("glMapBufferRangeAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5239,6 +5402,7 @@ void glMapBufferRangeAEMU_enc(void *self , GLenum target, GLintptr offset, GLsiz
void glUnmapBufferAEMU_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer, GLboolean* out_res)
{
+ AEMU_SCOPED_TRACE("glUnmapBufferAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5284,6 +5448,7 @@ void glUnmapBufferAEMU_enc(void *self , GLenum target, GLintptr offset, GLsizeip
void glFlushMappedBufferRangeAEMU_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer)
{
+ AEMU_SCOPED_TRACE("glFlushMappedBufferRangeAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5315,6 +5480,7 @@ void glFlushMappedBufferRangeAEMU_enc(void *self , GLenum target, GLintptr offse
void glReadPixelsOffsetAEMU_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glReadPixelsOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5346,6 +5512,7 @@ void glReadPixelsOffsetAEMU_enc(void *self , GLint x, GLint y, GLsizei width, GL
void glCompressedTexImage2DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glCompressedTexImage2DOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5378,6 +5545,7 @@ void glCompressedTexImage2DOffsetAEMU_enc(void *self , GLenum target, GLint leve
void glCompressedTexSubImage2DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glCompressedTexSubImage2DOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5411,6 +5579,7 @@ void glCompressedTexSubImage2DOffsetAEMU_enc(void *self , GLenum target, GLint l
void glTexImage2DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glTexImage2DOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5444,6 +5613,7 @@ void glTexImage2DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLint i
void glTexSubImage2DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glTexSubImage2DOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5477,6 +5647,7 @@ void glTexSubImage2DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLin
void glBindBufferRange_enc(void *self , GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
{
+ AEMU_SCOPED_TRACE("glBindBufferRange encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5506,6 +5677,7 @@ void glBindBufferRange_enc(void *self , GLenum target, GLuint index, GLuint buff
void glBindBufferBase_enc(void *self , GLenum target, GLuint index, GLuint buffer)
{
+ AEMU_SCOPED_TRACE("glBindBufferBase encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5533,6 +5705,7 @@ void glBindBufferBase_enc(void *self , GLenum target, GLuint index, GLuint buffe
void glCopyBufferSubData_enc(void *self , GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size)
{
+ AEMU_SCOPED_TRACE("glCopyBufferSubData encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5563,6 +5736,7 @@ void glCopyBufferSubData_enc(void *self , GLenum readtarget, GLenum writetarget,
void glClearBufferiv_enc(void *self , GLenum buffer, GLint drawBuffer, const GLint* value)
{
+ AEMU_SCOPED_TRACE("glClearBufferiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5592,6 +5766,7 @@ void glClearBufferiv_enc(void *self , GLenum buffer, GLint drawBuffer, const GLi
void glClearBufferuiv_enc(void *self , GLenum buffer, GLint drawBuffer, const GLuint* value)
{
+ AEMU_SCOPED_TRACE("glClearBufferuiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5621,6 +5796,7 @@ void glClearBufferuiv_enc(void *self , GLenum buffer, GLint drawBuffer, const GL
void glClearBufferfv_enc(void *self , GLenum buffer, GLint drawBuffer, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glClearBufferfv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5650,6 +5826,7 @@ void glClearBufferfv_enc(void *self , GLenum buffer, GLint drawBuffer, const GLf
void glClearBufferfi_enc(void *self , GLenum buffer, GLint drawBuffer, GLfloat depth, GLint stencil)
{
+ AEMU_SCOPED_TRACE("glClearBufferfi encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5678,6 +5855,7 @@ void glClearBufferfi_enc(void *self , GLenum buffer, GLint drawBuffer, GLfloat d
void glUniformBlockBinding_enc(void *self , GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
{
+ AEMU_SCOPED_TRACE("glUniformBlockBinding encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5705,6 +5883,7 @@ void glUniformBlockBinding_enc(void *self , GLuint program, GLuint uniformBlockI
GLuint glGetUniformBlockIndex_enc(void *self , GLuint program, const GLchar* uniformBlockName)
{
+ AEMU_SCOPED_TRACE("glGetUniformBlockIndex encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5748,6 +5927,7 @@ GLuint glGetUniformBlockIndex_enc(void *self , GLuint program, const GLchar* uni
void glGetUniformIndicesAEMU_enc(void *self , GLuint program, GLsizei uniformCount, const GLchar* packedUniformNames, GLsizei packedLen, GLuint* uniformIndices)
{
+ AEMU_SCOPED_TRACE("glGetUniformIndicesAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5792,6 +5972,7 @@ void glGetUniformIndicesAEMU_enc(void *self , GLuint program, GLsizei uniformCou
void glGetActiveUniformBlockiv_enc(void *self , GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetActiveUniformBlockiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5833,6 +6014,7 @@ void glGetActiveUniformBlockiv_enc(void *self , GLuint program, GLuint uniformBl
void glGetActiveUniformBlockName_enc(void *self , GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
{
+ AEMU_SCOPED_TRACE("glGetActiveUniformBlockName encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5882,6 +6064,7 @@ void glGetActiveUniformBlockName_enc(void *self , GLuint program, GLuint uniform
void glUniform1ui_enc(void *self , GLint location, GLuint v0)
{
+ AEMU_SCOPED_TRACE("glUniform1ui encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5908,6 +6091,7 @@ void glUniform1ui_enc(void *self , GLint location, GLuint v0)
void glUniform2ui_enc(void *self , GLint location, GLuint v0, GLuint v1)
{
+ AEMU_SCOPED_TRACE("glUniform2ui encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5935,6 +6119,7 @@ void glUniform2ui_enc(void *self , GLint location, GLuint v0, GLuint v1)
void glUniform3ui_enc(void *self , GLint location, GLuint v0, GLuint v1, GLuint v2)
{
+ AEMU_SCOPED_TRACE("glUniform3ui encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5963,6 +6148,7 @@ void glUniform3ui_enc(void *self , GLint location, GLuint v0, GLuint v1, GLuint
void glUniform4ui_enc(void *self , GLint location, GLint v0, GLuint v1, GLuint v2, GLuint v3)
{
+ AEMU_SCOPED_TRACE("glUniform4ui encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -5992,6 +6178,7 @@ void glUniform4ui_enc(void *self , GLint location, GLint v0, GLuint v1, GLuint v
void glUniform1uiv_enc(void *self , GLint location, GLsizei count, const GLuint* value)
{
+ AEMU_SCOPED_TRACE("glUniform1uiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6021,6 +6208,7 @@ void glUniform1uiv_enc(void *self , GLint location, GLsizei count, const GLuint*
void glUniform2uiv_enc(void *self , GLint location, GLsizei count, const GLuint* value)
{
+ AEMU_SCOPED_TRACE("glUniform2uiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6050,6 +6238,7 @@ void glUniform2uiv_enc(void *self , GLint location, GLsizei count, const GLuint*
void glUniform3uiv_enc(void *self , GLint location, GLsizei count, const GLuint* value)
{
+ AEMU_SCOPED_TRACE("glUniform3uiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6079,6 +6268,7 @@ void glUniform3uiv_enc(void *self , GLint location, GLsizei count, const GLuint*
void glUniform4uiv_enc(void *self , GLint location, GLsizei count, const GLuint* value)
{
+ AEMU_SCOPED_TRACE("glUniform4uiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6108,6 +6298,7 @@ void glUniform4uiv_enc(void *self , GLint location, GLsizei count, const GLuint*
void glUniformMatrix2x3fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glUniformMatrix2x3fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6138,6 +6329,7 @@ void glUniformMatrix2x3fv_enc(void *self , GLint location, GLsizei count, GLbool
void glUniformMatrix3x2fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glUniformMatrix3x2fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6168,6 +6360,7 @@ void glUniformMatrix3x2fv_enc(void *self , GLint location, GLsizei count, GLbool
void glUniformMatrix2x4fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glUniformMatrix2x4fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6198,6 +6391,7 @@ void glUniformMatrix2x4fv_enc(void *self , GLint location, GLsizei count, GLbool
void glUniformMatrix4x2fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glUniformMatrix4x2fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6228,6 +6422,7 @@ void glUniformMatrix4x2fv_enc(void *self , GLint location, GLsizei count, GLbool
void glUniformMatrix3x4fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glUniformMatrix3x4fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6258,6 +6453,7 @@ void glUniformMatrix3x4fv_enc(void *self , GLint location, GLsizei count, GLbool
void glUniformMatrix4x3fv_enc(void *self , GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glUniformMatrix4x3fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6288,6 +6484,7 @@ void glUniformMatrix4x3fv_enc(void *self , GLint location, GLsizei count, GLbool
void glGetUniformuiv_enc(void *self , GLuint program, GLint location, GLuint* params)
{
+ AEMU_SCOPED_TRACE("glGetUniformuiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6328,6 +6525,7 @@ void glGetUniformuiv_enc(void *self , GLuint program, GLint location, GLuint* pa
void glGetActiveUniformsiv_enc(void *self , GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetActiveUniformsiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6372,6 +6570,7 @@ void glGetActiveUniformsiv_enc(void *self , GLuint program, GLsizei uniformCount
void glVertexAttribI4i_enc(void *self , GLuint index, GLint v0, GLint v1, GLint v2, GLint v3)
{
+ AEMU_SCOPED_TRACE("glVertexAttribI4i encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6401,6 +6600,7 @@ void glVertexAttribI4i_enc(void *self , GLuint index, GLint v0, GLint v1, GLint
void glVertexAttribI4ui_enc(void *self , GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
{
+ AEMU_SCOPED_TRACE("glVertexAttribI4ui encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6430,6 +6630,7 @@ void glVertexAttribI4ui_enc(void *self , GLuint index, GLuint v0, GLuint v1, GLu
void glVertexAttribI4iv_enc(void *self , GLuint index, const GLint* v)
{
+ AEMU_SCOPED_TRACE("glVertexAttribI4iv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6458,6 +6659,7 @@ void glVertexAttribI4iv_enc(void *self , GLuint index, const GLint* v)
void glVertexAttribI4uiv_enc(void *self , GLuint index, const GLuint* v)
{
+ AEMU_SCOPED_TRACE("glVertexAttribI4uiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6486,6 +6688,7 @@ void glVertexAttribI4uiv_enc(void *self , GLuint index, const GLuint* v)
void glVertexAttribIPointerOffsetAEMU_enc(void *self , GLuint index, GLint size, GLenum type, GLsizei stride, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glVertexAttribIPointerOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6515,6 +6718,7 @@ void glVertexAttribIPointerOffsetAEMU_enc(void *self , GLuint index, GLint size,
void glVertexAttribIPointerDataAEMU_enc(void *self , GLuint index, GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glVertexAttribIPointerDataAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6547,6 +6751,7 @@ void glVertexAttribIPointerDataAEMU_enc(void *self , GLuint index, GLint size, G
void glGetVertexAttribIiv_enc(void *self , GLuint index, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetVertexAttribIiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6587,6 +6792,7 @@ void glGetVertexAttribIiv_enc(void *self , GLuint index, GLenum pname, GLint* pa
void glGetVertexAttribIuiv_enc(void *self , GLuint index, GLenum pname, GLuint* params)
{
+ AEMU_SCOPED_TRACE("glGetVertexAttribIuiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6627,6 +6833,7 @@ void glGetVertexAttribIuiv_enc(void *self , GLuint index, GLenum pname, GLuint*
void glVertexAttribDivisor_enc(void *self , GLuint index, GLuint divisor)
{
+ AEMU_SCOPED_TRACE("glVertexAttribDivisor encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6653,6 +6860,7 @@ void glVertexAttribDivisor_enc(void *self , GLuint index, GLuint divisor)
void glDrawArraysInstanced_enc(void *self , GLenum mode, GLint first, GLsizei count, GLsizei primcount)
{
+ AEMU_SCOPED_TRACE("glDrawArraysInstanced encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6681,6 +6889,7 @@ void glDrawArraysInstanced_enc(void *self , GLenum mode, GLint first, GLsizei co
void glDrawElementsInstancedDataAEMU_enc(void *self , GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount, GLsizei datalen)
{
+ AEMU_SCOPED_TRACE("glDrawElementsInstancedDataAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6713,6 +6922,7 @@ void glDrawElementsInstancedDataAEMU_enc(void *self , GLenum mode, GLsizei count
void glDrawElementsInstancedOffsetAEMU_enc(void *self , GLenum mode, GLsizei count, GLenum type, GLuint offset, GLsizei primcount)
{
+ AEMU_SCOPED_TRACE("glDrawElementsInstancedOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6742,6 +6952,7 @@ void glDrawElementsInstancedOffsetAEMU_enc(void *self , GLenum mode, GLsizei cou
void glDrawRangeElementsDataAEMU_enc(void *self , GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices, GLsizei datalen)
{
+ AEMU_SCOPED_TRACE("glDrawRangeElementsDataAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6775,6 +6986,7 @@ void glDrawRangeElementsDataAEMU_enc(void *self , GLenum mode, GLuint start, GLu
void glDrawRangeElementsOffsetAEMU_enc(void *self , GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glDrawRangeElementsOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6805,6 +7017,7 @@ void glDrawRangeElementsOffsetAEMU_enc(void *self , GLenum mode, GLuint start, G
uint64_t glFenceSyncAEMU_enc(void *self , GLenum condition, GLbitfield flags)
{
+ AEMU_SCOPED_TRACE("glFenceSyncAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6846,6 +7059,7 @@ uint64_t glFenceSyncAEMU_enc(void *self , GLenum condition, GLbitfield flags)
GLenum glClientWaitSyncAEMU_enc(void *self , uint64_t wait_on, GLbitfield flags, GLuint64 timeout)
{
+ AEMU_SCOPED_TRACE("glClientWaitSyncAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6888,6 +7102,7 @@ GLenum glClientWaitSyncAEMU_enc(void *self , uint64_t wait_on, GLbitfield flags,
void glWaitSyncAEMU_enc(void *self , uint64_t wait_on, GLbitfield flags, GLuint64 timeout)
{
+ AEMU_SCOPED_TRACE("glWaitSyncAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6915,6 +7130,7 @@ void glWaitSyncAEMU_enc(void *self , uint64_t wait_on, GLbitfield flags, GLuint6
void glDeleteSyncAEMU_enc(void *self , uint64_t to_delete)
{
+ AEMU_SCOPED_TRACE("glDeleteSyncAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6940,6 +7156,7 @@ void glDeleteSyncAEMU_enc(void *self , uint64_t to_delete)
GLboolean glIsSyncAEMU_enc(void *self , uint64_t sync)
{
+ AEMU_SCOPED_TRACE("glIsSyncAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -6980,6 +7197,7 @@ GLboolean glIsSyncAEMU_enc(void *self , uint64_t sync)
void glGetSyncivAEMU_enc(void *self , uint64_t sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
{
+ AEMU_SCOPED_TRACE("glGetSyncivAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7027,6 +7245,7 @@ void glGetSyncivAEMU_enc(void *self , uint64_t sync, GLenum pname, GLsizei bufSi
void glDrawBuffers_enc(void *self , GLsizei n, const GLenum* bufs)
{
+ AEMU_SCOPED_TRACE("glDrawBuffers encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7055,6 +7274,7 @@ void glDrawBuffers_enc(void *self , GLsizei n, const GLenum* bufs)
void glReadBuffer_enc(void *self , GLenum src)
{
+ AEMU_SCOPED_TRACE("glReadBuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7080,6 +7300,7 @@ void glReadBuffer_enc(void *self , GLenum src)
void glBlitFramebuffer_enc(void *self , GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
{
+ AEMU_SCOPED_TRACE("glBlitFramebuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7114,6 +7335,7 @@ void glBlitFramebuffer_enc(void *self , GLint srcX0, GLint srcY0, GLint srcX1, G
void glInvalidateFramebuffer_enc(void *self , GLenum target, GLsizei numAttachments, const GLenum* attachments)
{
+ AEMU_SCOPED_TRACE("glInvalidateFramebuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7143,6 +7365,7 @@ void glInvalidateFramebuffer_enc(void *self , GLenum target, GLsizei numAttachme
void glInvalidateSubFramebuffer_enc(void *self , GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glInvalidateSubFramebuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7176,6 +7399,7 @@ void glInvalidateSubFramebuffer_enc(void *self , GLenum target, GLsizei numAttac
void glFramebufferTextureLayer_enc(void *self , GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
{
+ AEMU_SCOPED_TRACE("glFramebufferTextureLayer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7205,6 +7429,7 @@ void glFramebufferTextureLayer_enc(void *self , GLenum target, GLenum attachment
void glRenderbufferStorageMultisample_enc(void *self , GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glRenderbufferStorageMultisample encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7234,6 +7459,7 @@ void glRenderbufferStorageMultisample_enc(void *self , GLenum target, GLsizei sa
void glTexStorage2D_enc(void *self , GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glTexStorage2D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7263,6 +7489,7 @@ void glTexStorage2D_enc(void *self , GLenum target, GLsizei levels, GLenum inter
void glGetInternalformativ_enc(void *self , GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetInternalformativ encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7305,6 +7532,7 @@ void glGetInternalformativ_enc(void *self , GLenum target, GLenum internalformat
void glBeginTransformFeedback_enc(void *self , GLenum primitiveMode)
{
+ AEMU_SCOPED_TRACE("glBeginTransformFeedback encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7330,6 +7558,7 @@ void glBeginTransformFeedback_enc(void *self , GLenum primitiveMode)
void glEndTransformFeedback_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glEndTransformFeedback encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7354,6 +7583,7 @@ void glEndTransformFeedback_enc(void *self )
void glGenTransformFeedbacks_enc(void *self , GLsizei n, GLuint* ids)
{
+ AEMU_SCOPED_TRACE("glGenTransformFeedbacks encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7393,6 +7623,7 @@ void glGenTransformFeedbacks_enc(void *self , GLsizei n, GLuint* ids)
void glDeleteTransformFeedbacks_enc(void *self , GLsizei n, const GLuint* ids)
{
+ AEMU_SCOPED_TRACE("glDeleteTransformFeedbacks encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7421,6 +7652,7 @@ void glDeleteTransformFeedbacks_enc(void *self , GLsizei n, const GLuint* ids)
void glBindTransformFeedback_enc(void *self , GLenum target, GLuint id)
{
+ AEMU_SCOPED_TRACE("glBindTransformFeedback encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7447,6 +7679,7 @@ void glBindTransformFeedback_enc(void *self , GLenum target, GLuint id)
void glPauseTransformFeedback_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glPauseTransformFeedback encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7471,6 +7704,7 @@ void glPauseTransformFeedback_enc(void *self )
void glResumeTransformFeedback_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glResumeTransformFeedback encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7495,6 +7729,7 @@ void glResumeTransformFeedback_enc(void *self )
GLboolean glIsTransformFeedback_enc(void *self , GLuint id)
{
+ AEMU_SCOPED_TRACE("glIsTransformFeedback encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7535,6 +7770,7 @@ GLboolean glIsTransformFeedback_enc(void *self , GLuint id)
void glTransformFeedbackVaryingsAEMU_enc(void *self , GLuint program, GLsizei count, const char* packedVaryings, GLuint packedVaryingsLen, GLenum bufferMode)
{
+ AEMU_SCOPED_TRACE("glTransformFeedbackVaryingsAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7566,6 +7802,7 @@ void glTransformFeedbackVaryingsAEMU_enc(void *self , GLuint program, GLsizei co
void glGetTransformFeedbackVarying_enc(void *self , GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, char* name)
{
+ AEMU_SCOPED_TRACE("glGetTransformFeedbackVarying encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7625,6 +7862,7 @@ void glGetTransformFeedbackVarying_enc(void *self , GLuint program, GLuint index
void glGenSamplers_enc(void *self , GLsizei n, GLuint* samplers)
{
+ AEMU_SCOPED_TRACE("glGenSamplers encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7664,6 +7902,7 @@ void glGenSamplers_enc(void *self , GLsizei n, GLuint* samplers)
void glDeleteSamplers_enc(void *self , GLsizei n, const GLuint* samplers)
{
+ AEMU_SCOPED_TRACE("glDeleteSamplers encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7692,6 +7931,7 @@ void glDeleteSamplers_enc(void *self , GLsizei n, const GLuint* samplers)
void glBindSampler_enc(void *self , GLuint unit, GLuint sampler)
{
+ AEMU_SCOPED_TRACE("glBindSampler encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7718,6 +7958,7 @@ void glBindSampler_enc(void *self , GLuint unit, GLuint sampler)
void glSamplerParameterf_enc(void *self , GLuint sampler, GLenum pname, GLfloat param)
{
+ AEMU_SCOPED_TRACE("glSamplerParameterf encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7745,6 +7986,7 @@ void glSamplerParameterf_enc(void *self , GLuint sampler, GLenum pname, GLfloat
void glSamplerParameteri_enc(void *self , GLuint sampler, GLenum pname, GLint param)
{
+ AEMU_SCOPED_TRACE("glSamplerParameteri encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7772,6 +8014,7 @@ void glSamplerParameteri_enc(void *self , GLuint sampler, GLenum pname, GLint pa
void glSamplerParameterfv_enc(void *self , GLuint sampler, GLenum pname, const GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glSamplerParameterfv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7801,6 +8044,7 @@ void glSamplerParameterfv_enc(void *self , GLuint sampler, GLenum pname, const G
void glSamplerParameteriv_enc(void *self , GLuint sampler, GLenum pname, const GLint* params)
{
+ AEMU_SCOPED_TRACE("glSamplerParameteriv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7830,6 +8074,7 @@ void glSamplerParameteriv_enc(void *self , GLuint sampler, GLenum pname, const G
void glGetSamplerParameterfv_enc(void *self , GLuint sampler, GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetSamplerParameterfv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7870,6 +8115,7 @@ void glGetSamplerParameterfv_enc(void *self , GLuint sampler, GLenum pname, GLfl
void glGetSamplerParameteriv_enc(void *self , GLuint sampler, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetSamplerParameteriv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7910,6 +8156,7 @@ void glGetSamplerParameteriv_enc(void *self , GLuint sampler, GLenum pname, GLin
GLboolean glIsSampler_enc(void *self , GLuint sampler)
{
+ AEMU_SCOPED_TRACE("glIsSampler encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7950,6 +8197,7 @@ GLboolean glIsSampler_enc(void *self , GLuint sampler)
void glGenQueries_enc(void *self , GLsizei n, GLuint* queries)
{
+ AEMU_SCOPED_TRACE("glGenQueries encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -7989,6 +8237,7 @@ void glGenQueries_enc(void *self , GLsizei n, GLuint* queries)
void glDeleteQueries_enc(void *self , GLsizei n, const GLuint* queries)
{
+ AEMU_SCOPED_TRACE("glDeleteQueries encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8017,6 +8266,7 @@ void glDeleteQueries_enc(void *self , GLsizei n, const GLuint* queries)
void glBeginQuery_enc(void *self , GLenum target, GLuint query)
{
+ AEMU_SCOPED_TRACE("glBeginQuery encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8043,6 +8293,7 @@ void glBeginQuery_enc(void *self , GLenum target, GLuint query)
void glEndQuery_enc(void *self , GLenum target)
{
+ AEMU_SCOPED_TRACE("glEndQuery encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8068,6 +8319,7 @@ void glEndQuery_enc(void *self , GLenum target)
void glGetQueryiv_enc(void *self , GLenum target, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetQueryiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8108,6 +8360,7 @@ void glGetQueryiv_enc(void *self , GLenum target, GLenum pname, GLint* params)
void glGetQueryObjectuiv_enc(void *self , GLuint query, GLenum pname, GLuint* params)
{
+ AEMU_SCOPED_TRACE("glGetQueryObjectuiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8148,6 +8401,7 @@ void glGetQueryObjectuiv_enc(void *self , GLuint query, GLenum pname, GLuint* pa
GLboolean glIsQuery_enc(void *self , GLuint query)
{
+ AEMU_SCOPED_TRACE("glIsQuery encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8188,6 +8442,7 @@ GLboolean glIsQuery_enc(void *self , GLuint query)
void glProgramParameteri_enc(void *self , GLuint program, GLenum pname, GLint value)
{
+ AEMU_SCOPED_TRACE("glProgramParameteri encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8215,6 +8470,7 @@ void glProgramParameteri_enc(void *self , GLuint program, GLenum pname, GLint va
void glProgramBinary_enc(void *self , GLuint program, GLenum binaryFormat, const void* binary, GLsizei length)
{
+ AEMU_SCOPED_TRACE("glProgramBinary encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8245,6 +8501,7 @@ void glProgramBinary_enc(void *self , GLuint program, GLenum binaryFormat, const
void glGetProgramBinary_enc(void *self , GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, void* binary)
{
+ AEMU_SCOPED_TRACE("glGetProgramBinary encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8295,6 +8552,7 @@ void glGetProgramBinary_enc(void *self , GLuint program, GLsizei bufSize, GLsize
GLint glGetFragDataLocation_enc(void *self , GLuint program, const char* name)
{
+ AEMU_SCOPED_TRACE("glGetFragDataLocation encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8338,6 +8596,7 @@ GLint glGetFragDataLocation_enc(void *self , GLuint program, const char* name)
void glGetInteger64v_enc(void *self , GLenum pname, GLint64* data)
{
+ AEMU_SCOPED_TRACE("glGetInteger64v encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8377,6 +8636,7 @@ void glGetInteger64v_enc(void *self , GLenum pname, GLint64* data)
void glGetIntegeri_v_enc(void *self , GLenum target, GLuint index, GLint* data)
{
+ AEMU_SCOPED_TRACE("glGetIntegeri_v encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8417,6 +8677,7 @@ void glGetIntegeri_v_enc(void *self , GLenum target, GLuint index, GLint* data)
void glGetInteger64i_v_enc(void *self , GLenum target, GLuint index, GLint64* data)
{
+ AEMU_SCOPED_TRACE("glGetInteger64i_v encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8457,6 +8718,7 @@ void glGetInteger64i_v_enc(void *self , GLenum target, GLuint index, GLint64* da
void glTexImage3D_enc(void *self , GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glTexImage3D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8499,6 +8761,7 @@ void glTexImage3D_enc(void *self , GLenum target, GLint level, GLint internalFor
void glTexImage3DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glTexImage3DOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8533,6 +8796,7 @@ void glTexImage3DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLint i
void glTexStorage3D_enc(void *self , GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
{
+ AEMU_SCOPED_TRACE("glTexStorage3D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8563,6 +8827,7 @@ void glTexStorage3D_enc(void *self , GLenum target, GLsizei levels, GLenum inter
void glTexSubImage3D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glTexSubImage3D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8606,6 +8871,7 @@ void glTexSubImage3D_enc(void *self , GLenum target, GLint level, GLint xoffset,
void glTexSubImage3DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glTexSubImage3DOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8641,6 +8907,7 @@ void glTexSubImage3DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLin
void glCompressedTexImage3D_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glCompressedTexImage3D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8682,6 +8949,7 @@ void glCompressedTexImage3D_enc(void *self , GLenum target, GLint level, GLenum
void glCompressedTexImage3DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glCompressedTexImage3DOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8715,6 +8983,7 @@ void glCompressedTexImage3DOffsetAEMU_enc(void *self , GLenum target, GLint leve
void glCompressedTexSubImage3D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glCompressedTexSubImage3D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8758,6 +9027,7 @@ void glCompressedTexSubImage3D_enc(void *self , GLenum target, GLint level, GLin
void glCompressedTexSubImage3DOffsetAEMU_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLuint data)
{
+ AEMU_SCOPED_TRACE("glCompressedTexSubImage3DOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8793,6 +9063,7 @@ void glCompressedTexSubImage3DOffsetAEMU_enc(void *self , GLenum target, GLint l
void glCopyTexSubImage3D_enc(void *self , GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
{
+ AEMU_SCOPED_TRACE("glCopyTexSubImage3D encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8826,6 +9097,7 @@ void glCopyTexSubImage3D_enc(void *self , GLenum target, GLint level, GLint xoff
void glGetBooleani_v_enc(void *self , GLenum target, GLuint index, GLboolean* data)
{
+ AEMU_SCOPED_TRACE("glGetBooleani_v encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8866,6 +9138,7 @@ void glGetBooleani_v_enc(void *self , GLenum target, GLuint index, GLboolean* da
void glMemoryBarrier_enc(void *self , GLbitfield barriers)
{
+ AEMU_SCOPED_TRACE("glMemoryBarrier encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8891,6 +9164,7 @@ void glMemoryBarrier_enc(void *self , GLbitfield barriers)
void glMemoryBarrierByRegion_enc(void *self , GLbitfield barriers)
{
+ AEMU_SCOPED_TRACE("glMemoryBarrierByRegion encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8916,6 +9190,7 @@ void glMemoryBarrierByRegion_enc(void *self , GLbitfield barriers)
void glGenProgramPipelines_enc(void *self , GLsizei n, GLuint* pipelines)
{
+ AEMU_SCOPED_TRACE("glGenProgramPipelines encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8955,6 +9230,7 @@ void glGenProgramPipelines_enc(void *self , GLsizei n, GLuint* pipelines)
void glDeleteProgramPipelines_enc(void *self , GLsizei n, const GLuint* pipelines)
{
+ AEMU_SCOPED_TRACE("glDeleteProgramPipelines encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -8983,6 +9259,7 @@ void glDeleteProgramPipelines_enc(void *self , GLsizei n, const GLuint* pipeline
void glBindProgramPipeline_enc(void *self , GLuint pipeline)
{
+ AEMU_SCOPED_TRACE("glBindProgramPipeline encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9008,6 +9285,7 @@ void glBindProgramPipeline_enc(void *self , GLuint pipeline)
void glGetProgramPipelineiv_enc(void *self , GLuint pipeline, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetProgramPipelineiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9048,6 +9326,7 @@ void glGetProgramPipelineiv_enc(void *self , GLuint pipeline, GLenum pname, GLin
void glGetProgramPipelineInfoLog_enc(void *self , GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog)
{
+ AEMU_SCOPED_TRACE("glGetProgramPipelineInfoLog encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9094,6 +9373,7 @@ void glGetProgramPipelineInfoLog_enc(void *self , GLuint pipeline, GLsizei bufSi
void glValidateProgramPipeline_enc(void *self , GLuint pipeline)
{
+ AEMU_SCOPED_TRACE("glValidateProgramPipeline encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9119,6 +9399,7 @@ void glValidateProgramPipeline_enc(void *self , GLuint pipeline)
GLboolean glIsProgramPipeline_enc(void *self , GLuint pipeline)
{
+ AEMU_SCOPED_TRACE("glIsProgramPipeline encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9159,6 +9440,7 @@ GLboolean glIsProgramPipeline_enc(void *self , GLuint pipeline)
void glUseProgramStages_enc(void *self , GLuint pipeline, GLbitfield stages, GLuint program)
{
+ AEMU_SCOPED_TRACE("glUseProgramStages encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9186,6 +9468,7 @@ void glUseProgramStages_enc(void *self , GLuint pipeline, GLbitfield stages, GLu
void glActiveShaderProgram_enc(void *self , GLuint pipeline, GLuint program)
{
+ AEMU_SCOPED_TRACE("glActiveShaderProgram encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9212,6 +9495,7 @@ void glActiveShaderProgram_enc(void *self , GLuint pipeline, GLuint program)
GLuint glCreateShaderProgramvAEMU_enc(void *self , GLenum type, GLsizei count, const char* packedStrings, GLuint packedLen)
{
+ AEMU_SCOPED_TRACE("glCreateShaderProgramvAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9257,6 +9541,7 @@ GLuint glCreateShaderProgramvAEMU_enc(void *self , GLenum type, GLsizei count, c
void glProgramUniform1f_enc(void *self , GLuint program, GLint location, GLfloat v0)
{
+ AEMU_SCOPED_TRACE("glProgramUniform1f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9284,6 +9569,7 @@ void glProgramUniform1f_enc(void *self , GLuint program, GLint location, GLfloat
void glProgramUniform2f_enc(void *self , GLuint program, GLint location, GLfloat v0, GLfloat v1)
{
+ AEMU_SCOPED_TRACE("glProgramUniform2f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9312,6 +9598,7 @@ void glProgramUniform2f_enc(void *self , GLuint program, GLint location, GLfloat
void glProgramUniform3f_enc(void *self , GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
{
+ AEMU_SCOPED_TRACE("glProgramUniform3f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9341,6 +9628,7 @@ void glProgramUniform3f_enc(void *self , GLuint program, GLint location, GLfloat
void glProgramUniform4f_enc(void *self , GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
{
+ AEMU_SCOPED_TRACE("glProgramUniform4f encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9371,6 +9659,7 @@ void glProgramUniform4f_enc(void *self , GLuint program, GLint location, GLfloat
void glProgramUniform1i_enc(void *self , GLuint program, GLint location, GLint v0)
{
+ AEMU_SCOPED_TRACE("glProgramUniform1i encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9398,6 +9687,7 @@ void glProgramUniform1i_enc(void *self , GLuint program, GLint location, GLint v
void glProgramUniform2i_enc(void *self , GLuint program, GLint location, GLint v0, GLint v1)
{
+ AEMU_SCOPED_TRACE("glProgramUniform2i encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9426,6 +9716,7 @@ void glProgramUniform2i_enc(void *self , GLuint program, GLint location, GLint v
void glProgramUniform3i_enc(void *self , GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
{
+ AEMU_SCOPED_TRACE("glProgramUniform3i encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9455,6 +9746,7 @@ void glProgramUniform3i_enc(void *self , GLuint program, GLint location, GLint v
void glProgramUniform4i_enc(void *self , GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
{
+ AEMU_SCOPED_TRACE("glProgramUniform4i encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9485,6 +9777,7 @@ void glProgramUniform4i_enc(void *self , GLuint program, GLint location, GLint v
void glProgramUniform1ui_enc(void *self , GLuint program, GLint location, GLuint v0)
{
+ AEMU_SCOPED_TRACE("glProgramUniform1ui encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9512,6 +9805,7 @@ void glProgramUniform1ui_enc(void *self , GLuint program, GLint location, GLuint
void glProgramUniform2ui_enc(void *self , GLuint program, GLint location, GLint v0, GLuint v1)
{
+ AEMU_SCOPED_TRACE("glProgramUniform2ui encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9540,6 +9834,7 @@ void glProgramUniform2ui_enc(void *self , GLuint program, GLint location, GLint
void glProgramUniform3ui_enc(void *self , GLuint program, GLint location, GLint v0, GLint v1, GLuint v2)
{
+ AEMU_SCOPED_TRACE("glProgramUniform3ui encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9569,6 +9864,7 @@ void glProgramUniform3ui_enc(void *self , GLuint program, GLint location, GLint
void glProgramUniform4ui_enc(void *self , GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLuint v3)
{
+ AEMU_SCOPED_TRACE("glProgramUniform4ui encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9599,6 +9895,7 @@ void glProgramUniform4ui_enc(void *self , GLuint program, GLint location, GLint
void glProgramUniform1fv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform1fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9629,6 +9926,7 @@ void glProgramUniform1fv_enc(void *self , GLuint program, GLint location, GLsize
void glProgramUniform2fv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform2fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9659,6 +9957,7 @@ void glProgramUniform2fv_enc(void *self , GLuint program, GLint location, GLsize
void glProgramUniform3fv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform3fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9689,6 +9988,7 @@ void glProgramUniform3fv_enc(void *self , GLuint program, GLint location, GLsize
void glProgramUniform4fv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform4fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9719,6 +10019,7 @@ void glProgramUniform4fv_enc(void *self , GLuint program, GLint location, GLsize
void glProgramUniform1iv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLint* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform1iv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9749,6 +10050,7 @@ void glProgramUniform1iv_enc(void *self , GLuint program, GLint location, GLsize
void glProgramUniform2iv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLint* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform2iv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9779,6 +10081,7 @@ void glProgramUniform2iv_enc(void *self , GLuint program, GLint location, GLsize
void glProgramUniform3iv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLint* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform3iv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9809,6 +10112,7 @@ void glProgramUniform3iv_enc(void *self , GLuint program, GLint location, GLsize
void glProgramUniform4iv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLint* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform4iv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9839,6 +10143,7 @@ void glProgramUniform4iv_enc(void *self , GLuint program, GLint location, GLsize
void glProgramUniform1uiv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLuint* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform1uiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9869,6 +10174,7 @@ void glProgramUniform1uiv_enc(void *self , GLuint program, GLint location, GLsiz
void glProgramUniform2uiv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLuint* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform2uiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9899,6 +10205,7 @@ void glProgramUniform2uiv_enc(void *self , GLuint program, GLint location, GLsiz
void glProgramUniform3uiv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLuint* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform3uiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9929,6 +10236,7 @@ void glProgramUniform3uiv_enc(void *self , GLuint program, GLint location, GLsiz
void glProgramUniform4uiv_enc(void *self , GLuint program, GLint location, GLsizei count, const GLuint* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniform4uiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9959,6 +10267,7 @@ void glProgramUniform4uiv_enc(void *self , GLuint program, GLint location, GLsiz
void glProgramUniformMatrix2fv_enc(void *self , GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniformMatrix2fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -9990,6 +10299,7 @@ void glProgramUniformMatrix2fv_enc(void *self , GLuint program, GLint location,
void glProgramUniformMatrix3fv_enc(void *self , GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniformMatrix3fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10021,6 +10331,7 @@ void glProgramUniformMatrix3fv_enc(void *self , GLuint program, GLint location,
void glProgramUniformMatrix4fv_enc(void *self , GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniformMatrix4fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10052,6 +10363,7 @@ void glProgramUniformMatrix4fv_enc(void *self , GLuint program, GLint location,
void glProgramUniformMatrix2x3fv_enc(void *self , GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniformMatrix2x3fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10083,6 +10395,7 @@ void glProgramUniformMatrix2x3fv_enc(void *self , GLuint program, GLint location
void glProgramUniformMatrix3x2fv_enc(void *self , GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniformMatrix3x2fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10114,6 +10427,7 @@ void glProgramUniformMatrix3x2fv_enc(void *self , GLuint program, GLint location
void glProgramUniformMatrix2x4fv_enc(void *self , GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniformMatrix2x4fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10145,6 +10459,7 @@ void glProgramUniformMatrix2x4fv_enc(void *self , GLuint program, GLint location
void glProgramUniformMatrix4x2fv_enc(void *self , GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniformMatrix4x2fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10176,6 +10491,7 @@ void glProgramUniformMatrix4x2fv_enc(void *self , GLuint program, GLint location
void glProgramUniformMatrix3x4fv_enc(void *self , GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniformMatrix3x4fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10207,6 +10523,7 @@ void glProgramUniformMatrix3x4fv_enc(void *self , GLuint program, GLint location
void glProgramUniformMatrix4x3fv_enc(void *self , GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
{
+ AEMU_SCOPED_TRACE("glProgramUniformMatrix4x3fv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10238,6 +10555,7 @@ void glProgramUniformMatrix4x3fv_enc(void *self , GLuint program, GLint location
void glGetProgramInterfaceiv_enc(void *self , GLuint program, GLenum programInterface, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetProgramInterfaceiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10279,6 +10597,7 @@ void glGetProgramInterfaceiv_enc(void *self , GLuint program, GLenum programInte
void glGetProgramResourceiv_enc(void *self , GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei* length, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetProgramResourceiv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10331,6 +10650,7 @@ void glGetProgramResourceiv_enc(void *self , GLuint program, GLenum programInter
GLuint glGetProgramResourceIndex_enc(void *self , GLuint program, GLenum programInterface, const char* name)
{
+ AEMU_SCOPED_TRACE("glGetProgramResourceIndex encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10375,6 +10695,7 @@ GLuint glGetProgramResourceIndex_enc(void *self , GLuint program, GLenum program
GLint glGetProgramResourceLocation_enc(void *self , GLuint program, GLenum programInterface, const char* name)
{
+ AEMU_SCOPED_TRACE("glGetProgramResourceLocation encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10419,6 +10740,7 @@ GLint glGetProgramResourceLocation_enc(void *self , GLuint program, GLenum progr
void glGetProgramResourceName_enc(void *self , GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, char* name)
{
+ AEMU_SCOPED_TRACE("glGetProgramResourceName encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10467,6 +10789,7 @@ void glGetProgramResourceName_enc(void *self , GLuint program, GLenum programInt
void glBindImageTexture_enc(void *self , GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)
{
+ AEMU_SCOPED_TRACE("glBindImageTexture encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10498,6 +10821,7 @@ void glBindImageTexture_enc(void *self , GLuint unit, GLuint texture, GLint leve
void glDispatchCompute_enc(void *self , GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)
{
+ AEMU_SCOPED_TRACE("glDispatchCompute encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10525,6 +10849,7 @@ void glDispatchCompute_enc(void *self , GLuint num_groups_x, GLuint num_groups_y
void glDispatchComputeIndirect_enc(void *self , GLintptr indirect)
{
+ AEMU_SCOPED_TRACE("glDispatchComputeIndirect encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10550,6 +10875,7 @@ void glDispatchComputeIndirect_enc(void *self , GLintptr indirect)
void glBindVertexBuffer_enc(void *self , GLuint bindingindex, GLuint buffer, GLintptr offset, GLintptr stride)
{
+ AEMU_SCOPED_TRACE("glBindVertexBuffer encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10578,6 +10904,7 @@ void glBindVertexBuffer_enc(void *self , GLuint bindingindex, GLuint buffer, GLi
void glVertexAttribBinding_enc(void *self , GLuint attribindex, GLuint bindingindex)
{
+ AEMU_SCOPED_TRACE("glVertexAttribBinding encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10604,6 +10931,7 @@ void glVertexAttribBinding_enc(void *self , GLuint attribindex, GLuint bindingin
void glVertexAttribFormat_enc(void *self , GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)
{
+ AEMU_SCOPED_TRACE("glVertexAttribFormat encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10633,6 +10961,7 @@ void glVertexAttribFormat_enc(void *self , GLuint attribindex, GLint size, GLenu
void glVertexAttribIFormat_enc(void *self , GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
{
+ AEMU_SCOPED_TRACE("glVertexAttribIFormat encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10661,6 +10990,7 @@ void glVertexAttribIFormat_enc(void *self , GLuint attribindex, GLint size, GLen
void glVertexBindingDivisor_enc(void *self , GLuint bindingindex, GLuint divisor)
{
+ AEMU_SCOPED_TRACE("glVertexBindingDivisor encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10687,6 +11017,7 @@ void glVertexBindingDivisor_enc(void *self , GLuint bindingindex, GLuint divisor
void glDrawArraysIndirectDataAEMU_enc(void *self , GLenum mode, const void* indirect, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glDrawArraysIndirectDataAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10716,6 +11047,7 @@ void glDrawArraysIndirectDataAEMU_enc(void *self , GLenum mode, const void* indi
void glDrawArraysIndirectOffsetAEMU_enc(void *self , GLenum mode, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glDrawArraysIndirectOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10742,6 +11074,7 @@ void glDrawArraysIndirectOffsetAEMU_enc(void *self , GLenum mode, GLuint offset)
void glDrawElementsIndirectDataAEMU_enc(void *self , GLenum mode, GLenum type, const void* indirect, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glDrawElementsIndirectDataAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10772,6 +11105,7 @@ void glDrawElementsIndirectDataAEMU_enc(void *self , GLenum mode, GLenum type, c
void glDrawElementsIndirectOffsetAEMU_enc(void *self , GLenum mode, GLenum type, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glDrawElementsIndirectOffsetAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10799,6 +11133,7 @@ void glDrawElementsIndirectOffsetAEMU_enc(void *self , GLenum mode, GLenum type,
void glTexStorage2DMultisample_enc(void *self , GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
{
+ AEMU_SCOPED_TRACE("glTexStorage2DMultisample encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10829,6 +11164,7 @@ void glTexStorage2DMultisample_enc(void *self , GLenum target, GLsizei samples,
void glSampleMaski_enc(void *self , GLuint maskNumber, GLbitfield mask)
{
+ AEMU_SCOPED_TRACE("glSampleMaski encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10855,6 +11191,7 @@ void glSampleMaski_enc(void *self , GLuint maskNumber, GLbitfield mask)
void glGetMultisamplefv_enc(void *self , GLenum pname, GLuint index, GLfloat* val)
{
+ AEMU_SCOPED_TRACE("glGetMultisamplefv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10895,6 +11232,7 @@ void glGetMultisamplefv_enc(void *self , GLenum pname, GLuint index, GLfloat* va
void glFramebufferParameteri_enc(void *self , GLenum target, GLenum pname, GLint param)
{
+ AEMU_SCOPED_TRACE("glFramebufferParameteri encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10922,6 +11260,7 @@ void glFramebufferParameteri_enc(void *self , GLenum target, GLenum pname, GLint
void glGetFramebufferParameteriv_enc(void *self , GLenum target, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetFramebufferParameteriv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -10962,6 +11301,7 @@ void glGetFramebufferParameteriv_enc(void *self , GLenum target, GLenum pname, G
void glGetTexLevelParameterfv_enc(void *self , GLenum target, GLint level, GLenum pname, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetTexLevelParameterfv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11003,6 +11343,7 @@ void glGetTexLevelParameterfv_enc(void *self , GLenum target, GLint level, GLenu
void glGetTexLevelParameteriv_enc(void *self , GLenum target, GLint level, GLenum pname, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetTexLevelParameteriv encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11044,6 +11385,7 @@ void glGetTexLevelParameteriv_enc(void *self , GLenum target, GLint level, GLenu
void glMapBufferRangeDMA_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, uint64_t paddr)
{
+ AEMU_SCOPED_TRACE("glMapBufferRangeDMA encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11073,6 +11415,7 @@ void glMapBufferRangeDMA_enc(void *self , GLenum target, GLintptr offset, GLsize
void glUnmapBufferDMA_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, uint64_t paddr, GLboolean* out_res)
{
+ AEMU_SCOPED_TRACE("glUnmapBufferDMA encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11116,6 +11459,7 @@ void glUnmapBufferDMA_enc(void *self , GLenum target, GLintptr offset, GLsizeipt
uint64_t glMapBufferRangeDirect_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, uint64_t paddr)
{
+ AEMU_SCOPED_TRACE("glMapBufferRangeDirect encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11160,6 +11504,7 @@ uint64_t glMapBufferRangeDirect_enc(void *self , GLenum target, GLintptr offset,
void glUnmapBufferDirect_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, uint64_t paddr, uint64_t guest_ptr, GLboolean* out_res)
{
+ AEMU_SCOPED_TRACE("glUnmapBufferDirect encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11204,6 +11549,7 @@ void glUnmapBufferDirect_enc(void *self , GLenum target, GLintptr offset, GLsize
void glFlushMappedBufferRangeDirect_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
{
+ AEMU_SCOPED_TRACE("glFlushMappedBufferRangeDirect encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11232,6 +11578,7 @@ void glFlushMappedBufferRangeDirect_enc(void *self , GLenum target, GLintptr off
GLenum glGetGraphicsResetStatusEXT_enc(void *self )
{
+ AEMU_SCOPED_TRACE("glGetGraphicsResetStatusEXT encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11271,6 +11618,7 @@ GLenum glGetGraphicsResetStatusEXT_enc(void *self )
void glReadnPixelsEXT_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid* data)
{
+ AEMU_SCOPED_TRACE("glReadnPixelsEXT encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11316,6 +11664,7 @@ void glReadnPixelsEXT_enc(void *self , GLint x, GLint y, GLsizei width, GLsizei
void glGetnUniformfvEXT_enc(void *self , GLuint program, GLint location, GLsizei bufSize, GLfloat* params)
{
+ AEMU_SCOPED_TRACE("glGetnUniformfvEXT encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11357,6 +11706,7 @@ void glGetnUniformfvEXT_enc(void *self , GLuint program, GLint location, GLsizei
void glGetnUniformivEXT_enc(void *self , GLuint program, GLint location, GLsizei bufSize, GLint* params)
{
+ AEMU_SCOPED_TRACE("glGetnUniformivEXT encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11398,6 +11748,7 @@ void glGetnUniformivEXT_enc(void *self , GLuint program, GLint location, GLsizei
void glDrawArraysNullAEMU_enc(void *self , GLenum mode, GLint first, GLsizei count)
{
+ AEMU_SCOPED_TRACE("glDrawArraysNullAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11425,6 +11776,7 @@ void glDrawArraysNullAEMU_enc(void *self , GLenum mode, GLint first, GLsizei cou
void glDrawElementsOffsetNullAEMU_enc(void *self , GLenum mode, GLsizei count, GLenum type, GLuint offset)
{
+ AEMU_SCOPED_TRACE("glDrawElementsOffsetNullAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11453,6 +11805,7 @@ void glDrawElementsOffsetNullAEMU_enc(void *self , GLenum mode, GLsizei count, G
void glDrawElementsDataNullAEMU_enc(void *self , GLenum mode, GLsizei count, GLenum type, void* data, GLuint datalen)
{
+ AEMU_SCOPED_TRACE("glDrawElementsDataNullAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11484,6 +11837,7 @@ void glDrawElementsDataNullAEMU_enc(void *self , GLenum mode, GLsizei count, GLe
void glUnmapBufferAsyncAEMU_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer, GLboolean* out_res)
{
+ AEMU_SCOPED_TRACE("glUnmapBufferAsyncAEMU encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -11528,6 +11882,7 @@ void glUnmapBufferAsyncAEMU_enc(void *self , GLenum target, GLintptr offset, GLs
void glFlushMappedBufferRangeAEMU2_enc(void *self , GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer)
{
+ AEMU_SCOPED_TRACE("glFlushMappedBufferRangeAEMU2 encode");
gl2_encoder_context_t *ctx = (gl2_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
diff --git a/system/OpenglSystemCommon/AddressSpaceStream.cpp b/system/OpenglSystemCommon/AddressSpaceStream.cpp
index 4f26da97..ba9f2890 100644
--- a/system/OpenglSystemCommon/AddressSpaceStream.cpp
+++ b/system/OpenglSystemCommon/AddressSpaceStream.cpp
@@ -142,7 +142,7 @@ AddressSpaceStream* createAddressSpaceStream(size_t ignored_bufSize) {
return res;
}
-#ifdef HOST_BUILD
+#if defined(HOST_BUILD) || defined(__Fuchsia__)
AddressSpaceStream* createVirtioGpuAddressSpaceStream(size_t ignored_bufSize) {
// Ignore incoming ignored_bufSize
(void)ignored_bufSize;
@@ -259,7 +259,7 @@ AddressSpaceStream* createVirtioGpuAddressSpaceStream(size_t ignored_bufSize) {
return res;
}
-#endif
+#endif // HOST_BUILD || __Fuchsia__
AddressSpaceStream::AddressSpaceStream(
diff --git a/system/OpenglSystemCommon/Android.mk b/system/OpenglSystemCommon/Android.mk
index fa24719c..189e16b0 100644
--- a/system/OpenglSystemCommon/Android.mk
+++ b/system/OpenglSystemCommon/Android.mk
@@ -18,7 +18,7 @@ LOCAL_SRC_FILES := \
QemuPipeStream.cpp \
ProcessPipe.cpp \
-ifeq (true,$(BUILD_EMULATOR_VULKAN))
+ifeq (true,$(GFXSTREAM))
$(call emugl-import,libvulkan_enc)
LOCAL_SRC_FILES += AddressSpaceStream.cpp
@@ -34,7 +34,7 @@ LOCAL_SRC_FILES += \
else
-ifeq (true,$(BUILD_EMULATOR_VULKAN))
+ifeq (true,$(GFXSTREAM))
LOCAL_HEADER_LIBRARIES += vulkan_headers
diff --git a/system/OpenglSystemCommon/CMakeLists.txt b/system/OpenglSystemCommon/CMakeLists.txt
index ff4947aa..0149f8b7 100644
--- a/system/OpenglSystemCommon/CMakeLists.txt
+++ b/system/OpenglSystemCommon/CMakeLists.txt
@@ -1,10 +1,10 @@
# This is an autogenerated file! Do not edit!
# instead run make from .../device/generic/goldfish-opengl
# which will re-generate this file.
-android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/Android.mk" "1a769e79e22604f569e4345e4f432bb4bd41ca810d479b69887007b5d9bec528")
+android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/Android.mk" "014a10fd6e8b1977ab8f66a6e7211136ea921d3c1692653988c894c7e87fee7a")
set(OpenglSystemCommon_src FormatConversions.cpp HostConnection.cpp QemuPipeStream.cpp ProcessPipe.cpp AddressSpaceStream.cpp ThreadInfo_host.cpp)
android_add_library(TARGET OpenglSystemCommon SHARED LICENSE Apache-2.0 SRC FormatConversions.cpp HostConnection.cpp QemuPipeStream.cpp ProcessPipe.cpp AddressSpaceStream.cpp ThreadInfo_host.cpp)
-target_include_directories(OpenglSystemCommon PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(OpenglSystemCommon PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN")
+target_include_directories(OpenglSystemCommon PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
+target_compile_definitions(OpenglSystemCommon PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM")
target_compile_options(OpenglSystemCommon PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-unused-variable")
-target_link_libraries(OpenglSystemCommon PRIVATE android-emu-shared vulkan_enc gui androidemu cutils utils log _renderControl_enc GLESv2_enc GLESv1_enc OpenglCodecCommon_host PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
+target_link_libraries(OpenglSystemCommon PRIVATE android-emu-shared vulkan_enc gui log _renderControl_enc GLESv2_enc GLESv1_enc OpenglCodecCommon_host cutils utils androidemu PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
diff --git a/system/OpenglSystemCommon/EmulatorFeatureInfo.h b/system/OpenglSystemCommon/EmulatorFeatureInfo.h
index d0ae8530..304ab363 100644
--- a/system/OpenglSystemCommon/EmulatorFeatureInfo.h
+++ b/system/OpenglSystemCommon/EmulatorFeatureInfo.h
@@ -114,6 +114,9 @@ static const char kVulkanShaderFloat16Int8[] = "ANDROID_EMU_vulkan_shader_float1
// Vulkan async queue submit
static const char kVulkanAsyncQueueSubmit[] = "ANDROID_EMU_vulkan_async_queue_submit";
+// A flag to _not_ ignore host opengl errors (now host opengl errors are ignored by default)
+static const char kGLESUseHostError[] = "ANDROID_EMU_gles_use_host_error";
+
// Struct describing available emulator features
struct EmulatorFeatureInfo {
diff --git a/system/OpenglSystemCommon/FormatConversions.cpp b/system/OpenglSystemCommon/FormatConversions.cpp
index cc976ed0..aae6bb98 100644
--- a/system/OpenglSystemCommon/FormatConversions.cpp
+++ b/system/OpenglSystemCommon/FormatConversions.cpp
@@ -35,11 +35,14 @@ static int get_rgb_offset(int row, int width, int rgbStride) {
return row * width * rgbStride;
}
+#define OMX_COLOR_FormatYUV420Planar 0x13
+
bool gralloc_is_yuv_format(const int format) {
switch (format) {
case HAL_PIXEL_FORMAT_YV12:
case HAL_PIXEL_FORMAT_YCbCr_420_888:
case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ case OMX_COLOR_FormatYUV420Planar:
return true;
default:
diff --git a/system/OpenglSystemCommon/HostConnection.cpp b/system/OpenglSystemCommon/HostConnection.cpp
index c371742e..7d309fbd 100644
--- a/system/OpenglSystemCommon/HostConnection.cpp
+++ b/system/OpenglSystemCommon/HostConnection.cpp
@@ -42,13 +42,14 @@ public:
#include "GL2Encoder.h"
#endif
-#ifdef GOLDFISH_VULKAN
+#ifdef GFXSTREAM
#include "VkEncoder.h"
#include "AddressSpaceStream.h"
#else
namespace goldfish_vk {
struct VkEncoder {
VkEncoder(IOStream*) { }
+ void decRef() { }
int placeholder;
};
} // namespace goldfish_vk
@@ -346,6 +347,7 @@ public:
{
return ::processPipeInit(connType, rcEnc);
}
+
};
static GoldfishGralloc m_goldfishGralloc;
@@ -355,7 +357,7 @@ HostConnection::HostConnection() :
m_checksumHelper(),
m_glExtensions(),
m_grallocOnly(true),
- m_noHostError(false),
+ m_noHostError(true),
m_rendernodeFd(-1),
m_rendernodeFdOwned(false) { }
@@ -373,6 +375,14 @@ HostConnection::~HostConnection()
if (m_rendernodeFdOwned) {
close(m_rendernodeFd);
}
+
+ if (m_vkEnc) {
+ m_vkEnc->decRef();
+ }
+
+ if (m_stream) {
+ m_stream->decRef();
+ }
}
// static
@@ -384,21 +394,20 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
auto con = std::unique_ptr<HostConnection>(new HostConnection);
switch (connType) {
case HOST_CONNECTION_ADDRESS_SPACE: {
- auto stream = std::unique_ptr<AddressSpaceStream>(
- createAddressSpaceStream(STREAM_BUFFER_SIZE));
+ auto stream = createAddressSpaceStream(STREAM_BUFFER_SIZE);
if (!stream) {
ALOGE("Failed to create AddressSpaceStream for host connection!!!\n");
return nullptr;
}
con->m_connectionType = HOST_CONNECTION_ADDRESS_SPACE;
con->m_grallocType = GRALLOC_TYPE_RANCHU;
- con->m_stream = std::move(stream);
+ con->m_stream = stream;
con->m_grallocHelper = &m_goldfishGralloc;
con->m_processPipe = &m_goldfishProcessPipe;
break;
}
case HOST_CONNECTION_QEMU_PIPE: {
- auto stream = std::make_unique<QemuPipeStream>(STREAM_BUFFER_SIZE);
+ auto stream = new QemuPipeStream(STREAM_BUFFER_SIZE);
if (!stream) {
ALOGE("Failed to create QemuPipeStream for host connection!!!\n");
return nullptr;
@@ -409,7 +418,7 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
}
con->m_connectionType = HOST_CONNECTION_QEMU_PIPE;
con->m_grallocType = GRALLOC_TYPE_RANCHU;
- con->m_stream = std::move(stream);
+ con->m_stream = stream;
con->m_grallocHelper = &m_goldfishGralloc;
con->m_processPipe = &m_goldfishProcessPipe;
break;
@@ -420,7 +429,7 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
return nullptr;
break;
#else
- auto stream = std::make_unique<TcpStream>(STREAM_BUFFER_SIZE);
+ auto stream = new TcpStream(STREAM_BUFFER_SIZE);
if (!stream) {
ALOGE("Failed to create TcpStream for host connection!!!\n");
return nullptr;
@@ -432,7 +441,7 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
}
con->m_connectionType = HOST_CONNECTION_TCP;
con->m_grallocType = GRALLOC_TYPE_RANCHU;
- con->m_stream = std::move(stream);
+ con->m_stream = stream;
con->m_grallocHelper = &m_goldfishGralloc;
con->m_processPipe = &m_goldfishProcessPipe;
break;
@@ -440,7 +449,7 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
}
#ifdef VIRTIO_GPU
case HOST_CONNECTION_VIRTIO_GPU: {
- auto stream = std::make_unique<VirtioGpuStream>(STREAM_BUFFER_SIZE);
+ auto stream = new VirtioGpuStream(STREAM_BUFFER_SIZE);
if (!stream) {
ALOGE("Failed to create VirtioGpu for host connection!!!\n");
return nullptr;
@@ -453,7 +462,7 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
con->m_grallocType = GRALLOC_TYPE_MINIGBM;
auto rendernodeFd = stream->getRendernodeFd();
con->m_processPipe = stream->getProcessPipe();
- con->m_stream = std::move(stream);
+ con->m_stream = stream;
con->m_rendernodeFdOwned = false;
con->m_rendernodeFdOwned = rendernodeFd;
MinigbmGralloc* m = new MinigbmGralloc;
@@ -462,8 +471,7 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
break;
}
case HOST_CONNECTION_VIRTIO_GPU_PIPE: {
- auto stream =
- std::make_unique<VirtioGpuPipeStream>(STREAM_BUFFER_SIZE);
+ auto stream = new VirtioGpuPipeStream(STREAM_BUFFER_SIZE);
if (!stream) {
ALOGE("Failed to create VirtioGpu for host connection!!!\n");
return nullptr;
@@ -476,7 +484,7 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
con->m_grallocType = getGrallocTypeFromProperty();
con->m_rendernodeFdOwned = false;
auto rendernodeFd = stream->getRendernodeFd();
- con->m_stream = std::move(stream);
+ con->m_stream = stream;
con->m_rendernodeFd = rendernodeFd;
switch (con->m_grallocType) {
case GRALLOC_TYPE_RANCHU:
@@ -495,10 +503,9 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
con->m_processPipe = &m_goldfishProcessPipe;
break;
}
-#ifndef HOST_BUILD
+#if !defined(HOST_BUILD) && !defined(__Fuchsia__)
case HOST_CONNECTION_VIRTIO_GPU_ADDRESS_SPACE: {
- auto stream = std::unique_ptr<AddressSpaceStream>(
- createVirtioGpuAddressSpaceStream(STREAM_BUFFER_SIZE));
+ auto stream = createVirtioGpuAddressSpaceStream(STREAM_BUFFER_SIZE);
if (!stream) {
ALOGE("Failed to create virtgpu AddressSpaceStream for host connection!!!\n");
return nullptr;
@@ -507,7 +514,7 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
con->m_grallocType = getGrallocTypeFromProperty();
con->m_rendernodeFdOwned = false;
auto rendernodeFd = stream->getRendernodeFd();
- con->m_stream = std::move(stream);
+ con->m_stream = stream;
con->m_rendernodeFd = rendernodeFd;
switch (con->m_grallocType) {
case GRALLOC_TYPE_RANCHU:
@@ -526,7 +533,7 @@ std::unique_ptr<HostConnection> HostConnection::connect() {
con->m_processPipe = &m_goldfishProcessPipe;
break;
}
-#endif // !HOST_BUILD
+#endif // !HOST_BUILD && !__Fuchsia__
#else
default:
break;
@@ -581,7 +588,7 @@ std::unique_ptr<HostConnection> HostConnection::createUnique() {
GLEncoder *HostConnection::glEncoder()
{
if (!m_glEnc) {
- m_glEnc = std::make_unique<GLEncoder>(m_stream.get(), checksumHelper());
+ m_glEnc = std::make_unique<GLEncoder>(m_stream, checksumHelper());
DBG("HostConnection::glEncoder new encoder %p, tid %d",
m_glEnc, getCurrentThreadId());
m_glEnc->setContextAccessor(s_getGLContext);
@@ -593,7 +600,7 @@ GL2Encoder *HostConnection::gl2Encoder()
{
if (!m_gl2Enc) {
m_gl2Enc =
- std::make_unique<GL2Encoder>(m_stream.get(), checksumHelper());
+ std::make_unique<GL2Encoder>(m_stream, checksumHelper());
DBG("HostConnection::gl2Encoder new encoder %p, tid %d",
m_gl2Enc, getCurrentThreadId());
m_gl2Enc->setContextAccessor(s_getGL2Context);
@@ -608,15 +615,15 @@ GL2Encoder *HostConnection::gl2Encoder()
VkEncoder *HostConnection::vkEncoder()
{
if (!m_vkEnc) {
- m_vkEnc = std::make_unique<VkEncoder>(m_stream.get());
+ m_vkEnc = new VkEncoder(m_stream);
}
- return m_vkEnc.get();
+ return m_vkEnc;
}
ExtendedRCEncoderContext *HostConnection::rcEncoder()
{
if (!m_rcEnc) {
- m_rcEnc = std::make_unique<ExtendedRCEncoderContext>(m_stream.get(),
+ m_rcEnc = std::make_unique<ExtendedRCEncoderContext>(m_stream,
checksumHelper());
ExtendedRCEncoderContext* rcEnc = m_rcEnc.get();
@@ -800,8 +807,8 @@ void HostConnection::queryAndSetGLESMaxVersion(ExtendedRCEncoderContext* rcEnc)
void HostConnection::queryAndSetNoErrorState(ExtendedRCEncoderContext* rcEnc) {
std::string glExtensions = queryGLExtensions(rcEnc);
- if (glExtensions.find(kGLESNoHostError) != std::string::npos) {
- m_noHostError = true;
+ if (glExtensions.find(kGLESUseHostError) != std::string::npos) {
+ m_noHostError = false;
}
}
diff --git a/system/OpenglSystemCommon/HostConnection.h b/system/OpenglSystemCommon/HostConnection.h
index 69d8a16b..32a1521f 100644
--- a/system/OpenglSystemCommon/HostConnection.h
+++ b/system/OpenglSystemCommon/HostConnection.h
@@ -24,7 +24,7 @@
#include <cutils/native_handle.h>
-#ifdef GOLDFISH_VULKAN
+#ifdef GFXSTREAM
#include <mutex>
#else
#include <utils/threads.h>
@@ -222,10 +222,14 @@ private:
HostConnectionType m_connectionType;
GrallocType m_grallocType;
- std::unique_ptr<IOStream> m_stream;
+ // intrusively refcounted
+ IOStream* m_stream = nullptr;
+
std::unique_ptr<GLEncoder> m_glEnc;
std::unique_ptr<GL2Encoder> m_gl2Enc;
- std::unique_ptr<goldfish_vk::VkEncoder> m_vkEnc;
+
+ // intrusively refcounted
+ goldfish_vk::VkEncoder* m_vkEnc = nullptr;
std::unique_ptr<ExtendedRCEncoderContext> m_rcEnc;
ChecksumCalculator m_checksumHelper;
@@ -234,7 +238,7 @@ private:
std::string m_glExtensions;
bool m_grallocOnly;
bool m_noHostError;
-#ifdef GOLDFISH_VULKAN
+#ifdef GFXSTREAM
mutable std::mutex m_lock;
#else
mutable android::Mutex m_lock;
diff --git a/system/OpenglSystemCommon/ProcessPipe.cpp b/system/OpenglSystemCommon/ProcessPipe.cpp
index 0d747890..c79bf172 100644
--- a/system/OpenglSystemCommon/ProcessPipe.cpp
+++ b/system/OpenglSystemCommon/ProcessPipe.cpp
@@ -28,11 +28,14 @@
#include <errno.h>
#ifdef __Fuchsia__
-#include <fuchsia/hardware/goldfish/cpp/fidl.h>
+#include <fuchsia/hardware/goldfish/llcpp/fidl.h>
#include <lib/zx/vmo.h>
#include "services/service_connector.h"
+#define GET_STATUS_SAFE(result, member) \
+ ((result).ok() ? ((result).Unwrap()->member) : ZX_OK)
+
static QEMU_PIPE_HANDLE sProcDevice = 0;
#else // __Fuchsia__
@@ -64,18 +67,29 @@ static void processPipeInitOnce() {
return;
}
- fuchsia::hardware::goldfish::PipeDeviceSyncPtr device;
- device.Bind(std::move(channel));
+ llcpp::fuchsia::hardware::goldfish::PipeDevice::SyncClient device(
+ std::move(channel));
- fuchsia::hardware::goldfish::PipeSyncPtr pipe;
- device->OpenPipe(pipe.NewRequest());
+ zx::channel pipe_server, pipe_client;
+ zx_status_t status = zx::channel::create(0, &pipe_server, &pipe_client);
+ if (status != ZX_OK) {
+ ALOGE("%s: zx_channel_create failed: %d", __FUNCTION__, status);
+ return;
+ }
+
+ llcpp::fuchsia::hardware::goldfish::Pipe::SyncClient pipe(
+ std::move(pipe_client));
+ device.OpenPipe(std::move(pipe_server));
- zx_status_t status, status2 = ZX_OK;
zx::vmo vmo;
- status = pipe->GetBuffer(&status2, &vmo);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGE("%s: failed to get buffer: %d:%d", __FUNCTION__, status, status2);
- return;
+ {
+ auto result = pipe.GetBuffer();
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("%s: failed to get buffer: %d:%d", __FUNCTION__,
+ result.status(), GET_STATUS_SAFE(result, res));
+ return;
+ }
+ vmo = std::move(result.Unwrap()->vmo);
}
size_t len = strlen("pipe:GLProcessPipe");
@@ -84,12 +98,14 @@ static void processPipeInitOnce() {
ALOGE("%s: failed write pipe name", __FUNCTION__);
return;
}
- uint64_t actual;
- status = pipe->Write(len + 1, 0, &status2, &actual);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGD("%s: connecting to pipe service failed: %d:%d", __FUNCTION__,
- status, status2);
- return;
+
+ {
+ auto result = pipe.Write(len + 1, 0);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGD("%s: connecting to pipe service failed: %d:%d", __FUNCTION__,
+ result.status(), GET_STATUS_SAFE(result, res));
+ return;
+ }
}
// Send a confirmation int to the host and get per-process unique ID back
@@ -99,19 +115,23 @@ static void processPipeInitOnce() {
ALOGE("%s: failed write confirm int", __FUNCTION__);
return;
}
- status = pipe->DoCall(sizeof(confirmInt), 0, sizeof(sProcUID), 0, &status2, &actual);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGD("%s: failed to get per-process ID: %d:%d", __FUNCTION__,
- status, status2);
- return;
+
+ {
+ auto result = pipe.DoCall(sizeof(confirmInt), 0, sizeof(sProcUID), 0);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGD("%s: failed to get per-process ID: %d:%d", __FUNCTION__,
+ result.status(), GET_STATUS_SAFE(result, res));
+ return;
+ }
}
+
status = vmo.read(&sProcUID, 0, sizeof(sProcUID));
if (status != ZX_OK) {
ALOGE("%s: failed read per-process ID: %d", __FUNCTION__, status);
return;
}
- sProcDevice = device.Unbind().TakeChannel().release();
- sProcPipe = pipe.Unbind().TakeChannel().release();
+ sProcDevice = device.mutable_channel()->release();
+ sProcPipe = pipe.mutable_channel()->release();
}
#else // __Fuchsia__
@@ -155,7 +175,7 @@ static void sQemuPipeInit() {
}
static void processPipeInitOnce() {
-#if defined(HOST_BUILD) || !defined(GOLDFISH_VULKAN)
+#if defined(HOST_BUILD) || !defined(GFXSTREAM)
sQemuPipeInit();
#else // HOST_BUILD
switch (sConnType) {
diff --git a/system/OpenglSystemCommon/QemuPipeStream.h b/system/OpenglSystemCommon/QemuPipeStream.h
index 4e779eb8..312eaf95 100644
--- a/system/OpenglSystemCommon/QemuPipeStream.h
+++ b/system/OpenglSystemCommon/QemuPipeStream.h
@@ -21,12 +21,13 @@
* <hardware/qemu_pipe.h> for more details.
*/
#include <stdlib.h>
+#include <memory>
#include "IOStream.h"
#include <qemu_pipe_bp.h>
#ifdef __Fuchsia__
-#include <fuchsia/hardware/goldfish/cpp/fidl.h>
+#include <fuchsia/hardware/goldfish/llcpp/fidl.h>
#include <lib/zx/event.h>
#include <lib/zx/vmo.h>
#endif
@@ -58,8 +59,10 @@ private:
size_t m_read;
size_t m_readLeft;
#ifdef __Fuchsia__
- fuchsia::hardware::goldfish::PipeDeviceSyncPtr m_device;
- fuchsia::hardware::goldfish::PipeSyncPtr m_pipe;
+ std::unique_ptr<llcpp::fuchsia::hardware::goldfish::PipeDevice::SyncClient>
+ m_device;
+ std::unique_ptr<llcpp::fuchsia::hardware::goldfish::Pipe::SyncClient>
+ m_pipe;
zx::event m_event;
zx::vmo m_vmo;
#endif
diff --git a/system/OpenglSystemCommon/QemuPipeStreamFuchsia.cpp b/system/OpenglSystemCommon/QemuPipeStreamFuchsia.cpp
index 5472f308..6a236f1e 100644
--- a/system/OpenglSystemCommon/QemuPipeStreamFuchsia.cpp
+++ b/system/OpenglSystemCommon/QemuPipeStreamFuchsia.cpp
@@ -28,6 +28,9 @@
#include "services/service_connector.h"
+#define GET_STATUS_SAFE(result, member) \
+ ((result).ok() ? ((result).Unwrap()->member) : ZX_OK)
+
constexpr size_t kReadSize = 512 * 1024;
constexpr size_t kWriteOffset = kReadSize;
@@ -53,7 +56,7 @@ QemuPipeStream::QemuPipeStream(QEMU_PIPE_HANDLE sock, size_t bufSize) :
QemuPipeStream::~QemuPipeStream()
{
- if (m_device.is_bound()) {
+ if (m_device) {
flush();
}
if (m_buf) {
@@ -76,11 +79,23 @@ int QemuPipeStream::connect(void)
return -1;
}
- m_device.Bind(std::move(channel));
- m_device->OpenPipe(m_pipe.NewRequest());
+ m_device = std::make_unique<
+ llcpp::fuchsia::hardware::goldfish::PipeDevice::SyncClient>(
+ std::move(channel));
+
+ zx::channel pipe_client, pipe_server;
+ zx_status_t status = zx::channel::create(0, &pipe_server, &pipe_client);
+ if (status != ZX_OK) {
+ ALOGE("zx::channel::create failed: %d", status);
+ return ZX_HANDLE_INVALID;
+ }
+ m_device->OpenPipe(std::move(pipe_server));
+ m_pipe =
+ std::make_unique<llcpp::fuchsia::hardware::goldfish::Pipe::SyncClient>(
+ std::move(pipe_client));
zx::event event;
- zx_status_t status = zx::event::create(0, &event);
+ status = zx::event::create(0, &event);
if (status != ZX_OK) {
ALOGE("%s: failed to create event: %d", __FUNCTION__, status);
return -1;
@@ -92,10 +107,13 @@ int QemuPipeStream::connect(void)
return -1;
}
- status = m_pipe->SetEvent(std::move(event_copy));
- if (status != ZX_OK) {
- ALOGE("%s: failed to set event: %d:%d", __FUNCTION__, status);
- return -1;
+ {
+ auto result = m_pipe->SetEvent(std::move(event_copy));
+ if (!result.ok()) {
+ ALOGE("%s: failed to set event: %d:%d", __FUNCTION__,
+ result.status());
+ return -1;
+ }
}
if (!allocBuffer(m_bufsize)) {
@@ -110,13 +128,13 @@ int QemuPipeStream::connect(void)
return -1;
}
- uint64_t actual;
- zx_status_t status2 = ZX_OK;
- status = m_pipe->Write(len + 1, 0, &status2, &actual);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGD("%s: connecting to pipe service failed: %d:%d", __FUNCTION__,
- status, status2);
- return -1;
+ {
+ auto result = m_pipe->Write(len + 1, 0);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGD("%s: connecting to pipe service failed: %d:%d", __FUNCTION__,
+ result.status(), GET_STATUS_SAFE(result, res));
+ return -1;
+ }
}
m_event = std::move(event);
@@ -145,26 +163,32 @@ void *QemuPipeStream::allocBuffer(size_t minSize)
size_t allocSize = m_bufsize < minSize ? minSize : m_bufsize;
- zx_status_t status2 = ZX_OK;
- status = m_pipe->SetBufferSize(allocSize, &status2);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGE("%s: failed to get buffer: %d:%d", __FUNCTION__, status, status2);
- return nullptr;
+ {
+ auto result = m_pipe->SetBufferSize(allocSize);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("%s: failed to get buffer: %d:%d", __FUNCTION__,
+ result.status(), GET_STATUS_SAFE(result, res));
+ return nullptr;
+ }
}
zx::vmo vmo;
- status = m_pipe->GetBuffer(&status2, &vmo);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGE("%s: failed to get buffer: %d:%d", __FUNCTION__, status, status2);
- return nullptr;
+ {
+ auto result = m_pipe->GetBuffer();
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("%s: failed to get buffer: %d:%d", __FUNCTION__,
+ result.status(), GET_STATUS_SAFE(result, res));
+ return nullptr;
+ }
+ vmo = std::move(result.Unwrap()->vmo);
}
zx_vaddr_t mapped_addr;
- status = zx_vmar_map(zx_vmar_root_self(),
- ZX_VM_PERM_READ | ZX_VM_PERM_WRITE,
- 0, vmo.get(), 0, allocSize, &mapped_addr);
+ status =
+ zx_vmar_map(zx_vmar_root_self(), ZX_VM_PERM_READ | ZX_VM_PERM_WRITE, 0,
+ vmo.get(), 0, allocSize, &mapped_addr);
if (status != ZX_OK) {
- ALOGE("%s: failed to map buffer: %d:%d", __FUNCTION__, status);
+ ALOGE("%s: failed to map buffer: %d", __FUNCTION__, status);
return nullptr;
}
@@ -178,11 +202,10 @@ int QemuPipeStream::commitBuffer(size_t size)
{
if (size == 0) return 0;
- uint64_t actual = 0;
- zx_status_t status2 = ZX_OK;
- zx_status_t status = m_pipe->DoCall(size, kWriteOffset, 0, 0, &status2, &actual);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGD("%s: Pipe call failed: %d:%d", __FUNCTION__, status, status2);
+ auto result = m_pipe->DoCall(size, kWriteOffset, 0, 0);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGD("%s: Pipe call failed: %d:%d", __FUNCTION__, result.status(),
+ GET_STATUS_SAFE(result, res));
return -1;
}
@@ -207,7 +230,8 @@ const unsigned char *QemuPipeStream::readFully(void *buf, size_t len)
const unsigned char *QemuPipeStream::commitBufferAndReadFully(size_t size, void *buf, size_t len)
{
- if (!m_device.is_bound()) return nullptr;
+ if (!m_device)
+ return nullptr;
if (!buf) {
if (len > 0) {
@@ -236,17 +260,16 @@ const unsigned char *QemuPipeStream::commitBufferAndReadFully(size_t size, void
// Read up to kReadSize bytes if all buffered read has been consumed.
size_t maxRead = (m_readLeft || !remaining) ? 0 : kReadSize;
- uint64_t actual = 0;
- zx_status_t status2 = ZX_OK;
- zx_status_t status = m_pipe->DoCall(size, kWriteOffset, maxRead, 0, &status2, &actual);
- if (status != ZX_OK) {
- ALOGD("%s: Pipe call failed: %d", __FUNCTION__, status);
+
+ auto result = m_pipe->DoCall(size, kWriteOffset, maxRead, 0);
+ if (!result.ok()) {
+ ALOGD("%s: Pipe call failed: %d", __FUNCTION__, result.status());
return nullptr;
}
// Updated buffered read size.
- if (actual) {
- m_read = m_readLeft = actual;
+ if (result.Unwrap()->actual) {
+ m_read = m_readLeft = result.Unwrap()->actual;
}
// Consume buffered read and read more if neccessary.
@@ -261,31 +284,33 @@ const unsigned char *QemuPipeStream::commitBufferAndReadFully(size_t size, void
continue;
}
- status2 = ZX_OK;
- actual = 0;
- status = m_pipe->Read(kReadSize, 0, &status2, &actual);
- if (status != ZX_OK) {
- ALOGD("%s: Failed reading from pipe: %d", __FUNCTION__, status);
+ auto result = m_pipe->Read(kReadSize, 0);
+ if (!result.ok()) {
+ ALOGD("%s: Failed reading from pipe: %d:%d", __FUNCTION__,
+ result.status());
return nullptr;
}
- if (actual) {
- m_read = m_readLeft = actual;
+
+ if (result.Unwrap()->actual) {
+ m_read = m_readLeft = result.Unwrap()->actual;
continue;
}
- if (status2 != ZX_ERR_SHOULD_WAIT) {
- ALOGD("%s: Error reading from pipe: %d", __FUNCTION__, status2);
+ if (result.Unwrap()->res != ZX_ERR_SHOULD_WAIT) {
+ ALOGD("%s: Error reading from pipe: %d", __FUNCTION__,
+ result.Unwrap()->res);
return nullptr;
}
+
zx_signals_t observed = ZX_SIGNAL_NONE;
- status = m_event.wait_one(
- fuchsia::hardware::goldfish::SIGNAL_READABLE |
- fuchsia::hardware::goldfish::SIGNAL_HANGUP,
+ zx_status_t status = m_event.wait_one(
+ llcpp::fuchsia::hardware::goldfish::SIGNAL_READABLE |
+ llcpp::fuchsia::hardware::goldfish::SIGNAL_HANGUP,
zx::time::infinite(), &observed);
if (status != ZX_OK) {
ALOGD("%s: wait_one failed: %d", __FUNCTION__, status);
return nullptr;
}
- if (observed & fuchsia::hardware::goldfish::SIGNAL_HANGUP) {
+ if (observed & llcpp::fuchsia::hardware::goldfish::SIGNAL_HANGUP) {
ALOGD("%s: Remote end hungup", __FUNCTION__);
return nullptr;
}
diff --git a/system/OpenglSystemCommon/ThreadInfo.cpp b/system/OpenglSystemCommon/ThreadInfo.cpp
index 99b0b9b5..70837b20 100644
--- a/system/OpenglSystemCommon/ThreadInfo.cpp
+++ b/system/OpenglSystemCommon/ThreadInfo.cpp
@@ -13,9 +13,33 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#include "ThreadInfo.h"
#include "cutils/threads.h"
+#ifdef GFXSTREAM
+
+thread_local EGLThreadInfo sEglThreadInfoThreadLocal;
+
+EGLThreadInfo *goldfish_get_egl_tls()
+{
+ return &sEglThreadInfoThreadLocal;
+}
+
+EGLThreadInfo* getEGLThreadInfo() {
+ return goldfish_get_egl_tls();
+}
+
+int32_t getCurrentThreadId() {
+ return (int32_t)gettid();
+}
+
+void setTlsDestructor(tlsDtorCallback func) {
+ getEGLThreadInfo()->dtor = func;
+}
+
+#else // GFXSTREAM
+
#ifdef __BIONIC__
#include <bionic/tls.h>
#endif
@@ -58,14 +82,14 @@ void setTlsDestructor(tlsDtorCallback func) {
EGLThreadInfo *goldfish_get_egl_tls()
{
- EGLThreadInfo* ti = (EGLThreadInfo*)thread_store_get(&s_tls);
+ EGLThreadInfo* ti = (EGLThreadInfo*)thread_store_get(&s_tls);
- if (ti) return ti;
+ if (ti) return ti;
- ti = new EGLThreadInfo();
- thread_store_set(&s_tls, ti, tlsDestruct);
+ ti = new EGLThreadInfo();
+ thread_store_set(&s_tls, ti, tlsDestruct);
- return ti;
+ return ti;
}
EGLThreadInfo* getEGLThreadInfo() {
@@ -85,3 +109,5 @@ EGLThreadInfo* getEGLThreadInfo() {
int32_t getCurrentThreadId() {
return (int32_t)gettid();
}
+
+#endif // !GFXSTREAM
diff --git a/system/OpenglSystemCommon/ThreadInfo.h b/system/OpenglSystemCommon/ThreadInfo.h
index fa6b44bc..7f492738 100644
--- a/system/OpenglSystemCommon/ThreadInfo.h
+++ b/system/OpenglSystemCommon/ThreadInfo.h
@@ -22,16 +22,19 @@
struct EGLContext_t;
+typedef bool (*tlsDtorCallback)(void*);
+
struct EGLThreadInfo
{
- EGLThreadInfo() : currentContext(NULL), eglError(EGL_SUCCESS) {}
+ EGLThreadInfo() : currentContext(NULL), eglError(EGL_SUCCESS), dtor(0) {}
+ ~EGLThreadInfo() { if (dtor) dtor(this); }
EGLContext_t *currentContext;
std::unique_ptr<HostConnection> hostConn;
int eglError;
+ tlsDtorCallback dtor;
};
-typedef bool (*tlsDtorCallback)(void*);
void setTlsDestructor(tlsDtorCallback);
extern "C" __attribute__((visibility("default"))) EGLThreadInfo *goldfish_get_egl_tls();
diff --git a/system/OpenglSystemCommon/VirtioGpuPipeStream.cpp b/system/OpenglSystemCommon/VirtioGpuPipeStream.cpp
index 238d5559..6143bd53 100644
--- a/system/OpenglSystemCommon/VirtioGpuPipeStream.cpp
+++ b/system/OpenglSystemCommon/VirtioGpuPipeStream.cpp
@@ -120,9 +120,9 @@ int VirtioGpuPipeStream::connect(const char* serviceName)
}
if (!m_virtio_mapped) {
- drm_virtgpu_map map = {
- .handle = m_virtio_bo,
- };
+ drm_virtgpu_map map;
+ memset(&map, 0, sizeof(map));
+ map.handle = m_virtio_bo;
int ret = drmIoctl(m_fd, DRM_IOCTL_VIRTGPU_MAP, &map);
if (ret) {
diff --git a/system/OpenglSystemCommon/VirtioGpuStream.cpp b/system/OpenglSystemCommon/VirtioGpuStream.cpp
index 1b49244c..bbf9dd23 100644
--- a/system/OpenglSystemCommon/VirtioGpuStream.cpp
+++ b/system/OpenglSystemCommon/VirtioGpuStream.cpp
@@ -149,9 +149,10 @@ int VirtioGpuStream::connect()
}
if (!m_cmdResp) {
- drm_virtgpu_map map = {
- .handle = m_cmdResp_bo,
- };
+ drm_virtgpu_map map;
+ memset(&map, 0, sizeof(map));
+ map.handle = m_cmdResp_bo;
+
int ret = drmIoctl(m_fd, DRM_IOCTL_VIRTGPU_MAP, &map);
if (ret) {
ERR("%s: failed with %d mapping command response buffer (%s)",
diff --git a/system/OpenglSystemCommon/address_space_graphics_types.h b/system/OpenglSystemCommon/address_space_graphics_types.h
index 5f0e9b67..753644bf 100644
--- a/system/OpenglSystemCommon/address_space_graphics_types.h
+++ b/system/OpenglSystemCommon/address_space_graphics_types.h
@@ -124,7 +124,7 @@ struct asg_context { // ptrs into RingStorage
// Helper function that will be common between guest and host:
// Given ring storage and a write buffer, returns asg_context that
// is the correct view into it.
-static struct asg_context asg_context_create(
+static inline struct asg_context asg_context_create(
char* ring_storage,
char* buffer,
uint32_t buffer_size) {
diff --git a/system/codecs/omx/common/Android.mk b/system/codecs/omx/common/Android.mk
index 4daf0b73..1ebdff93 100644
--- a/system/codecs/omx/common/Android.mk
+++ b/system/codecs/omx/common/Android.mk
@@ -34,7 +34,7 @@ $(call emugl-import,libGoldfishAddressSpace$(GOLDFISH_OPENGL_LIB_SUFFIX))
else
$(call emugl-export,STATIC_LIBRARIES,libGoldfishAddressSpace)
-ifeq (true,$(BUILD_EMULATOR_VULKAN))
+ifeq (true,$(GFXSTREAM))
LOCAL_CFLAGS += -DVIRTIO_GPU
LOCAL_C_INCLUDES += external/libdrm external/minigbm/cros_gralloc
diff --git a/system/egl/Android.mk b/system/egl/Android.mk
index a5e1c1fd..f312efba 100644
--- a/system/egl/Android.mk
+++ b/system/egl/Android.mk
@@ -23,11 +23,11 @@ LOCAL_SRC_FILES := \
ifneq (true,$(GOLDFISH_OPENGL_BUILD_FOR_HOST))
LOCAL_SHARED_LIBRARIES += libdl
-ifeq (true,$(BUILD_EMULATOR_VULKAN))
+ifeq (true,$(GFXSTREAM))
LOCAL_CFLAGS += -DVIRTIO_GPU
LOCAL_C_INCLUDES += external/libdrm
LOCAL_SHARED_LIBRARIES += libdrm
-endif # BUILD_EMULATOR_VULKAN
+endif # GFXSTREAM
endif # GOLDFISH_OPENGL_BUILD_FOR_HOST
ifneq (true,$(GOLDFISH_OPENGL_BUILD_FOR_HOST))
diff --git a/system/egl/CMakeLists.txt b/system/egl/CMakeLists.txt
index 301ef627..cf649a22 100644
--- a/system/egl/CMakeLists.txt
+++ b/system/egl/CMakeLists.txt
@@ -1,10 +1,10 @@
# This is an autogenerated file! Do not edit!
# instead run make from .../device/generic/goldfish-opengl
# which will re-generate this file.
-android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/egl/Android.mk" "729a65bbc7934fa79a239b55b801e4ebaa44d02c2deeab7ab43e42196376c7c7")
+android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/egl/Android.mk" "0d72068bb429ec9da33f7086a879a08b540b887538f21d0a9f468cead76c45df")
set(EGL_emulation_src eglDisplay.cpp egl.cpp ClientAPIExts.cpp)
android_add_library(TARGET EGL_emulation SHARED LICENSE Apache-2.0 SRC eglDisplay.cpp egl.cpp ClientAPIExts.cpp)
-target_include_directories(EGL_emulation PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(EGL_emulation PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"EGL_emulation\"" "-DEGL_EGLEXT_PROTOTYPES")
+target_include_directories(EGL_emulation PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
+target_compile_definitions(EGL_emulation PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"EGL_emulation\"" "-DEGL_EGLEXT_PROTOTYPES")
target_compile_options(EGL_emulation PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-gnu-designator")
-target_link_libraries(EGL_emulation PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui androidemu cutils utils log _renderControl_enc GLESv2_enc GLESv1_enc OpenglCodecCommon_host PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
+target_link_libraries(EGL_emulation PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui log _renderControl_enc GLESv2_enc GLESv1_enc OpenglCodecCommon_host cutils utils androidemu PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
diff --git a/system/egl/egl.cpp b/system/egl/egl.cpp
index fbd2405f..601ad9d9 100644
--- a/system/egl/egl.cpp
+++ b/system/egl/egl.cpp
@@ -1210,6 +1210,7 @@ EGLSurface eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLin
case EGL_VG_COLORSPACE:
break;
default:
+ ALOGE("%s:%d unknown attribute: 0x%x\n", __func__, __LINE__, attrib_list[0]);
setErrorReturn(EGL_BAD_ATTRIBUTE, EGL_NO_SURFACE);
};
attrib_list+=2;
@@ -1703,6 +1704,8 @@ EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_c
}
break;
default:
+ ALOGE("%s:%d EGL_BAD_CONFIG: invalid major GLES version: %d\n",
+ __func__, __LINE__, majorVersion);
setErrorReturn(EGL_BAD_CONFIG, EGL_NO_CONTEXT);
}
@@ -1856,41 +1859,25 @@ EGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLC
context->minorVersion,
context->deviceMajorVersion,
context->deviceMinorVersion);
- // Get caps for indexed buffers from host.
- // Some need a current context.
- int max_transform_feedback_separate_attribs = 0;
- int max_uniform_buffer_bindings = 0;
- int max_atomic_counter_buffer_bindings = 0;
- int max_shader_storage_buffer_bindings = 0;
- int max_vertex_attrib_bindings = 0;
- int max_color_attachments = 1;
- int max_draw_buffers = 1;
- if (context->majorVersion > 2) {
- s_display.gles2_iface()->getIntegerv(
- GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &max_transform_feedback_separate_attribs);
- s_display.gles2_iface()->getIntegerv(
- GL_MAX_UNIFORM_BUFFER_BINDINGS, &max_uniform_buffer_bindings);
- if (context->minorVersion > 0) {
- s_display.gles2_iface()->getIntegerv(
- GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, &max_atomic_counter_buffer_bindings);
- s_display.gles2_iface()->getIntegerv(
- GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, &max_shader_storage_buffer_bindings);
- s_display.gles2_iface()->getIntegerv(
- GL_MAX_VERTEX_ATTRIB_BINDINGS, &max_vertex_attrib_bindings);
- }
- s_display.gles2_iface()->getIntegerv(
- GL_MAX_COLOR_ATTACHMENTS, &max_color_attachments);
- s_display.gles2_iface()->getIntegerv(
- GL_MAX_DRAW_BUFFERS, &max_draw_buffers);
+ hostCon->gl2Encoder()->setClientState(contextState);
+ if (context->majorVersion > 1) {
+ HostDriverCaps caps = s_display.getHostDriverCaps(
+ context->majorVersion,
+ context->minorVersion);
+ contextState->initFromCaps(caps);
+ } else {
+ // Just put some stuff here to make gles1 happy
+ HostDriverCaps gles1Caps = {
+ .max_vertex_attribs = 16,
+ .max_combined_texture_image_units = 8,
+ .max_color_attachments = 8,
+
+ .max_texture_size = 4096,
+ .max_texture_size_cube_map = 2048,
+ .max_renderbuffer_size = 4096,
+ };
+ contextState->initFromCaps(gles1Caps);
}
- contextState->initFromCaps(
- max_transform_feedback_separate_attribs,
- max_uniform_buffer_bindings,
- max_atomic_counter_buffer_bindings,
- max_shader_storage_buffer_bindings,
- max_vertex_attrib_bindings,
- max_color_attachments,
- max_draw_buffers);
}
// update the client state, share group, and version
@@ -1977,6 +1964,7 @@ EGLSurface eglGetCurrentSurface(EGLint readdraw)
case EGL_DRAW:
return context->draw;
default:
+ ALOGE("%s:%d unknown parameter: 0x%x\n", __func__, __LINE__, readdraw);
setErrorReturn(EGL_BAD_PARAMETER, EGL_NO_SURFACE);
}
}
@@ -2127,7 +2115,11 @@ EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EG
case HAL_PIXEL_FORMAT_YCBCR_420_888:
#endif
break;
+ case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED:
+ ALOGW("%s:%d using HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED\n", __func__, __LINE__);
+ break;
default:
+ ALOGE("%s:%d unknown parameter: 0x%x\n", __func__, __LINE__, format);
setErrorReturn(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);
}
diff --git a/system/egl/eglDisplay.cpp b/system/egl/eglDisplay.cpp
index 2508f487..7f4800c3 100644
--- a/system/egl/eglDisplay.cpp
+++ b/system/egl/eglDisplay.cpp
@@ -26,6 +26,8 @@
#include <dlfcn.h>
+#include <GLES3/gl31.h>
+
static const int systemEGLVersionMajor = 1;
static const int systemEGLVersionMinor = 4;
static const char systemEGLVendor[] = "Google Android emulator";
@@ -73,7 +75,9 @@ eglDisplay::eglDisplay() :
m_gles2_iface(NULL),
m_versionString(NULL),
m_vendorString(NULL),
- m_extensionString(NULL)
+ m_extensionString(NULL),
+ m_hostDriverCaps_knownMajorVersion(0),
+ m_hostDriverCaps_knownMinorVersion(0)
{
pthread_mutex_init(&m_lock, NULL);
pthread_mutex_init(&m_ctxLock, NULL);
@@ -171,7 +175,6 @@ bool eglDisplay::initialize(EGLClient_eglInterface *eglIface)
uint32_t nInts = m_numConfigAttribs * (m_numConfigs + 1);
EGLint tmp_buf[nInts];
- uint32_t configCount = nInts - m_numConfigAttribs;
m_configs = new EGLint[nInts-m_numConfigAttribs];
@@ -654,3 +657,55 @@ bool eglDisplay::isSurface(EGLSurface surface) {
pthread_mutex_unlock(&m_surfaceLock);
return res;
}
+
+HostDriverCaps eglDisplay::getHostDriverCaps(int majorVersion, int minorVersion) {
+ pthread_mutex_lock(&m_lock);
+ if (majorVersion <= m_hostDriverCaps_knownMajorVersion &&
+ minorVersion <= m_hostDriverCaps_knownMinorVersion) {
+ pthread_mutex_unlock(&m_lock);
+ return m_hostDriverCaps;
+ }
+
+ memset(&m_hostDriverCaps, 0x0, sizeof(m_hostDriverCaps));
+
+ m_hostDriverCaps.max_color_attachments = 8;
+
+ // Can we query gles2?
+ if (majorVersion >= 1) {
+ m_gles2_iface->getIntegerv(GL_MAX_VERTEX_ATTRIBS, &m_hostDriverCaps.max_vertex_attribs);
+ m_gles2_iface->getIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &m_hostDriverCaps.max_combined_texture_image_units);
+
+ m_gles2_iface->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_hostDriverCaps.max_texture_size);
+ m_gles2_iface->getIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &m_hostDriverCaps.max_texture_size_cube_map);
+ m_gles2_iface->getIntegerv(GL_MAX_RENDERBUFFER_SIZE, &m_hostDriverCaps.max_renderbuffer_size);
+ m_hostDriverCaps_knownMajorVersion = 2;
+ }
+
+ // Can we query gles3.0?
+ if (majorVersion >= 3) {
+ m_gles2_iface->getIntegerv(GL_MAX_COLOR_ATTACHMENTS, &m_hostDriverCaps.max_color_attachments);
+ m_gles2_iface->getIntegerv(GL_MAX_DRAW_BUFFERS, &m_hostDriverCaps.max_draw_buffers);
+ m_gles2_iface->getIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &m_hostDriverCaps.ubo_offset_alignment);
+ m_gles2_iface->getIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &m_hostDriverCaps.max_uniform_buffer_bindings);
+ m_gles2_iface->getIntegerv(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, &m_hostDriverCaps.max_transform_feedback_separate_attribs);
+ m_gles2_iface->getIntegerv(GL_MAX_3D_TEXTURE_SIZE, &m_hostDriverCaps.max_texture_size_3d);
+ m_gles2_iface->getIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &m_hostDriverCaps.max_array_texture_layers);
+
+ m_hostDriverCaps_knownMajorVersion = 3;
+
+ // Can we query gles3.1?
+ if (minorVersion >= 1) {
+ m_gles2_iface->getIntegerv(GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, &m_hostDriverCaps.max_atomic_counter_buffer_bindings);
+ m_gles2_iface->getIntegerv(GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, &m_hostDriverCaps.max_shader_storage_buffer_bindings);
+ m_gles2_iface->getIntegerv(GL_MAX_VERTEX_ATTRIB_BINDINGS, &m_hostDriverCaps.max_vertex_attrib_bindings);
+ m_gles2_iface->getIntegerv(GL_MAX_VERTEX_ATTRIB_STRIDE, &m_hostDriverCaps.max_vertex_attrib_stride);
+ m_gles2_iface->getIntegerv(GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, &m_hostDriverCaps.ssbo_offset_alignment);
+ m_hostDriverCaps_knownMinorVersion = 1;
+ }
+ }
+
+ pthread_mutex_unlock(&m_lock);
+
+ return m_hostDriverCaps;
+}
+
diff --git a/system/egl/eglDisplay.h b/system/egl/eglDisplay.h
index 951075d4..25494e15 100644
--- a/system/egl/eglDisplay.h
+++ b/system/egl/eglDisplay.h
@@ -22,6 +22,7 @@
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include "EGLClientIface.h"
+#include "GLClientState.h"
#if __cplusplus >= 201103L
#include <unordered_set>
@@ -76,6 +77,10 @@ public:
bool isContext(EGLContext ctx);
bool isSurface(EGLSurface ctx);
+
+ // Needs a current context (put this near eglMakeCurrent)
+ HostDriverCaps getHostDriverCaps(int majorVersion, int minorVersion);
+
private:
EGLClient_glesInterface *loadGLESClientAPI(const char *libName,
EGLClient_eglInterface *eglIface,
@@ -118,6 +123,10 @@ private:
EGLSurfaceSet m_surfaces;
pthread_mutex_t m_ctxLock;
pthread_mutex_t m_surfaceLock;
+
+ int m_hostDriverCaps_knownMajorVersion;
+ int m_hostDriverCaps_knownMinorVersion;
+ HostDriverCaps m_hostDriverCaps;
};
#endif
diff --git a/system/gralloc/Android.mk b/system/gralloc/Android.mk
index 38ae3946..5d5667ea 100644
--- a/system/gralloc/Android.mk
+++ b/system/gralloc/Android.mk
@@ -20,7 +20,7 @@ endif
ifneq (true,$(GOLDFISH_OPENGL_BUILD_FOR_HOST))
LOCAL_SHARED_LIBRARIES += libdl
-ifeq (true,$(BUILD_EMULATOR_VULKAN))
+ifeq (true,$(GFXSTREAM))
LOCAL_CFLAGS += -DVIRTIO_GPU
LOCAL_C_INCLUDES += external/libdrm external/minigbm/cros_gralloc
LOCAL_SHARED_LIBRARIES += libdrm
diff --git a/system/gralloc/CMakeLists.txt b/system/gralloc/CMakeLists.txt
index 21bcde2b..c090eb37 100644
--- a/system/gralloc/CMakeLists.txt
+++ b/system/gralloc/CMakeLists.txt
@@ -1,20 +1,20 @@
# This is an autogenerated file! Do not edit!
# instead run make from .../device/generic/goldfish-opengl
# which will re-generate this file.
-android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/gralloc/Android.mk" "c6313719aae414d05f6f4e8c6eb9039dd5cb120ae0a63818e25bfbe0cebcc702")
+android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/gralloc/Android.mk" "4c44a906197808b25fde953a476e026aac725e5286e0f91d5f8a3083f40f49da")
set(gralloc.goldfish_src gralloc_old.cpp)
android_add_library(TARGET gralloc.goldfish SHARED LICENSE Apache-2.0 SRC gralloc_old.cpp)
-target_include_directories(gralloc.goldfish PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(gralloc.goldfish PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"gralloc_goldfish\"")
+target_include_directories(gralloc.goldfish PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
+target_compile_definitions(gralloc.goldfish PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"gralloc_goldfish\"")
target_compile_options(gralloc.goldfish PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-Wno-gnu-designator")
-target_link_libraries(gralloc.goldfish PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui androidemu cutils utils log GLESv2_enc _renderControl_enc GLESv1_enc OpenglCodecCommon_host PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host)
+target_link_libraries(gralloc.goldfish PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui log GLESv2_enc _renderControl_enc GLESv1_enc OpenglCodecCommon_host cutils utils androidemu PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host)
# This is an autogenerated file! Do not edit!
# instead run make from .../device/generic/goldfish-opengl
# which will re-generate this file.
-android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/gralloc/Android.mk" "c6313719aae414d05f6f4e8c6eb9039dd5cb120ae0a63818e25bfbe0cebcc702")
+android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/gralloc/Android.mk" "4c44a906197808b25fde953a476e026aac725e5286e0f91d5f8a3083f40f49da")
set(gralloc.ranchu_src gralloc_old.cpp)
android_add_library(TARGET gralloc.ranchu SHARED LICENSE Apache-2.0 SRC gralloc_old.cpp)
-target_include_directories(gralloc.ranchu PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(gralloc.ranchu PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"gralloc_ranchu\"")
+target_include_directories(gralloc.ranchu PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
+target_compile_definitions(gralloc.ranchu PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"gralloc_ranchu\"")
target_compile_options(gralloc.ranchu PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-Wno-gnu-designator")
-target_link_libraries(gralloc.ranchu PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui androidemu cutils utils log GLESv2_enc _renderControl_enc GLESv1_enc OpenglCodecCommon_host PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
+target_link_libraries(gralloc.ranchu PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui log GLESv2_enc _renderControl_enc GLESv1_enc OpenglCodecCommon_host cutils utils androidemu PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
diff --git a/system/renderControl_enc/CMakeLists.txt b/system/renderControl_enc/CMakeLists.txt
index 8a42acb0..a2b42219 100644
--- a/system/renderControl_enc/CMakeLists.txt
+++ b/system/renderControl_enc/CMakeLists.txt
@@ -4,7 +4,7 @@
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc/Android.mk" "780a007ac7a3d2255372ddf40e03aeb10e4c759343d2532f6ddf769f4df73810")
set(_renderControl_enc_src renderControl_client_context.cpp renderControl_enc.cpp renderControl_entry.cpp)
android_add_library(TARGET _renderControl_enc SHARED LICENSE Apache-2.0 SRC renderControl_client_context.cpp renderControl_enc.cpp renderControl_entry.cpp)
-target_include_directories(_renderControl_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
-target_compile_definitions(_renderControl_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN")
+target_include_directories(_renderControl_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
+target_compile_definitions(_renderControl_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM")
target_compile_options(_renderControl_enc PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-unused-function")
-target_link_libraries(_renderControl_enc PRIVATE OpenglCodecCommon_host cutils utils log android-emu-shared PRIVATE qemupipe_host) \ No newline at end of file
+target_link_libraries(_renderControl_enc PRIVATE OpenglCodecCommon_host cutils utils log androidemu android-emu-shared PRIVATE qemupipe_host) \ No newline at end of file
diff --git a/system/renderControl_enc/renderControl_client_context.cpp b/system/renderControl_enc/renderControl_client_context.cpp
index ca388840..5b1f14ee 100644
--- a/system/renderControl_enc/renderControl_client_context.cpp
+++ b/system/renderControl_enc/renderControl_client_context.cpp
@@ -61,6 +61,10 @@ int renderControl_client_context_t::initDispatchByName(void *(*getProc)(const ch
rcCreateColorBufferWithHandle = (rcCreateColorBufferWithHandle_client_proc_t) getProc("rcCreateColorBufferWithHandle", userData);
rcCreateBuffer = (rcCreateBuffer_client_proc_t) getProc("rcCreateBuffer", userData);
rcCloseBuffer = (rcCloseBuffer_client_proc_t) getProc("rcCloseBuffer", userData);
+ rcSetColorBufferVulkanMode2 = (rcSetColorBufferVulkanMode2_client_proc_t) getProc("rcSetColorBufferVulkanMode2", userData);
+ rcMapGpaToBufferHandle = (rcMapGpaToBufferHandle_client_proc_t) getProc("rcMapGpaToBufferHandle", userData);
+ rcCreateBuffer2 = (rcCreateBuffer2_client_proc_t) getProc("rcCreateBuffer2", userData);
+ rcMapGpaToBufferHandle2 = (rcMapGpaToBufferHandle2_client_proc_t) getProc("rcMapGpaToBufferHandle2", userData);
return 0;
}
diff --git a/system/renderControl_enc/renderControl_client_context.h b/system/renderControl_enc/renderControl_client_context.h
index c9dc4109..2032a324 100644
--- a/system/renderControl_enc/renderControl_client_context.h
+++ b/system/renderControl_enc/renderControl_client_context.h
@@ -61,6 +61,10 @@ struct renderControl_client_context_t {
rcCreateColorBufferWithHandle_client_proc_t rcCreateColorBufferWithHandle;
rcCreateBuffer_client_proc_t rcCreateBuffer;
rcCloseBuffer_client_proc_t rcCloseBuffer;
+ rcSetColorBufferVulkanMode2_client_proc_t rcSetColorBufferVulkanMode2;
+ rcMapGpaToBufferHandle_client_proc_t rcMapGpaToBufferHandle;
+ rcCreateBuffer2_client_proc_t rcCreateBuffer2;
+ rcMapGpaToBufferHandle2_client_proc_t rcMapGpaToBufferHandle2;
virtual ~renderControl_client_context_t() {}
typedef renderControl_client_context_t *CONTEXT_ACCESSOR_TYPE(void);
diff --git a/system/renderControl_enc/renderControl_client_proc.h b/system/renderControl_enc/renderControl_client_proc.h
index 4192b0e4..c0b9a7fd 100644
--- a/system/renderControl_enc/renderControl_client_proc.h
+++ b/system/renderControl_enc/renderControl_client_proc.h
@@ -63,6 +63,10 @@ typedef int (renderControl_APIENTRY *rcIsSyncSignaled_client_proc_t) (void * ctx
typedef void (renderControl_APIENTRY *rcCreateColorBufferWithHandle_client_proc_t) (void * ctx, uint32_t, uint32_t, GLenum, uint32_t);
typedef uint32_t (renderControl_APIENTRY *rcCreateBuffer_client_proc_t) (void * ctx, uint32_t);
typedef void (renderControl_APIENTRY *rcCloseBuffer_client_proc_t) (void * ctx, uint32_t);
+typedef GLint (renderControl_APIENTRY *rcSetColorBufferVulkanMode2_client_proc_t) (void * ctx, uint32_t, uint32_t, uint32_t);
+typedef int (renderControl_APIENTRY *rcMapGpaToBufferHandle_client_proc_t) (void * ctx, uint32_t, uint64_t);
+typedef uint32_t (renderControl_APIENTRY *rcCreateBuffer2_client_proc_t) (void * ctx, uint64_t, uint32_t);
+typedef int (renderControl_APIENTRY *rcMapGpaToBufferHandle2_client_proc_t) (void * ctx, uint32_t, uint64_t, uint64_t);
#endif
diff --git a/system/renderControl_enc/renderControl_enc.cpp b/system/renderControl_enc/renderControl_enc.cpp
index b841bf13..6b2680c2 100644
--- a/system/renderControl_enc/renderControl_enc.cpp
+++ b/system/renderControl_enc/renderControl_enc.cpp
@@ -12,6 +12,7 @@
#include <stdio.h>
+#include "android/base/Tracing.h"
namespace {
void enc_unsupported()
@@ -21,6 +22,7 @@ void enc_unsupported()
GLint rcGetRendererVersion_enc(void *self )
{
+ AEMU_SCOPED_TRACE("rcGetRendererVersion encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -60,6 +62,7 @@ GLint rcGetRendererVersion_enc(void *self )
EGLint rcGetEGLVersion_enc(void *self , EGLint* major, EGLint* minor)
{
+ AEMU_SCOPED_TRACE("rcGetEGLVersion encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -107,6 +110,7 @@ EGLint rcGetEGLVersion_enc(void *self , EGLint* major, EGLint* minor)
EGLint rcQueryEGLString_enc(void *self , EGLenum name, void* buffer, EGLint bufferSize)
{
+ AEMU_SCOPED_TRACE("rcQueryEGLString encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -152,6 +156,7 @@ EGLint rcQueryEGLString_enc(void *self , EGLenum name, void* buffer, EGLint buff
EGLint rcGetGLString_enc(void *self , EGLenum name, void* buffer, EGLint bufferSize)
{
+ AEMU_SCOPED_TRACE("rcGetGLString encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -197,6 +202,7 @@ EGLint rcGetGLString_enc(void *self , EGLenum name, void* buffer, EGLint bufferS
EGLint rcGetNumConfigs_enc(void *self , uint32_t* numAttribs)
{
+ AEMU_SCOPED_TRACE("rcGetNumConfigs encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -240,6 +246,7 @@ EGLint rcGetNumConfigs_enc(void *self , uint32_t* numAttribs)
EGLint rcGetConfigs_enc(void *self , uint32_t bufSize, GLuint* buffer)
{
+ AEMU_SCOPED_TRACE("rcGetConfigs encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -284,6 +291,7 @@ EGLint rcGetConfigs_enc(void *self , uint32_t bufSize, GLuint* buffer)
EGLint rcChooseConfig_enc(void *self , EGLint* attribs, uint32_t attribs_size, uint32_t* configs, uint32_t configs_size)
{
+ AEMU_SCOPED_TRACE("rcChooseConfig encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -334,6 +342,7 @@ EGLint rcChooseConfig_enc(void *self , EGLint* attribs, uint32_t attribs_size, u
EGLint rcGetFBParam_enc(void *self , EGLint param)
{
+ AEMU_SCOPED_TRACE("rcGetFBParam encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -374,6 +383,7 @@ EGLint rcGetFBParam_enc(void *self , EGLint param)
uint32_t rcCreateContext_enc(void *self , uint32_t config, uint32_t share, uint32_t glVersion)
{
+ AEMU_SCOPED_TRACE("rcCreateContext encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -416,6 +426,7 @@ uint32_t rcCreateContext_enc(void *self , uint32_t config, uint32_t share, uint3
void rcDestroyContext_enc(void *self , uint32_t context)
{
+ AEMU_SCOPED_TRACE("rcDestroyContext encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -441,6 +452,7 @@ void rcDestroyContext_enc(void *self , uint32_t context)
uint32_t rcCreateWindowSurface_enc(void *self , uint32_t config, uint32_t width, uint32_t height)
{
+ AEMU_SCOPED_TRACE("rcCreateWindowSurface encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -483,6 +495,7 @@ uint32_t rcCreateWindowSurface_enc(void *self , uint32_t config, uint32_t width,
void rcDestroyWindowSurface_enc(void *self , uint32_t windowSurface)
{
+ AEMU_SCOPED_TRACE("rcDestroyWindowSurface encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -508,6 +521,7 @@ void rcDestroyWindowSurface_enc(void *self , uint32_t windowSurface)
uint32_t rcCreateColorBuffer_enc(void *self , uint32_t width, uint32_t height, GLenum internalFormat)
{
+ AEMU_SCOPED_TRACE("rcCreateColorBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -550,6 +564,7 @@ uint32_t rcCreateColorBuffer_enc(void *self , uint32_t width, uint32_t height, G
void rcOpenColorBuffer_enc(void *self , uint32_t colorbuffer)
{
+ AEMU_SCOPED_TRACE("rcOpenColorBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -575,6 +590,7 @@ void rcOpenColorBuffer_enc(void *self , uint32_t colorbuffer)
void rcCloseColorBuffer_enc(void *self , uint32_t colorbuffer)
{
+ AEMU_SCOPED_TRACE("rcCloseColorBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -601,6 +617,7 @@ void rcCloseColorBuffer_enc(void *self , uint32_t colorbuffer)
void rcSetWindowColorBuffer_enc(void *self , uint32_t windowSurface, uint32_t colorBuffer)
{
+ AEMU_SCOPED_TRACE("rcSetWindowColorBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -627,6 +644,7 @@ void rcSetWindowColorBuffer_enc(void *self , uint32_t windowSurface, uint32_t co
int rcFlushWindowColorBuffer_enc(void *self , uint32_t windowSurface)
{
+ AEMU_SCOPED_TRACE("rcFlushWindowColorBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -667,6 +685,7 @@ int rcFlushWindowColorBuffer_enc(void *self , uint32_t windowSurface)
EGLint rcMakeCurrent_enc(void *self , uint32_t context, uint32_t drawSurf, uint32_t readSurf)
{
+ AEMU_SCOPED_TRACE("rcMakeCurrent encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -709,6 +728,7 @@ EGLint rcMakeCurrent_enc(void *self , uint32_t context, uint32_t drawSurf, uint3
void rcFBPost_enc(void *self , uint32_t colorBuffer)
{
+ AEMU_SCOPED_TRACE("rcFBPost encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -734,6 +754,7 @@ void rcFBPost_enc(void *self , uint32_t colorBuffer)
void rcFBSetSwapInterval_enc(void *self , EGLint interval)
{
+ AEMU_SCOPED_TRACE("rcFBSetSwapInterval encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -759,6 +780,7 @@ void rcFBSetSwapInterval_enc(void *self , EGLint interval)
void rcBindTexture_enc(void *self , uint32_t colorBuffer)
{
+ AEMU_SCOPED_TRACE("rcBindTexture encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -784,6 +806,7 @@ void rcBindTexture_enc(void *self , uint32_t colorBuffer)
void rcBindRenderbuffer_enc(void *self , uint32_t colorBuffer)
{
+ AEMU_SCOPED_TRACE("rcBindRenderbuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -809,6 +832,7 @@ void rcBindRenderbuffer_enc(void *self , uint32_t colorBuffer)
EGLint rcColorBufferCacheFlush_enc(void *self , uint32_t colorbuffer, EGLint postCount, int forRead)
{
+ AEMU_SCOPED_TRACE("rcColorBufferCacheFlush encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -851,6 +875,7 @@ EGLint rcColorBufferCacheFlush_enc(void *self , uint32_t colorbuffer, EGLint pos
void rcReadColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels)
{
+ AEMU_SCOPED_TRACE("rcReadColorBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -896,6 +921,7 @@ void rcReadColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y,
int rcUpdateColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels)
{
+ AEMU_SCOPED_TRACE("rcUpdateColorBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -949,6 +975,7 @@ int rcUpdateColorBuffer_enc(void *self , uint32_t colorbuffer, GLint x, GLint y,
int rcOpenColorBuffer2_enc(void *self , uint32_t colorbuffer)
{
+ AEMU_SCOPED_TRACE("rcOpenColorBuffer2 encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -989,6 +1016,7 @@ int rcOpenColorBuffer2_enc(void *self , uint32_t colorbuffer)
uint32_t rcCreateClientImage_enc(void *self , uint32_t context, EGLenum target, GLuint buffer)
{
+ AEMU_SCOPED_TRACE("rcCreateClientImage encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1031,6 +1059,7 @@ uint32_t rcCreateClientImage_enc(void *self , uint32_t context, EGLenum target,
int rcDestroyClientImage_enc(void *self , uint32_t image)
{
+ AEMU_SCOPED_TRACE("rcDestroyClientImage encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1071,6 +1100,7 @@ int rcDestroyClientImage_enc(void *self , uint32_t image)
void rcSelectChecksumHelper_enc(void *self , uint32_t newProtocol, uint32_t reserved)
{
+ AEMU_SCOPED_TRACE("rcSelectChecksumHelper encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1097,6 +1127,7 @@ void rcSelectChecksumHelper_enc(void *self , uint32_t newProtocol, uint32_t rese
void rcCreateSyncKHR_enc(void *self , EGLenum type, EGLint* attribs, uint32_t num_attribs, int destroy_when_signaled, uint64_t* glsync_out, uint64_t* syncthread_out)
{
+ AEMU_SCOPED_TRACE("rcCreateSyncKHR encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1145,6 +1176,7 @@ void rcCreateSyncKHR_enc(void *self , EGLenum type, EGLint* attribs, uint32_t nu
EGLint rcClientWaitSyncKHR_enc(void *self , uint64_t sync, EGLint flags, uint64_t timeout)
{
+ AEMU_SCOPED_TRACE("rcClientWaitSyncKHR encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1187,6 +1219,7 @@ EGLint rcClientWaitSyncKHR_enc(void *self , uint64_t sync, EGLint flags, uint64_
void rcFlushWindowColorBufferAsync_enc(void *self , uint32_t windowSurface)
{
+ AEMU_SCOPED_TRACE("rcFlushWindowColorBufferAsync encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1212,6 +1245,7 @@ void rcFlushWindowColorBufferAsync_enc(void *self , uint32_t windowSurface)
int rcDestroySyncKHR_enc(void *self , uint64_t sync)
{
+ AEMU_SCOPED_TRACE("rcDestroySyncKHR encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1252,6 +1286,7 @@ int rcDestroySyncKHR_enc(void *self , uint64_t sync)
void rcSetPuid_enc(void *self , uint64_t puid)
{
+ AEMU_SCOPED_TRACE("rcSetPuid encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1277,6 +1312,7 @@ void rcSetPuid_enc(void *self , uint64_t puid)
int rcUpdateColorBufferDMA_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, GLenum format, GLenum type, void* pixels, uint32_t pixels_size)
{
+ AEMU_SCOPED_TRACE("rcUpdateColorBufferDMA encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1326,6 +1362,7 @@ int rcUpdateColorBufferDMA_enc(void *self , uint32_t colorbuffer, GLint x, GLint
uint32_t rcCreateColorBufferDMA_enc(void *self , uint32_t width, uint32_t height, GLenum internalFormat, int frameworkFormat)
{
+ AEMU_SCOPED_TRACE("rcCreateColorBufferDMA encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1369,6 +1406,7 @@ uint32_t rcCreateColorBufferDMA_enc(void *self , uint32_t width, uint32_t height
void rcWaitSyncKHR_enc(void *self , uint64_t sync, EGLint flags)
{
+ AEMU_SCOPED_TRACE("rcWaitSyncKHR encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1395,6 +1433,7 @@ void rcWaitSyncKHR_enc(void *self , uint64_t sync, EGLint flags)
GLint rcCompose_enc(void *self , uint32_t bufferSize, void* buffer)
{
+ AEMU_SCOPED_TRACE("rcCompose encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1438,6 +1477,7 @@ GLint rcCompose_enc(void *self , uint32_t bufferSize, void* buffer)
int rcCreateDisplay_enc(void *self , uint32_t* displayId)
{
+ AEMU_SCOPED_TRACE("rcCreateDisplay encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1481,6 +1521,7 @@ int rcCreateDisplay_enc(void *self , uint32_t* displayId)
int rcDestroyDisplay_enc(void *self , uint32_t displayId)
{
+ AEMU_SCOPED_TRACE("rcDestroyDisplay encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1521,6 +1562,7 @@ int rcDestroyDisplay_enc(void *self , uint32_t displayId)
int rcSetDisplayColorBuffer_enc(void *self , uint32_t displayId, uint32_t colorBuffer)
{
+ AEMU_SCOPED_TRACE("rcSetDisplayColorBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1562,6 +1604,7 @@ int rcSetDisplayColorBuffer_enc(void *self , uint32_t displayId, uint32_t colorB
int rcGetDisplayColorBuffer_enc(void *self , uint32_t displayId, uint32_t* colorBuffer)
{
+ AEMU_SCOPED_TRACE("rcGetDisplayColorBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1606,6 +1649,7 @@ int rcGetDisplayColorBuffer_enc(void *self , uint32_t displayId, uint32_t* color
int rcGetColorBufferDisplay_enc(void *self , uint32_t colorBuffer, uint32_t* displayId)
{
+ AEMU_SCOPED_TRACE("rcGetColorBufferDisplay encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1650,6 +1694,7 @@ int rcGetColorBufferDisplay_enc(void *self , uint32_t colorBuffer, uint32_t* dis
int rcGetDisplayPose_enc(void *self , uint32_t displayId, GLint* x, GLint* y, uint32_t* w, uint32_t* h)
{
+ AEMU_SCOPED_TRACE("rcGetDisplayPose encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1706,6 +1751,7 @@ int rcGetDisplayPose_enc(void *self , uint32_t displayId, GLint* x, GLint* y, ui
int rcSetDisplayPose_enc(void *self , uint32_t displayId, GLint x, GLint y, uint32_t w, uint32_t h)
{
+ AEMU_SCOPED_TRACE("rcSetDisplayPose encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1750,6 +1796,7 @@ int rcSetDisplayPose_enc(void *self , uint32_t displayId, GLint x, GLint y, uint
GLint rcSetColorBufferVulkanMode_enc(void *self , uint32_t colorBuffer, uint32_t mode)
{
+ AEMU_SCOPED_TRACE("rcSetColorBufferVulkanMode encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1791,6 +1838,7 @@ GLint rcSetColorBufferVulkanMode_enc(void *self , uint32_t colorBuffer, uint32_t
void rcReadColorBufferYUV_enc(void *self , uint32_t colorbuffer, GLint x, GLint y, GLint width, GLint height, void* pixels, uint32_t pixels_size)
{
+ AEMU_SCOPED_TRACE("rcReadColorBufferYUV encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1835,6 +1883,7 @@ void rcReadColorBufferYUV_enc(void *self , uint32_t colorbuffer, GLint x, GLint
int rcIsSyncSignaled_enc(void *self , uint64_t sync)
{
+ AEMU_SCOPED_TRACE("rcIsSyncSignaled encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1875,6 +1924,7 @@ int rcIsSyncSignaled_enc(void *self , uint64_t sync)
void rcCreateColorBufferWithHandle_enc(void *self , uint32_t width, uint32_t height, GLenum internalFormat, uint32_t handle)
{
+ AEMU_SCOPED_TRACE("rcCreateColorBufferWithHandle encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1903,6 +1953,7 @@ void rcCreateColorBufferWithHandle_enc(void *self , uint32_t width, uint32_t hei
uint32_t rcCreateBuffer_enc(void *self , uint32_t size)
{
+ AEMU_SCOPED_TRACE("rcCreateBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1943,6 +1994,7 @@ uint32_t rcCreateBuffer_enc(void *self , uint32_t size)
void rcCloseBuffer_enc(void *self , uint32_t buffer)
{
+ AEMU_SCOPED_TRACE("rcCloseBuffer encode");
renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
IOStream *stream = ctx->m_stream;
@@ -1966,6 +2018,176 @@ void rcCloseBuffer_enc(void *self , uint32_t buffer)
}
+GLint rcSetColorBufferVulkanMode2_enc(void *self , uint32_t colorBuffer, uint32_t mode, uint32_t memoryProperty)
+{
+ AEMU_SCOPED_TRACE("rcSetColorBufferVulkanMode2 encode");
+
+ renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
+ IOStream *stream = ctx->m_stream;
+ ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
+ bool useChecksum = checksumCalculator->getVersion() > 0;
+
+ unsigned char *ptr;
+ unsigned char *buf;
+ const size_t sizeWithoutChecksum = 8 + 4 + 4 + 4;
+ const size_t checksumSize = checksumCalculator->checksumByteSize();
+ const size_t totalSize = sizeWithoutChecksum + checksumSize;
+ buf = stream->alloc(totalSize);
+ ptr = buf;
+ int tmp = OP_rcSetColorBufferVulkanMode2;memcpy(ptr, &tmp, 4); ptr += 4;
+ memcpy(ptr, &totalSize, 4); ptr += 4;
+
+ memcpy(ptr, &colorBuffer, 4); ptr += 4;
+ memcpy(ptr, &mode, 4); ptr += 4;
+ memcpy(ptr, &memoryProperty, 4); ptr += 4;
+
+ if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
+ if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
+
+
+ GLint retval;
+ stream->readback(&retval, 4);
+ if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
+ if (useChecksum) {
+ unsigned char *checksumBufPtr = NULL;
+ unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
+ if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
+ stream->readback(checksumBufPtr, checksumSize);
+ if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
+ ALOGE("rcSetColorBufferVulkanMode2: GL communication error, please report this issue to b.android.com.\n");
+ abort();
+ }
+ }
+ return retval;
+}
+
+int rcMapGpaToBufferHandle_enc(void *self , uint32_t bufferHandle, uint64_t gpa)
+{
+ AEMU_SCOPED_TRACE("rcMapGpaToBufferHandle encode");
+
+ renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
+ IOStream *stream = ctx->m_stream;
+ ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
+ bool useChecksum = checksumCalculator->getVersion() > 0;
+
+ unsigned char *ptr;
+ unsigned char *buf;
+ const size_t sizeWithoutChecksum = 8 + 4 + 8;
+ const size_t checksumSize = checksumCalculator->checksumByteSize();
+ const size_t totalSize = sizeWithoutChecksum + checksumSize;
+ buf = stream->alloc(totalSize);
+ ptr = buf;
+ int tmp = OP_rcMapGpaToBufferHandle;memcpy(ptr, &tmp, 4); ptr += 4;
+ memcpy(ptr, &totalSize, 4); ptr += 4;
+
+ memcpy(ptr, &bufferHandle, 4); ptr += 4;
+ memcpy(ptr, &gpa, 8); ptr += 8;
+
+ if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
+ if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
+
+
+ int retval;
+ stream->readback(&retval, 4);
+ if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
+ if (useChecksum) {
+ unsigned char *checksumBufPtr = NULL;
+ unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
+ if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
+ stream->readback(checksumBufPtr, checksumSize);
+ if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
+ ALOGE("rcMapGpaToBufferHandle: GL communication error, please report this issue to b.android.com.\n");
+ abort();
+ }
+ }
+ return retval;
+}
+
+uint32_t rcCreateBuffer2_enc(void *self , uint64_t size, uint32_t memoryProperty)
+{
+ AEMU_SCOPED_TRACE("rcCreateBuffer2 encode");
+
+ renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
+ IOStream *stream = ctx->m_stream;
+ ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
+ bool useChecksum = checksumCalculator->getVersion() > 0;
+
+ unsigned char *ptr;
+ unsigned char *buf;
+ const size_t sizeWithoutChecksum = 8 + 8 + 4;
+ const size_t checksumSize = checksumCalculator->checksumByteSize();
+ const size_t totalSize = sizeWithoutChecksum + checksumSize;
+ buf = stream->alloc(totalSize);
+ ptr = buf;
+ int tmp = OP_rcCreateBuffer2;memcpy(ptr, &tmp, 4); ptr += 4;
+ memcpy(ptr, &totalSize, 4); ptr += 4;
+
+ memcpy(ptr, &size, 8); ptr += 8;
+ memcpy(ptr, &memoryProperty, 4); ptr += 4;
+
+ if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
+ if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
+
+
+ uint32_t retval;
+ stream->readback(&retval, 4);
+ if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
+ if (useChecksum) {
+ unsigned char *checksumBufPtr = NULL;
+ unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
+ if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
+ stream->readback(checksumBufPtr, checksumSize);
+ if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
+ ALOGE("rcCreateBuffer2: GL communication error, please report this issue to b.android.com.\n");
+ abort();
+ }
+ }
+ return retval;
+}
+
+int rcMapGpaToBufferHandle2_enc(void *self , uint32_t bufferHandle, uint64_t gpa, uint64_t size)
+{
+ AEMU_SCOPED_TRACE("rcMapGpaToBufferHandle2 encode");
+
+ renderControl_encoder_context_t *ctx = (renderControl_encoder_context_t *)self;
+ IOStream *stream = ctx->m_stream;
+ ChecksumCalculator *checksumCalculator = ctx->m_checksumCalculator;
+ bool useChecksum = checksumCalculator->getVersion() > 0;
+
+ unsigned char *ptr;
+ unsigned char *buf;
+ const size_t sizeWithoutChecksum = 8 + 4 + 8 + 8;
+ const size_t checksumSize = checksumCalculator->checksumByteSize();
+ const size_t totalSize = sizeWithoutChecksum + checksumSize;
+ buf = stream->alloc(totalSize);
+ ptr = buf;
+ int tmp = OP_rcMapGpaToBufferHandle2;memcpy(ptr, &tmp, 4); ptr += 4;
+ memcpy(ptr, &totalSize, 4); ptr += 4;
+
+ memcpy(ptr, &bufferHandle, 4); ptr += 4;
+ memcpy(ptr, &gpa, 8); ptr += 8;
+ memcpy(ptr, &size, 8); ptr += 8;
+
+ if (useChecksum) checksumCalculator->addBuffer(buf, ptr-buf);
+ if (useChecksum) checksumCalculator->writeChecksum(ptr, checksumSize); ptr += checksumSize;
+
+
+ int retval;
+ stream->readback(&retval, 4);
+ if (useChecksum) checksumCalculator->addBuffer(&retval, 4);
+ if (useChecksum) {
+ unsigned char *checksumBufPtr = NULL;
+ unsigned char checksumBuf[ChecksumCalculator::kMaxChecksumSize];
+ if (checksumSize > 0) checksumBufPtr = &checksumBuf[0];
+ stream->readback(checksumBufPtr, checksumSize);
+ if (!checksumCalculator->validate(checksumBufPtr, checksumSize)) {
+ ALOGE("rcMapGpaToBufferHandle2: GL communication error, please report this issue to b.android.com.\n");
+ abort();
+ }
+ }
+ return retval;
+}
+
} // namespace
renderControl_encoder_context_t::renderControl_encoder_context_t(IOStream *stream, ChecksumCalculator *checksumCalculator)
@@ -2024,5 +2246,9 @@ renderControl_encoder_context_t::renderControl_encoder_context_t(IOStream *strea
this->rcCreateColorBufferWithHandle = &rcCreateColorBufferWithHandle_enc;
this->rcCreateBuffer = &rcCreateBuffer_enc;
this->rcCloseBuffer = &rcCloseBuffer_enc;
+ this->rcSetColorBufferVulkanMode2 = &rcSetColorBufferVulkanMode2_enc;
+ this->rcMapGpaToBufferHandle = &rcMapGpaToBufferHandle_enc;
+ this->rcCreateBuffer2 = &rcCreateBuffer2_enc;
+ this->rcMapGpaToBufferHandle2 = &rcMapGpaToBufferHandle2_enc;
}
diff --git a/system/renderControl_enc/renderControl_entry.cpp b/system/renderControl_enc/renderControl_entry.cpp
index ffa0cdd6..0ea37d61 100644
--- a/system/renderControl_enc/renderControl_entry.cpp
+++ b/system/renderControl_enc/renderControl_entry.cpp
@@ -56,6 +56,10 @@ extern "C" {
void rcCreateColorBufferWithHandle(uint32_t width, uint32_t height, GLenum internalFormat, uint32_t handle);
uint32_t rcCreateBuffer(uint32_t size);
void rcCloseBuffer(uint32_t buffer);
+ GLint rcSetColorBufferVulkanMode2(uint32_t colorBuffer, uint32_t mode, uint32_t memoryProperty);
+ int rcMapGpaToBufferHandle(uint32_t bufferHandle, uint64_t gpa);
+ uint32_t rcCreateBuffer2(uint64_t size, uint32_t memoryProperty);
+ int rcMapGpaToBufferHandle2(uint32_t bufferHandle, uint64_t gpa, uint64_t size);
};
#ifndef GET_CONTEXT
@@ -370,3 +374,27 @@ void rcCloseBuffer(uint32_t buffer)
ctx->rcCloseBuffer(ctx, buffer);
}
+GLint rcSetColorBufferVulkanMode2(uint32_t colorBuffer, uint32_t mode, uint32_t memoryProperty)
+{
+ GET_CONTEXT;
+ return ctx->rcSetColorBufferVulkanMode2(ctx, colorBuffer, mode, memoryProperty);
+}
+
+int rcMapGpaToBufferHandle(uint32_t bufferHandle, uint64_t gpa)
+{
+ GET_CONTEXT;
+ return ctx->rcMapGpaToBufferHandle(ctx, bufferHandle, gpa);
+}
+
+uint32_t rcCreateBuffer2(uint64_t size, uint32_t memoryProperty)
+{
+ GET_CONTEXT;
+ return ctx->rcCreateBuffer2(ctx, size, memoryProperty);
+}
+
+int rcMapGpaToBufferHandle2(uint32_t bufferHandle, uint64_t gpa, uint64_t size)
+{
+ GET_CONTEXT;
+ return ctx->rcMapGpaToBufferHandle2(ctx, bufferHandle, gpa, size);
+}
+
diff --git a/system/renderControl_enc/renderControl_ftable.h b/system/renderControl_enc/renderControl_ftable.h
index 13aebedc..247a0bd1 100644
--- a/system/renderControl_enc/renderControl_ftable.h
+++ b/system/renderControl_enc/renderControl_ftable.h
@@ -59,6 +59,10 @@ static const struct _renderControl_funcs_by_name {
{"rcCreateColorBufferWithHandle", (void*)rcCreateColorBufferWithHandle},
{"rcCreateBuffer", (void*)rcCreateBuffer},
{"rcCloseBuffer", (void*)rcCloseBuffer},
+ {"rcSetColorBufferVulkanMode2", (void*)rcSetColorBufferVulkanMode2},
+ {"rcMapGpaToBufferHandle", (void*)rcMapGpaToBufferHandle},
+ {"rcCreateBuffer2", (void*)rcCreateBuffer2},
+ {"rcMapGpaToBufferHandle2", (void*)rcMapGpaToBufferHandle2},
};
static const int renderControl_num_funcs = sizeof(renderControl_funcs_by_name) / sizeof(struct _renderControl_funcs_by_name);
diff --git a/system/renderControl_enc/renderControl_opcodes.h b/system/renderControl_enc/renderControl_opcodes.h
index f1207f26..16c02141 100644
--- a/system/renderControl_enc/renderControl_opcodes.h
+++ b/system/renderControl_enc/renderControl_opcodes.h
@@ -54,7 +54,11 @@
#define OP_rcCreateColorBufferWithHandle 10048
#define OP_rcCreateBuffer 10049
#define OP_rcCloseBuffer 10050
-#define OP_last 10051
+#define OP_rcSetColorBufferVulkanMode2 10051
+#define OP_rcMapGpaToBufferHandle 10052
+#define OP_rcCreateBuffer2 10053
+#define OP_rcMapGpaToBufferHandle2 10054
+#define OP_last 10055
#endif
diff --git a/system/vulkan/CMakeLists.txt b/system/vulkan/CMakeLists.txt
index 65bc00a5..eb2f6122 100644
--- a/system/vulkan/CMakeLists.txt
+++ b/system/vulkan/CMakeLists.txt
@@ -4,7 +4,7 @@
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/vulkan/Android.mk" "5cb873c72cc859fac3800961059c1b203ed1abb400ee643178c18e04961d49e8")
set(vulkan.ranchu_src func_table.cpp goldfish_vulkan.cpp)
android_add_library(TARGET vulkan.ranchu SHARED LICENSE Apache-2.0 SRC func_table.cpp goldfish_vulkan.cpp)
-target_include_directories(vulkan.ranchu PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/system/vulkan ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include)
-target_compile_definitions(vulkan.ranchu PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"goldfish_vulkan\"" "-DVK_USE_PLATFORM_ANDROID_KHR" "-DVK_NO_PROTOTYPES")
+target_include_directories(vulkan.ranchu PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/shared/gralloc_cb/include ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/system/vulkan ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include)
+target_compile_definitions(vulkan.ranchu PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"goldfish_vulkan\"" "-DVK_USE_PLATFORM_ANDROID_KHR" "-DVK_NO_PROTOTYPES")
target_compile_options(vulkan.ranchu PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-fvisibility=hidden" "-fstrict-aliasing" "-Wno-unused-function")
-target_link_libraries(vulkan.ranchu PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui androidemu cutils utils log _renderControl_enc GLESv2_enc GLESv1_enc OpenglCodecCommon_host PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
+target_link_libraries(vulkan.ranchu PRIVATE OpenglSystemCommon android-emu-shared vulkan_enc gui log _renderControl_enc GLESv2_enc GLESv1_enc OpenglCodecCommon_host cutils utils androidemu PRIVATE gralloc_cb_host GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
diff --git a/system/vulkan/func_table.cpp b/system/vulkan/func_table.cpp
index 51913e8e..6a4a1289 100644
--- a/system/vulkan/func_table.cpp
+++ b/system/vulkan/func_table.cpp
@@ -5338,6 +5338,33 @@ static void entry_vkQueueBindSparseAsyncGOOGLE(
vkEnc->vkQueueBindSparseAsyncGOOGLE(queue, bindInfoCount, pBindInfo, fence);
}
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+static void entry_vkGetLinearImageLayoutGOOGLE(
+ VkDevice device,
+ VkFormat format,
+ VkDeviceSize* pOffset,
+ VkDeviceSize* pRowPitchAlignment)
+{
+ AEMU_SCOPED_TRACE("vkGetLinearImageLayoutGOOGLE");
+ auto vkEnc = HostConnection::get()->vkEncoder();
+ vkEnc->vkGetLinearImageLayoutGOOGLE(device, format, pOffset, pRowPitchAlignment);
+}
+static void dynCheck_entry_vkGetLinearImageLayoutGOOGLE(
+ VkDevice device,
+ VkFormat format,
+ VkDeviceSize* pOffset,
+ VkDeviceSize* pRowPitchAlignment)
+{
+ auto resources = ResourceTracker::get();
+ if (!resources->hasDeviceExtension(device, "VK_GOOGLE_linear_image_layout"))
+ {
+ sOnInvalidDynamicallyCheckedCall("vkGetLinearImageLayoutGOOGLE", "VK_GOOGLE_linear_image_layout");
+ }
+ AEMU_SCOPED_TRACE("vkGetLinearImageLayoutGOOGLE");
+ auto vkEnc = HostConnection::get()->vkEncoder();
+ vkEnc->vkGetLinearImageLayoutGOOGLE(device, format, pOffset, pRowPitchAlignment);
+}
+#endif
void* goldfish_vulkan_get_proc_address(const char* name){
#ifdef VK_VERSION_1_0
if (!strcmp(name, "vkCreateInstance"))
@@ -6813,6 +6840,12 @@ void* goldfish_vulkan_get_proc_address(const char* name){
return nullptr;
}
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+ if (!strcmp(name, "vkGetLinearImageLayoutGOOGLE"))
+ {
+ return nullptr;
+ }
+#endif
return nullptr;
}
void* goldfish_vulkan_get_instance_proc_address(VkInstance instance, const char* name){
@@ -8389,6 +8422,12 @@ void* goldfish_vulkan_get_instance_proc_address(VkInstance instance, const char*
return hasExt ? (void*)entry_vkQueueBindSparseAsyncGOOGLE : nullptr;
}
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+ if (!strcmp(name, "vkGetLinearImageLayoutGOOGLE"))
+ {
+ return (void*)dynCheck_entry_vkGetLinearImageLayoutGOOGLE;
+ }
+#endif
return nullptr;
}
void* goldfish_vulkan_get_device_proc_address(VkDevice device, const char* name){
@@ -10036,6 +10075,13 @@ void* goldfish_vulkan_get_device_proc_address(VkDevice device, const char* name)
return hasExt ? (void*)entry_vkQueueBindSparseAsyncGOOGLE : nullptr;
}
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+ if (!strcmp(name, "vkGetLinearImageLayoutGOOGLE"))
+ {
+ bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_linear_image_layout");
+ return hasExt ? (void*)entry_vkGetLinearImageLayoutGOOGLE : nullptr;
+ }
+#endif
return nullptr;
}
diff --git a/system/vulkan/func_table.h b/system/vulkan/func_table.h
index 9c2e5beb..a3a7f990 100644
--- a/system/vulkan/func_table.h
+++ b/system/vulkan/func_table.h
@@ -294,6 +294,8 @@ namespace goldfish_vk {
#endif
#ifdef VK_GOOGLE_async_queue_submit
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#endif
void* goldfish_vulkan_get_proc_address(const char* name);
void* goldfish_vulkan_get_instance_proc_address(VkInstance instance, const char* name);
void* goldfish_vulkan_get_device_proc_address(VkDevice device, const char* name);
diff --git a/system/vulkan_enc/CMakeLists.txt b/system/vulkan_enc/CMakeLists.txt
index 5b970156..44886583 100644
--- a/system/vulkan_enc/CMakeLists.txt
+++ b/system/vulkan_enc/CMakeLists.txt
@@ -4,7 +4,7 @@
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc/Android.mk" "103f3f10c8af73d3d5c4263c4faa5bb70ebdbfbc9ed6f068a338d57344e2aa45")
set(vulkan_enc_src AndroidHardwareBuffer.cpp HostVisibleMemoryVirtualization.cpp Resources.cpp Validation.cpp VulkanStreamGuest.cpp VulkanHandleMapping.cpp ResourceTracker.cpp VkEncoder.cpp goldfish_vk_extension_structs_guest.cpp goldfish_vk_marshaling_guest.cpp goldfish_vk_deepcopy_guest.cpp goldfish_vk_handlemap_guest.cpp goldfish_vk_transform_guest.cpp)
android_add_library(TARGET vulkan_enc SHARED LICENSE Apache-2.0 SRC AndroidHardwareBuffer.cpp HostVisibleMemoryVirtualization.cpp Resources.cpp Validation.cpp VulkanStreamGuest.cpp VulkanHandleMapping.cpp ResourceTracker.cpp VkEncoder.cpp goldfish_vk_extension_structs_guest.cpp goldfish_vk_marshaling_guest.cpp goldfish_vk_deepcopy_guest.cpp goldfish_vk_handlemap_guest.cpp goldfish_vk_transform_guest.cpp)
-target_include_directories(vulkan_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include/vulkan)
-target_compile_definitions(vulkan_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"goldfish_vulkan\"" "-DVK_ANDROID_native_buffer" "-DVK_GOOGLE_address_space" "-DVK_USE_PLATFORM_ANDROID_KHR" "-DVK_NO_PROTOTYPES" "-D__ANDROID_API__=28")
+target_include_directories(vulkan_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/GoldfishAddressSpace/include ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include-types ${GOLDFISH_DEVICE_ROOT}/shared/qemupipe/include ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include/vulkan)
+target_compile_definitions(vulkan_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGFXSTREAM" "-DLOG_TAG=\"goldfish_vulkan\"" "-DVK_ANDROID_native_buffer" "-DVK_GOOGLE_address_space" "-DVK_USE_PLATFORM_ANDROID_KHR" "-DVK_NO_PROTOTYPES" "-D__ANDROID_API__=28")
target_compile_options(vulkan_enc PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-Werror" "-fstrict-aliasing")
-target_link_libraries(vulkan_enc PRIVATE gui log android-emu-shared androidemu cutils utils _renderControl_enc OpenglCodecCommon_host PRIVATE GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
+target_link_libraries(vulkan_enc PRIVATE gui log android-emu-shared _renderControl_enc OpenglCodecCommon_host cutils utils androidemu PRIVATE GoldfishAddressSpace_host qemupipe_host) \ No newline at end of file
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 2293df01..b00a5627 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -46,16 +46,21 @@ void zx_event_create(int, zx_handle_t*) { }
#ifdef VK_USE_PLATFORM_FUCHSIA
#include <cutils/native_handle.h>
-#include <fuchsia/hardware/goldfish/cpp/fidl.h>
-#include <fuchsia/sysmem/cpp/fidl.h>
+#include <fuchsia/hardware/goldfish/llcpp/fidl.h>
+#include <fuchsia/sysmem/llcpp/fidl.h>
#include <lib/zx/channel.h>
#include <lib/zx/vmo.h>
+#include <zircon/errors.h>
#include <zircon/process.h>
+#include <zircon/rights.h>
#include <zircon/syscalls.h>
#include <zircon/syscalls/object.h>
#include "services/service_connector.h"
+#define GET_STATUS_SAFE(result, member) \
+ ((result).ok() ? ((result).Unwrap()->member) : ZX_OK)
+
struct AHardwareBuffer;
void AHardwareBuffer_release(AHardwareBuffer*) { }
@@ -271,12 +276,12 @@ public:
};
struct VkCommandBuffer_Info {
- VkEncoder** lastUsedEncoderPtr = nullptr;
+ VkEncoder* lastUsedEncoder = nullptr;
uint32_t sequenceNumber = 0;
};
struct VkQueue_Info {
- VkEncoder** lastUsedEncoderPtr = nullptr;
+ VkEncoder* lastUsedEncoder = nullptr;
uint32_t sequenceNumber = 0;
};
@@ -394,15 +399,10 @@ public:
auto it = info_VkCommandBuffer.find(commandBuffer);
if (it == info_VkCommandBuffer.end()) return;
auto& info = it->second;
- auto lastUsedEncoder =
- info.lastUsedEncoderPtr ?
- *(info.lastUsedEncoderPtr) : nullptr;
-
- if (lastUsedEncoder) {
- delete info.lastUsedEncoderPtr;
- info.lastUsedEncoderPtr = nullptr;
+ if (info.lastUsedEncoder) {
+ info.lastUsedEncoder->decRef();
}
-
+ info.lastUsedEncoder = nullptr;
info_VkCommandBuffer.erase(commandBuffer);
}
@@ -412,15 +412,11 @@ public:
auto it = info_VkQueue.find(queue);
if (it == info_VkQueue.end()) return;
auto& info = it->second;
- auto lastUsedEncoder =
- info.lastUsedEncoderPtr ?
- *(info.lastUsedEncoderPtr) : nullptr;
-
- if (lastUsedEncoder) {
- delete info.lastUsedEncoderPtr;
- info.lastUsedEncoderPtr = nullptr;
+ auto lastUsedEncoder = info.lastUsedEncoder;
+ if (info.lastUsedEncoder) {
+ info.lastUsedEncoder->decRef();
}
-
+ info.lastUsedEncoder = nullptr;
info_VkQueue.erase(queue);
}
@@ -811,13 +807,17 @@ public:
ALOGE("failed to open control device");
abort();
}
- mControlDevice.Bind(std::move(channel));
+ mControlDevice = std::make_unique<
+ llcpp::fuchsia::hardware::goldfish::ControlDevice::SyncClient>(
+ std::move(channel));
zx::channel sysmem_channel(GetConnectToServiceFunction()("/svc/fuchsia.sysmem.Allocator"));
if (!sysmem_channel) {
ALOGE("failed to open sysmem connection");
}
- mSysmemAllocator.Bind(std::move(sysmem_channel));
+ mSysmemAllocator =
+ std::make_unique<llcpp::fuchsia::sysmem::Allocator::SyncClient>(
+ std::move(sysmem_channel));
}
#endif
@@ -1676,24 +1676,47 @@ public:
const VkBufferCollectionCreateInfoFUCHSIA* pInfo,
const VkAllocationCallbacks*,
VkBufferCollectionFUCHSIA* pCollection) {
- fuchsia::sysmem::BufferCollectionTokenSyncPtr token;
+ zx::channel token_client;
+
if (pInfo->collectionToken) {
- token.Bind(zx::channel(pInfo->collectionToken));
+ token_client = zx::channel(pInfo->collectionToken);
} else {
- zx_status_t status = mSysmemAllocator->AllocateSharedCollection(token.NewRequest());
+ zx::channel token_server;
+ zx_status_t status =
+ zx::channel::create(0, &token_server, &token_client);
if (status != ZX_OK) {
- ALOGE("AllocateSharedCollection failed: %d", status);
+ ALOGE("zx_channel_create failed: %d", status);
+ return VK_ERROR_INITIALIZATION_FAILED;
+ }
+
+ auto result = mSysmemAllocator->AllocateSharedCollection(
+ std::move(token_server));
+ if (!result.ok()) {
+ ALOGE("AllocateSharedCollection failed: %d", result.status());
return VK_ERROR_INITIALIZATION_FAILED;
}
}
- auto sysmem_collection = new fuchsia::sysmem::BufferCollectionSyncPtr;
- zx_status_t status = mSysmemAllocator->BindSharedCollection(
- std::move(token), sysmem_collection->NewRequest());
+
+ zx::channel collection_client, collection_server;
+ zx_status_t status =
+ zx::channel::create(0, &collection_client, &collection_server);
if (status != ZX_OK) {
- ALOGE("BindSharedCollection failed: %d", status);
+ ALOGE("zx_channel_create failed: %d", status);
+ return VK_ERROR_INITIALIZATION_FAILED;
+ }
+
+ auto result = mSysmemAllocator->BindSharedCollection(
+ std::move(token_client), std::move(collection_server));
+ if (!result.ok()) {
+ ALOGE("BindSharedCollection failed: %d", result.status());
return VK_ERROR_INITIALIZATION_FAILED;
}
+
+ auto sysmem_collection =
+ new llcpp::fuchsia::sysmem::BufferCollection::SyncClient(
+ std::move(collection_client));
*pCollection = reinterpret_cast<VkBufferCollectionFUCHSIA>(sysmem_collection);
+
return VK_SUCCESS;
}
@@ -1701,32 +1724,37 @@ public:
void*, VkResult, VkDevice,
VkBufferCollectionFUCHSIA collection,
const VkAllocationCallbacks*) {
- auto sysmem_collection = reinterpret_cast<fuchsia::sysmem::BufferCollectionSyncPtr*>(collection);
- if (sysmem_collection->is_bound()) {
- (*sysmem_collection)->Close();
+ auto sysmem_collection = reinterpret_cast<
+ llcpp::fuchsia::sysmem::BufferCollection::SyncClient*>(collection);
+ if (sysmem_collection) {
+ sysmem_collection->Close();
}
delete sysmem_collection;
}
- inline fuchsia::sysmem::BufferCollectionConstraints
- defaultBufferCollectionConstraints(size_t min_size_bytes,
- size_t buffer_count) {
- fuchsia::sysmem::BufferCollectionConstraints constraints = {};
+ inline llcpp::fuchsia::sysmem::BufferCollectionConstraints defaultBufferCollectionConstraints(
+ size_t min_size_bytes,
+ size_t buffer_count) {
+ llcpp::fuchsia::sysmem::BufferCollectionConstraints constraints = {};
constraints.min_buffer_count = buffer_count;
constraints.has_buffer_memory_constraints = true;
- fuchsia::sysmem::BufferMemoryConstraints& buffer_constraints =
+ llcpp::fuchsia::sysmem::BufferMemoryConstraints& buffer_constraints =
constraints.buffer_memory_constraints;
buffer_constraints.min_size_bytes = min_size_bytes;
buffer_constraints.max_size_bytes = 0xffffffff;
buffer_constraints.physically_contiguous_required = false;
buffer_constraints.secure_required = false;
- buffer_constraints.ram_domain_supported = false;
- buffer_constraints.cpu_domain_supported = false;
+
+ // No restrictions on coherency domain or Heaps.
+ buffer_constraints.ram_domain_supported = true;
+ buffer_constraints.cpu_domain_supported = true;
buffer_constraints.inaccessible_domain_supported = true;
- buffer_constraints.heap_permitted_count = 1;
+ buffer_constraints.heap_permitted_count = 2;
buffer_constraints.heap_permitted[0] =
- fuchsia::sysmem::HeapType::GOLDFISH_DEVICE_LOCAL;
+ llcpp::fuchsia::sysmem::HeapType::GOLDFISH_DEVICE_LOCAL;
+ buffer_constraints.heap_permitted[1] =
+ llcpp::fuchsia::sysmem::HeapType::GOLDFISH_HOST_VISIBLE;
return constraints;
}
@@ -1736,9 +1764,9 @@ public:
uint32_t usage = 0u;
VkImageUsageFlags imageUsage = pImageInfo->usage;
-#define SetUsageBit(USAGE) \
- if (imageUsage & VK_IMAGE_USAGE_##USAGE##_BIT) { \
- usage |= fuchsia::sysmem::VULKAN_IMAGE_USAGE_##USAGE; \
+#define SetUsageBit(USAGE) \
+ if (imageUsage & VK_IMAGE_USAGE_##USAGE##_BIT) { \
+ usage |= llcpp::fuchsia::sysmem::VULKAN_IMAGE_USAGE_##USAGE; \
}
SetUsageBit(COLOR_ATTACHMENT);
@@ -1756,9 +1784,9 @@ public:
VkBufferUsageFlags bufferUsage =
pBufferConstraintsInfo->pBufferCreateInfo->usage;
-#define SetUsageBit(USAGE) \
- if (bufferUsage & VK_BUFFER_USAGE_##USAGE##_BIT) { \
- usage |= fuchsia::sysmem::VULKAN_BUFFER_USAGE_##USAGE; \
+#define SetUsageBit(USAGE) \
+ if (bufferUsage & VK_BUFFER_USAGE_##USAGE##_BIT) { \
+ usage |= llcpp::fuchsia::sysmem::VULKAN_BUFFER_USAGE_##USAGE; \
}
SetUsageBit(TRANSFER_SRC);
@@ -1776,20 +1804,17 @@ public:
}
VkResult setBufferCollectionConstraints(
- fuchsia::sysmem::BufferCollectionSyncPtr* collection,
+ VkEncoder* enc, VkDevice device,
+ llcpp::fuchsia::sysmem::BufferCollection::SyncClient* collection,
const VkImageCreateInfo* pImageInfo) {
if (pImageInfo == nullptr) {
ALOGE("setBufferCollectionConstraints: pImageInfo cannot be null.");
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
- // TODO(liyl): Currently the size only works for RGBA8 and BGRA8 images.
- // We should set the size based on its actual format.
- fuchsia::sysmem::BufferCollectionConstraints constraints =
+ llcpp::fuchsia::sysmem::BufferCollectionConstraints constraints =
defaultBufferCollectionConstraints(
- /* min_size_bytes */ pImageInfo->extent.width *
- pImageInfo->extent.height * 4,
- /* buffer_count */ 1u);
+ /* min_size_bytes */ 0, /* buffer_count */ 1u);
constraints.usage.vulkan =
getBufferCollectionConstraintsVulkanImageUsage(pImageInfo);
@@ -1805,11 +1830,46 @@ public:
VK_FORMAT_B8G8R8A8_UNORM,
VK_FORMAT_R8G8B8A8_UNORM,
};
+ } else {
+ // If image format is predefined, check on host if the format,
+ // tiling and usage is supported.
+ AutoLock lock(mLock);
+ auto deviceIt = info_VkDevice.find(device);
+ if (deviceIt == info_VkDevice.end()) {
+ return VK_ERROR_INITIALIZATION_FAILED;
+ }
+ auto& deviceInfo = deviceIt->second;
+
+ VkImageFormatProperties format_properties;
+ auto result = enc->vkGetPhysicalDeviceImageFormatProperties(
+ deviceInfo.physdev, pImageInfo->format, pImageInfo->imageType,
+ pImageInfo->tiling, pImageInfo->usage, pImageInfo->flags, &format_properties);
+ if (result != VK_SUCCESS) {
+ ALOGE(
+ "%s: Image format (%u) type (%u) tiling (%u) "
+ "usage (%u) flags (%u) not supported by physical "
+ "device",
+ __func__, static_cast<uint32_t>(pImageInfo->format),
+ static_cast<uint32_t>(pImageInfo->imageType),
+ static_cast<uint32_t>(pImageInfo->tiling),
+ static_cast<uint32_t>(pImageInfo->usage),
+ static_cast<uint32_t>(pImageInfo->flags));
+ return VK_ERROR_FORMAT_NOT_SUPPORTED;
+ }
}
constraints.image_format_constraints_count = formats.size();
uint32_t format_index = 0;
for (VkFormat format : formats) {
- fuchsia::sysmem::ImageFormatConstraints& image_constraints =
+ // Get row alignment from host GPU.
+ VkDeviceSize offset;
+ VkDeviceSize rowPitchAlignment;
+ enc->vkGetLinearImageLayoutGOOGLE(device, format, &offset, &rowPitchAlignment);
+
+ ALOGD("vkGetLinearImageLayoutGOOGLE: format %d offset %lu rowPitchAlignment = %lu",
+ (int)format, offset, rowPitchAlignment);
+
+ llcpp::fuchsia::sysmem::ImageFormatConstraints&
+ image_constraints =
constraints.image_format_constraints[format_index++];
switch (format) {
case VK_FORMAT_B8G8R8A8_SINT:
@@ -1819,7 +1879,7 @@ public:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B8G8R8A8_USCALED:
image_constraints.pixel_format.type =
- fuchsia::sysmem::PixelFormatType::BGRA32;
+ llcpp::fuchsia::sysmem::PixelFormatType::BGRA32;
break;
case VK_FORMAT_R8G8B8A8_SINT:
case VK_FORMAT_R8G8B8A8_UNORM:
@@ -1828,39 +1888,45 @@ public:
case VK_FORMAT_R8G8B8A8_SSCALED:
case VK_FORMAT_R8G8B8A8_USCALED:
image_constraints.pixel_format.type =
- fuchsia::sysmem::PixelFormatType::R8G8B8A8;
+ llcpp::fuchsia::sysmem::PixelFormatType::R8G8B8A8;
break;
default:
return VK_ERROR_FORMAT_NOT_SUPPORTED;
}
image_constraints.color_spaces_count = 1;
image_constraints.color_space[0].type =
- fuchsia::sysmem::ColorSpaceType::SRGB;
+ llcpp::fuchsia::sysmem::ColorSpaceType::SRGB;
image_constraints.min_coded_width = pImageInfo->extent.width;
image_constraints.max_coded_width = 0xfffffff;
image_constraints.min_coded_height = pImageInfo->extent.height;
image_constraints.max_coded_height = 0xffffffff;
- image_constraints.min_bytes_per_row =
- pImageInfo->extent.width * 4;
+ // The min_bytes_per_row can be calculated by sysmem using
+ // |min_coded_width|, |bytes_per_row_divisor| and color format.
+ image_constraints.min_bytes_per_row = 0;
image_constraints.max_bytes_per_row = 0xffffffff;
image_constraints.max_coded_width_times_coded_height =
0xffffffff;
image_constraints.layers = 1;
image_constraints.coded_width_divisor = 1;
image_constraints.coded_height_divisor = 1;
- image_constraints.bytes_per_row_divisor = 1;
+ image_constraints.bytes_per_row_divisor = rowPitchAlignment;
image_constraints.start_offset_divisor = 1;
image_constraints.display_width_divisor = 1;
image_constraints.display_height_divisor = 1;
}
}
- (*collection)->SetConstraints(true, constraints);
+ auto result = collection->SetConstraints(true, std::move(constraints));
+ if (!result.ok()) {
+ ALOGE("setBufferCollectionConstraints: SetConstraints failed: %d",
+ result.status());
+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ }
return VK_SUCCESS;
}
VkResult setBufferCollectionBufferConstraints(
- fuchsia::sysmem::BufferCollectionSyncPtr* collection,
+ llcpp::fuchsia::sysmem::BufferCollection::SyncClient* collection,
const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo) {
if (pBufferConstraintsInfo == nullptr) {
ALOGE(
@@ -1869,26 +1935,31 @@ public:
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
- fuchsia::sysmem::BufferCollectionConstraints constraints =
+ llcpp::fuchsia::sysmem::BufferCollectionConstraints constraints =
defaultBufferCollectionConstraints(
- /* min_size_bytes */ pBufferConstraintsInfo->pBufferCreateInfo
- ->size,
+ /* min_size_bytes */ pBufferConstraintsInfo->pBufferCreateInfo->size,
/* buffer_count */ pBufferConstraintsInfo->minCount);
constraints.usage.vulkan =
getBufferCollectionConstraintsVulkanBufferUsage(
pBufferConstraintsInfo);
- (*collection)->SetConstraints(true, constraints);
+ auto result = collection->SetConstraints(true, std::move(constraints));
+ if (!result.ok()) {
+ ALOGE("setBufferCollectionConstraints: SetConstraints failed: %d",
+ result.status());
+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ }
return VK_SUCCESS;
}
VkResult on_vkSetBufferCollectionConstraintsFUCHSIA(
- void*, VkResult, VkDevice,
+ void* context, VkResult, VkDevice device,
VkBufferCollectionFUCHSIA collection,
const VkImageCreateInfo* pImageInfo) {
- auto sysmem_collection =
- reinterpret_cast<fuchsia::sysmem::BufferCollectionSyncPtr*>(collection);
- return setBufferCollectionConstraints(sysmem_collection, pImageInfo);
+ VkEncoder* enc = (VkEncoder*)context;
+ auto sysmem_collection = reinterpret_cast<
+ llcpp::fuchsia::sysmem::BufferCollection::SyncClient*>(collection);
+ return setBufferCollectionConstraints(enc, device, sysmem_collection, pImageInfo);
}
VkResult on_vkSetBufferCollectionBufferConstraintsFUCHSIA(
@@ -1897,9 +1968,8 @@ public:
VkDevice,
VkBufferCollectionFUCHSIA collection,
const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo) {
- auto sysmem_collection =
- reinterpret_cast<fuchsia::sysmem::BufferCollectionSyncPtr*>(
- collection);
+ auto sysmem_collection = reinterpret_cast<
+ llcpp::fuchsia::sysmem::BufferCollection::SyncClient*>(collection);
return setBufferCollectionBufferConstraints(sysmem_collection,
pBufferConstraintsInfo);
}
@@ -1909,17 +1979,28 @@ public:
VkDevice device,
VkBufferCollectionFUCHSIA collection,
VkBufferCollectionPropertiesFUCHSIA* pProperties) {
- auto sysmem_collection = reinterpret_cast<fuchsia::sysmem::BufferCollectionSyncPtr*>(collection);
- fuchsia::sysmem::BufferCollectionInfo_2 info;
- zx_status_t status2;
- zx_status_t status = (*sysmem_collection)->WaitForBuffersAllocated(&status2, &info);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGE("Failed wait for allocation: %d %d", status, status2);
+ auto sysmem_collection = reinterpret_cast<
+ llcpp::fuchsia::sysmem::BufferCollection::SyncClient*>(collection);
+
+ auto result = sysmem_collection->WaitForBuffersAllocated();
+ if (!result.ok() || result.Unwrap()->status != ZX_OK) {
+ ALOGE("Failed wait for allocation: %d %d", result.status(),
+ GET_STATUS_SAFE(result, status));
return VK_ERROR_INITIALIZATION_FAILED;
}
- if (!info.settings.has_image_format_constraints) {
+ llcpp::fuchsia::sysmem::BufferCollectionInfo_2 info =
+ std::move(result.Unwrap()->buffer_collection_info);
+
+ bool is_host_visible = info.settings.buffer_settings.heap ==
+ llcpp::fuchsia::sysmem::HeapType::GOLDFISH_HOST_VISIBLE;
+ bool is_device_local = info.settings.buffer_settings.heap ==
+ llcpp::fuchsia::sysmem::HeapType::GOLDFISH_DEVICE_LOCAL;
+ if (!is_host_visible && !is_device_local) {
+ ALOGE("buffer collection uses a non-goldfish heap (type 0x%lu)",
+ static_cast<uint64_t>(info.settings.buffer_settings.heap));
return VK_ERROR_INITIALIZATION_FAILED;
}
+
pProperties->count = info.buffer_count;
AutoLock lock(mLock);
@@ -1935,8 +2016,10 @@ public:
// Device local memory type supported.
pProperties->memoryTypeBits = 0;
for (uint32_t i = 0; i < deviceInfo.memProps.memoryTypeCount; ++i) {
- if (deviceInfo.memProps.memoryTypes[i].propertyFlags &
- VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) {
+ if ((is_device_local && (deviceInfo.memProps.memoryTypes[i].propertyFlags &
+ VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)) ||
+ (is_host_visible && (deviceInfo.memProps.memoryTypes[i].propertyFlags &
+ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT))) {
pProperties->memoryTypeBits |= 1ull << i;
}
}
@@ -2057,9 +2140,9 @@ public:
abort();
}
- struct drm_virtgpu_map map_info = {
- .handle = drm_rc_blob.bo_handle,
- };
+ drm_virtgpu_map map_info;
+ memset(&map_info, 0, sizeof(map_info));
+ map_info.handle = drm_rc_blob.bo_handle;
res = drmIoctl(mRendernodeFd, DRM_IOCTL_VIRTGPU_MAP, &map_info);
if (res) {
@@ -2298,15 +2381,17 @@ public:
if (importBufferCollection) {
#ifdef VK_USE_PLATFORM_FUCHSIA
- auto collection = reinterpret_cast<fuchsia::sysmem::BufferCollectionSyncPtr*>(
+ auto collection = reinterpret_cast<
+ llcpp::fuchsia::sysmem::BufferCollection::SyncClient*>(
importBufferCollectionInfoPtr->collection);
- fuchsia::sysmem::BufferCollectionInfo_2 info;
- zx_status_t status2;
- zx_status_t status = (*collection)->WaitForBuffersAllocated(&status2, &info);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGE("WaitForBuffersAllocated failed: %d %d", status);
+ auto result = collection->WaitForBuffersAllocated();
+ if (!result.ok() || result.Unwrap()->status != ZX_OK) {
+ ALOGE("WaitForBuffersAllocated failed: %d %d", result.status(),
+ GET_STATUS_SAFE(result, status));
return VK_ERROR_INITIALIZATION_FAILED;
}
+ llcpp::fuchsia::sysmem::BufferCollectionInfo_2& info =
+ result.Unwrap()->buffer_collection_info;
uint32_t index = importBufferCollectionInfoPtr->index;
if (info.buffer_count < index) {
ALOGE("Invalid buffer index: %d %d", index);
@@ -2381,25 +2466,52 @@ public:
pBufferConstraintsInfo);
if (hasDedicatedImage || hasDedicatedBuffer) {
- fuchsia::sysmem::BufferCollectionTokenSyncPtr token;
- zx_status_t status = mSysmemAllocator->AllocateSharedCollection(
- token.NewRequest());
+ zx::channel token_server, token_client;
+ zx_status_t status =
+ zx::channel::create(0, &token_server, &token_client);
if (status != ZX_OK) {
- ALOGE("AllocateSharedCollection failed: %d", status);
+ ALOGE("zx_channel_create failed: %d", status);
abort();
}
- fuchsia::sysmem::BufferCollectionSyncPtr collection;
- status = mSysmemAllocator->BindSharedCollection(
- std::move(token), collection.NewRequest());
+ {
+ auto result = mSysmemAllocator->AllocateSharedCollection(
+ std::move(token_server));
+ if (!result.ok()) {
+ ALOGE("AllocateSharedCollection failed: %d",
+ result.status());
+ abort();
+ }
+ }
+
+ zx::channel collection_server, collection_client;
+ status = zx::channel::create(0, &collection_server,
+ &collection_client);
if (status != ZX_OK) {
- ALOGE("BindSharedCollection failed: %d", status);
+ ALOGE("zx_channel_create failed: %d", status);
abort();
}
+ {
+ auto result = mSysmemAllocator->BindSharedCollection(
+ std::move(token_client), std::move(collection_server));
+ if (!result.ok()) {
+ ALOGE("BindSharedCollection failed: %d",
+ result.status());
+ abort();
+ }
+ }
+
+ llcpp::fuchsia::sysmem::BufferCollection::SyncClient collection(
+ std::move(collection_client));
if (hasDedicatedImage) {
VkResult res = setBufferCollectionConstraints(
- &collection, pImageCreateInfo);
+ enc, device, &collection, pImageCreateInfo);
+ if (res == VK_ERROR_FORMAT_NOT_SUPPORTED) {
+ ALOGE("setBufferCollectionConstraints failed: format %u is not supported",
+ pImageCreateInfo->format);
+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ }
if (res != VK_SUCCESS) {
ALOGE("setBufferCollectionConstraints failed: %d", res);
abort();
@@ -2416,25 +2528,30 @@ public:
}
}
- fuchsia::sysmem::BufferCollectionInfo_2 info;
- zx_status_t status2;
- status = collection->WaitForBuffersAllocated(&status2, &info);
- if (status == ZX_OK && status2 == ZX_OK) {
- if (!info.buffer_count) {
- ALOGE("WaitForBuffersAllocated returned invalid count: %d", status);
- abort();
+ {
+ auto result = collection.WaitForBuffersAllocated();
+ if (result.ok() && result.Unwrap()->status == ZX_OK) {
+ llcpp::fuchsia::sysmem::BufferCollectionInfo_2& info =
+ result.Unwrap()->buffer_collection_info;
+ if (!info.buffer_count) {
+ ALOGE(
+ "WaitForBuffersAllocated returned "
+ "invalid count: %d",
+ info.buffer_count);
+ abort();
+ }
+ vmo_handle = info.buffers[0].vmo.release();
+ } else {
+ ALOGE("WaitForBuffersAllocated failed: %d %d",
+ result.status(), GET_STATUS_SAFE(result, status));
+ abort();
}
- vmo_handle = info.buffers[0].vmo.release();
- } else {
- ALOGE("WaitForBuffersAllocated failed: %d %d", status, status2);
- abort();
}
- collection->Close();
+ collection.Close();
zx::vmo vmo_copy;
- status = zx_handle_duplicate(vmo_handle,
- ZX_RIGHT_SAME_RIGHTS,
+ status = zx_handle_duplicate(vmo_handle, ZX_RIGHT_SAME_RIGHTS,
vmo_copy.reset_and_get_address());
if (status != ZX_OK) {
ALOGE("Failed to duplicate VMO: %d", status);
@@ -2442,7 +2559,8 @@ public:
}
if (pImageCreateInfo) {
- fuchsia::hardware::goldfish::ColorBufferFormatType format;
+ llcpp::fuchsia::hardware::goldfish::ColorBufferFormatType
+ format;
switch (pImageCreateInfo->format) {
case VK_FORMAT_B8G8R8A8_SINT:
case VK_FORMAT_B8G8R8A8_UNORM:
@@ -2450,7 +2568,7 @@ public:
case VK_FORMAT_B8G8R8A8_SNORM:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B8G8R8A8_USCALED:
- format = fuchsia::hardware::goldfish::
+ format = llcpp::fuchsia::hardware::goldfish::
ColorBufferFormatType::BGRA;
break;
case VK_FORMAT_R8G8B8A8_SINT:
@@ -2459,7 +2577,7 @@ public:
case VK_FORMAT_R8G8B8A8_SNORM:
case VK_FORMAT_R8G8B8A8_SSCALED:
case VK_FORMAT_R8G8B8A8_USCALED:
- format = fuchsia::hardware::goldfish::
+ format = llcpp::fuchsia::hardware::goldfish::
ColorBufferFormatType::RGBA;
break;
default:
@@ -2468,23 +2586,42 @@ public:
abort();
}
- status = mControlDevice->CreateColorBuffer(
- std::move(vmo_copy), pImageCreateInfo->extent.width,
- pImageCreateInfo->extent.height, format, &status2);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGE("CreateColorBuffer failed: %d:%d", status,
- status2);
- abort();
+ auto createParams =
+ llcpp::fuchsia::hardware::goldfish::CreateColorBuffer2Params::Builder(
+ std::make_unique<llcpp::fuchsia::hardware::goldfish::
+ CreateColorBuffer2Params::Frame>())
+ .set_width(std::make_unique<uint32_t>(pImageCreateInfo->extent.width))
+ .set_height(std::make_unique<uint32_t>(pImageCreateInfo->extent.height))
+ .set_format(std::make_unique<
+ llcpp::fuchsia::hardware::goldfish::ColorBufferFormatType>(
+ format))
+ .set_memory_property(std::make_unique<uint32_t>(
+ llcpp::fuchsia::hardware::goldfish::MEMORY_PROPERTY_DEVICE_LOCAL))
+ .build();
+
+ auto result = mControlDevice->CreateColorBuffer2(std::move(vmo_copy),
+ std::move(createParams));
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ if (result.ok() &&
+ result.Unwrap()->res == ZX_ERR_ALREADY_EXISTS) {
+ ALOGD("CreateColorBuffer: color buffer already "
+ "exists\n");
+ } else {
+ ALOGE("CreateColorBuffer failed: %d:%d",
+ result.status(),
+ GET_STATUS_SAFE(result, res));
+ abort();
+ }
}
}
if (pBufferConstraintsInfo) {
- status = mControlDevice->CreateBuffer(
+ auto result = mControlDevice->CreateBuffer(
std::move(vmo_copy),
- pBufferConstraintsInfo->pBufferCreateInfo->size,
- &status2);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGE("CreateBuffer failed: %d:%d", status, status2);
+ pBufferConstraintsInfo->pBufferCreateInfo->size);
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("CreateBuffer failed: %d:%d", result.status(),
+ GET_STATUS_SAFE(result, res));
abort();
}
}
@@ -2502,23 +2639,23 @@ public:
}
zx_status_t status2 = ZX_OK;
- fuchsia::hardware::goldfish::BufferHandleType handle_type;
- uint32_t buffer_handle;
-
- status = mControlDevice->GetBufferHandle(std::move(vmo_copy),
- &status2, &buffer_handle,
- &handle_type);
- if (status != ZX_OK || status2 != ZX_OK) {
- ALOGE("GetBufferHandle failed: %d:%d", status, status2);
- }
-
- if (handle_type ==
- fuchsia::hardware::goldfish::BufferHandleType::BUFFER) {
- importBufferInfo.buffer = buffer_handle;
- vk_append_struct(&structChainIter, &importBufferInfo);
+ auto result = mControlDevice->GetBufferHandle(std::move(vmo_copy));
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("GetBufferHandle failed: %d:%d", result.status(),
+ GET_STATUS_SAFE(result, res));
} else {
- importCbInfo.colorBuffer = buffer_handle;
- vk_append_struct(&structChainIter, &importCbInfo);
+ llcpp::fuchsia::hardware::goldfish::BufferHandleType
+ handle_type = result.Unwrap()->type;
+ uint32_t buffer_handle = result.Unwrap()->id;
+
+ if (handle_type == llcpp::fuchsia::hardware::goldfish::
+ BufferHandleType::BUFFER) {
+ importBufferInfo.buffer = buffer_handle;
+ vk_append_struct(&structChainIter, &importBufferInfo);
+ } else {
+ importCbInfo.colorBuffer = buffer_handle;
+ vk_append_struct(&structChainIter, &importCbInfo);
+ }
}
}
#endif
@@ -2554,12 +2691,44 @@ public:
abort();
}
+#ifdef VK_USE_PLATFORM_FUCHSIA
if (vmo_handle != ZX_HANDLE_INVALID) {
- ALOGE("%s: Host visible export/import allocation "
- "of VMO is not supported yet.",
- __func__);
- abort();
+ input_result = enc->vkAllocateMemory(device, &finalAllocInfo, pAllocator, pMemory);
+
+ // Get VMO handle rights, and only use allowed rights to map the
+ // host memory.
+ zx_info_handle_basic handle_info;
+ zx_status_t status = zx_object_get_info(vmo_handle, ZX_INFO_HANDLE_BASIC, &handle_info,
+ sizeof(handle_info), nullptr, nullptr);
+ if (status != ZX_OK) {
+ ALOGE("%s: cannot get vmo object info: vmo = %u status: %d.", __func__, vmo_handle,
+ status);
+ return VK_ERROR_OUT_OF_HOST_MEMORY;
+ }
+
+ zx_vm_option_t vm_permission = 0u;
+ vm_permission |= (handle_info.rights & ZX_RIGHT_READ) ? ZX_VM_PERM_READ : 0;
+ vm_permission |= (handle_info.rights & ZX_RIGHT_WRITE) ? ZX_VM_PERM_WRITE : 0;
+
+ zx_paddr_t addr;
+ status = zx_vmar_map(zx_vmar_root_self(), vm_permission, 0, vmo_handle, 0,
+ finalAllocInfo.allocationSize, &addr);
+ if (status != ZX_OK) {
+ ALOGE("%s: cannot map vmar: status %d.", __func__, status);
+ return VK_ERROR_OUT_OF_HOST_MEMORY;
+ }
+
+ D("host visible alloc (external): "
+ "size 0x%llx host ptr %p mapped size 0x%llx",
+ (unsigned long long)finalAllocInfo.allocationSize, mappedPtr,
+ (unsigned long long)mappedSize);
+ setDeviceMemoryInfo(device, *pMemory,
+ finalAllocInfo.allocationSize, finalAllocInfo.allocationSize,
+ reinterpret_cast<uint8_t*>(addr), finalAllocInfo.memoryTypeIndex,
+ /*ahw=*/nullptr, vmo_handle);
+ return VK_SUCCESS;
}
+#endif
// Host visible memory, non external
bool directMappingSupported = usingDirectMapping();
@@ -2655,6 +2824,17 @@ public:
if (it == info_VkDeviceMemory.end()) return;
auto& info = it->second;
+#ifdef VK_USE_PLATFORM_FUCHSIA
+ if (info.vmoHandle && info.mappedPtr) {
+ zx_status_t status = zx_vmar_unmap(
+ zx_vmar_root_self(), reinterpret_cast<zx_paddr_t>(info.mappedPtr), info.mappedSize);
+ if (status != ZX_OK) {
+ ALOGE("%s: Cannot unmap mappedPtr: status %d", status);
+ }
+ info.mappedPtr = nullptr;
+ }
+#endif
+
if (!info.directMapped) {
lock.unlock();
VkEncoder* enc = (VkEncoder*)context;
@@ -2893,35 +3073,90 @@ public:
const VkBufferCollectionImageCreateInfoFUCHSIA* extBufferCollectionPtr =
vk_find_struct<VkBufferCollectionImageCreateInfoFUCHSIA>(pCreateInfo);
bool isSysmemBackedMemory = false;
+
+ if (extImgCiPtr &&
+ (extImgCiPtr->handleTypes &
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_TEMP_ZIRCON_VMO_BIT_FUCHSIA)) {
+ isSysmemBackedMemory = true;
+ }
+
if (extBufferCollectionPtr) {
- auto collection = reinterpret_cast<fuchsia::sysmem::BufferCollectionSyncPtr*>(
+ auto collection = reinterpret_cast<
+ llcpp::fuchsia::sysmem::BufferCollection::SyncClient*>(
extBufferCollectionPtr->collection);
uint32_t index = extBufferCollectionPtr->index;
zx::vmo vmo;
- fuchsia::sysmem::BufferCollectionInfo_2 info;
- zx_status_t status2;
- zx_status_t status = (*collection)->WaitForBuffersAllocated(&status2, &info);
- if (status == ZX_OK && status2 == ZX_OK) {
+ llcpp::fuchsia::sysmem::BufferCollectionInfo_2 info;
+
+ auto result = collection->WaitForBuffersAllocated();
+ if (result.ok() && result.Unwrap()->status == ZX_OK) {
+ info = std::move(result.Unwrap()->buffer_collection_info);
if (index < info.buffer_count && info.settings.has_image_format_constraints) {
vmo = std::move(info.buffers[index].vmo);
}
} else {
- ALOGE("WaitForBuffersAllocated failed: %d %d", status, status2);
+ ALOGE("WaitForBuffersAllocated failed: %d %d", result.status(),
+ GET_STATUS_SAFE(result, status));
}
if (vmo.is_valid()) {
- zx_status_t status2 = ZX_OK;
- status = mControlDevice->CreateColorBuffer(
- std::move(vmo),
- info.settings.image_format_constraints.min_coded_width,
- info.settings.image_format_constraints.min_coded_height,
- info.settings.image_format_constraints.pixel_format.type == fuchsia::sysmem::PixelFormatType::R8G8B8A8
- ? fuchsia::hardware::goldfish::ColorBufferFormatType::RGBA
- : fuchsia::hardware::goldfish::ColorBufferFormatType::BGRA,
- &status2);
- if (status != ZX_OK || (status2 != ZX_OK && status2 != ZX_ERR_ALREADY_EXISTS)) {
- ALOGE("CreateColorBuffer failed: %d:%d", status, status2);
+ zx::vmo vmo_dup;
+ if (zx_status_t status = vmo.duplicate(ZX_RIGHT_SAME_RIGHTS, &vmo_dup);
+ status != ZX_OK) {
+ ALOGE("%s: zx_vmo_duplicate failed: %d", __func__, status);
+ abort();
+ }
+
+ auto buffer_handle_result = mControlDevice->GetBufferHandle(std::move(vmo_dup));
+ if (!buffer_handle_result.ok()) {
+ ALOGE("%s: GetBufferHandle FIDL error: %d", __func__,
+ buffer_handle_result.status());
+ abort();
+ }
+ if (buffer_handle_result.value().res == ZX_OK) {
+ // Buffer handle already exists.
+ // If it is a ColorBuffer, no-op; Otherwise return error.
+ if (buffer_handle_result.value().type !=
+ llcpp::fuchsia::hardware::goldfish::BufferHandleType::COLOR_BUFFER) {
+ ALOGE("%s: BufferHandle %u is not a ColorBuffer", __func__,
+ buffer_handle_result.value().id);
+ return VK_ERROR_OUT_OF_HOST_MEMORY;
+ }
+ } else if (buffer_handle_result.value().res == ZX_ERR_NOT_FOUND) {
+ // Buffer handle not found. Create ColorBuffer based on buffer settings.
+ auto format =
+ info.settings.image_format_constraints.pixel_format.type ==
+ llcpp::fuchsia::sysmem::PixelFormatType::R8G8B8A8
+ ? llcpp::fuchsia::hardware::goldfish::ColorBufferFormatType::RGBA
+ : llcpp::fuchsia::hardware::goldfish::ColorBufferFormatType::BGRA;
+
+ uint32_t memory_property =
+ info.settings.buffer_settings.heap ==
+ llcpp::fuchsia::sysmem::HeapType::GOLDFISH_DEVICE_LOCAL
+ ? llcpp::fuchsia::hardware::goldfish::MEMORY_PROPERTY_DEVICE_LOCAL
+ : llcpp::fuchsia::hardware::goldfish::MEMORY_PROPERTY_HOST_VISIBLE;
+
+ auto createParams =
+ llcpp::fuchsia::hardware::goldfish::CreateColorBuffer2Params::Builder(
+ std::make_unique<llcpp::fuchsia::hardware::goldfish::
+ CreateColorBuffer2Params::Frame>())
+ .set_width(std::make_unique<uint32_t>(
+ info.settings.image_format_constraints.min_coded_width))
+ .set_height(std::make_unique<uint32_t>(
+ info.settings.image_format_constraints.min_coded_height))
+ .set_format(std::make_unique<
+ llcpp::fuchsia::hardware::goldfish::ColorBufferFormatType>(
+ format))
+ .set_memory_property(std::make_unique<uint32_t>(memory_property))
+ .build();
+
+ auto result =
+ mControlDevice->CreateColorBuffer2(std::move(vmo), std::move(createParams));
+ if (!result.ok() || result.Unwrap()->res != ZX_OK) {
+ ALOGE("CreateColorBuffer failed: %d:%d", result.status(),
+ GET_STATUS_SAFE(result, res));
+ }
}
}
isSysmemBackedMemory = true;
@@ -3733,37 +3968,44 @@ public:
Optional<zx::vmo> vmo;
bool isSysmemBackedMemory = false;
+ const VkExternalMemoryBufferCreateInfo* extBufCiPtr =
+ vk_find_struct<VkExternalMemoryBufferCreateInfo>(pCreateInfo);
+ if (extBufCiPtr &&
+ (extBufCiPtr->handleTypes &
+ VK_EXTERNAL_MEMORY_HANDLE_TYPE_TEMP_ZIRCON_VMO_BIT_FUCHSIA)) {
+ isSysmemBackedMemory = true;
+ }
+
const auto* extBufferCollectionPtr =
vk_find_struct<VkBufferCollectionBufferCreateInfoFUCHSIA>(
pCreateInfo);
if (extBufferCollectionPtr) {
- auto collection =
- reinterpret_cast<fuchsia::sysmem::BufferCollectionSyncPtr*>(
- extBufferCollectionPtr->collection);
+ auto collection = reinterpret_cast<
+ llcpp::fuchsia::sysmem::BufferCollection::SyncClient*>(
+ extBufferCollectionPtr->collection);
uint32_t index = extBufferCollectionPtr->index;
- fuchsia::sysmem::BufferCollectionInfo_2 info;
- zx_status_t status2;
- zx_status_t status =
- (*collection)->WaitForBuffersAllocated(&status2, &info);
-
- if (status == ZX_OK && status2 == ZX_OK) {
+ auto result = collection->WaitForBuffersAllocated();
+ if (result.ok() && result.Unwrap()->status == ZX_OK) {
+ auto& info = result.Unwrap()->buffer_collection_info;
if (index < info.buffer_count) {
vmo = android::base::makeOptional(
std::move(info.buffers[index].vmo));
}
} else {
- ALOGE("WaitForBuffersAllocated failed: %d %d", status, status2);
+ ALOGE("WaitForBuffersAllocated failed: %d %d", result.status(),
+ GET_STATUS_SAFE(result, status));
}
if (vmo && vmo->is_valid()) {
- zx_status_t status2 = ZX_OK;
- status = mControlDevice->CreateBuffer(
- std::move(*vmo), pCreateInfo->size, &status2);
- if (status != ZX_OK ||
- (status2 != ZX_OK && status2 != ZX_ERR_ALREADY_EXISTS)) {
- ALOGE("CreateBuffer failed: %d:%d", status, status2);
+ auto result = mControlDevice->CreateBuffer(std::move(*vmo),
+ pCreateInfo->size);
+ if (!result.ok() ||
+ (result.Unwrap()->res != ZX_OK &&
+ result.Unwrap()->res != ZX_ERR_ALREADY_EXISTS)) {
+ ALOGE("CreateBuffer failed: %d:%d", result.status(),
+ GET_STATUS_SAFE(result, res));
}
isSysmemBackedMemory = true;
}
@@ -4583,6 +4825,35 @@ public:
VkEncoder* enc = (VkEncoder*)context;
(void)input_result;
+#ifdef VK_USE_PLATFORM_FUCHSIA
+
+ constexpr VkFormat kExternalImageSupportedFormats[] = {
+ VK_FORMAT_B8G8R8A8_SINT,
+ VK_FORMAT_B8G8R8A8_UNORM,
+ VK_FORMAT_B8G8R8A8_SRGB,
+ VK_FORMAT_B8G8R8A8_SNORM,
+ VK_FORMAT_B8G8R8A8_SSCALED,
+ VK_FORMAT_B8G8R8A8_USCALED,
+ VK_FORMAT_R8G8B8A8_SINT,
+ VK_FORMAT_R8G8B8A8_UNORM,
+ VK_FORMAT_R8G8B8A8_SRGB,
+ VK_FORMAT_R8G8B8A8_SNORM,
+ VK_FORMAT_R8G8B8A8_SSCALED,
+ VK_FORMAT_R8G8B8A8_USCALED,
+ };
+
+ VkExternalImageFormatProperties* ext_img_properties =
+ vk_find_struct<VkExternalImageFormatProperties>(pImageFormatProperties);
+
+ if (ext_img_properties) {
+ if (std::find(std::begin(kExternalImageSupportedFormats),
+ std::end(kExternalImageSupportedFormats),
+ pImageFormatInfo->format) == std::end(kExternalImageSupportedFormats)) {
+ return VK_ERROR_FORMAT_NOT_SUPPORTED;
+ }
+ }
+#endif
+
VkAndroidHardwareBufferUsageANDROID* output_ahw_usage =
vk_find_struct<VkAndroidHardwareBufferUsageANDROID>(pImageFormatProperties);
@@ -4663,48 +4934,39 @@ public:
auto& info = it->second;
- if (!info.lastUsedEncoderPtr) {
- info.lastUsedEncoderPtr = new VkEncoder*;
- *(info.lastUsedEncoderPtr) = currentEncoder;
- }
-
- auto lastUsedEncoderPtr = info.lastUsedEncoderPtr;
-
- auto lastEncoder = *(lastUsedEncoderPtr);
-
- // We always make lastUsedEncoderPtr track
- // the current encoder, even if the last encoder
- // is null.
- *(lastUsedEncoderPtr) = currentEncoder;
+ currentEncoder->incRef();
+ auto lastEncoder = info.lastUsedEncoder;
+ info.lastUsedEncoder = currentEncoder;
if (!lastEncoder) return 0;
- if (lastEncoder == currentEncoder) return 0;
-
auto oldSeq = info.sequenceNumber;
+ bool lookupAgain = false;
- lock.unlock();
+ if (lastEncoder != currentEncoder) {
+ info.sequenceNumber += 2;
+ lookupAgain = true;
+ lock.unlock();
- lastEncoder->vkCommandBufferHostSyncGOOGLE(commandBuffer, false, oldSeq + 1);
- lastEncoder->flush();
- currentEncoder->vkCommandBufferHostSyncGOOGLE(commandBuffer, true, oldSeq + 2);
+ lastEncoder->vkCommandBufferHostSyncGOOGLE(commandBuffer, false, oldSeq + 1);
+ lastEncoder->flush();
- unregisterEncoderCleanupCallback(lastEncoder, commandBuffer);
+ currentEncoder->vkCommandBufferHostSyncGOOGLE(commandBuffer, true, oldSeq + 2);
- registerEncoderCleanupCallback(currentEncoder, commandBuffer, [this, currentEncoder, commandBuffer]() {
- AutoLock lock(mLock);
- auto it = info_VkCommandBuffer.find(commandBuffer);
- if (it == info_VkCommandBuffer.end()) return;
-
- auto& info = it->second;
- if (!info.lastUsedEncoderPtr) return;
- if (!*(info.lastUsedEncoderPtr)) return;
+ lock.lock();
+ }
- if (currentEncoder == *(info.lastUsedEncoderPtr)) {
- *(info.lastUsedEncoderPtr) = nullptr;
+ if (lastEncoder->decRef()) {
+ if (lookupAgain) {
+ auto it2 = info_VkCommandBuffer.find(commandBuffer);
+ if (it2 == info_VkCommandBuffer.end()) return 0;
+ auto& info2 = it2->second;
+ info2.lastUsedEncoder = nullptr;
+ } else {
+ info.lastUsedEncoder = nullptr;
}
- });
+ }
- return 1;
+ return 0;
}
uint32_t syncEncodersForQueue(VkQueue queue, VkEncoder* currentEncoder) {
@@ -4719,52 +4981,38 @@ public:
auto& info = it->second;
- if (!info.lastUsedEncoderPtr) {
- info.lastUsedEncoderPtr = new VkEncoder*;
- *(info.lastUsedEncoderPtr) = currentEncoder;
- }
-
- auto lastUsedEncoderPtr = info.lastUsedEncoderPtr;
-
- auto lastEncoder = *(lastUsedEncoderPtr);
-
- // We always make lastUsedEncoderPtr track
- // the current encoder, even if the last encoder
- // is null.
- *(lastUsedEncoderPtr) = currentEncoder;
+ currentEncoder->incRef();
+ auto lastEncoder = info.lastUsedEncoder;
+ info.lastUsedEncoder = currentEncoder;
if (!lastEncoder) return 0;
- if (lastEncoder == currentEncoder) return 0;
-
auto oldSeq = info.sequenceNumber;
+ bool lookupAgain = false;
- info.sequenceNumber += 2;
-
- lock.unlock();
-
- // at this point the seqno for the old thread is determined
-
- lastEncoder->vkQueueHostSyncGOOGLE(queue, false, oldSeq + 1);
- lastEncoder->flush();
- currentEncoder->vkQueueHostSyncGOOGLE(queue, true, oldSeq + 2);
-
- unregisterEncoderCleanupCallback(lastEncoder, queue);
+ if (lastEncoder != currentEncoder) {
+ info.sequenceNumber += 2;
+ lookupAgain = true;
+ lock.unlock();
- registerEncoderCleanupCallback(currentEncoder, queue, [this, currentEncoder, queue]() {
- AutoLock lock(mLock);
- auto it = info_VkQueue.find(queue);
- if (it == info_VkQueue.end()) return;
+ lastEncoder->vkQueueHostSyncGOOGLE(queue, false, oldSeq + 1);
+ lastEncoder->flush();
+ currentEncoder->vkQueueHostSyncGOOGLE(queue, true, oldSeq + 2);
- auto& info = it->second;
- if (!info.lastUsedEncoderPtr) return;
- if (!*(info.lastUsedEncoderPtr)) return;
+ lock.lock();
+ }
- if (currentEncoder == *(info.lastUsedEncoderPtr)) {
- *(info.lastUsedEncoderPtr) = nullptr;
+ if (lastEncoder->decRef()) {
+ if (lookupAgain) {
+ auto it2 = info_VkQueue.find(queue);
+ if (it2 == info_VkQueue.end()) return 0;
+ auto& info2 = it2->second;
+ info2.lastUsedEncoder = nullptr;
+ } else {
+ info.lastUsedEncoder = nullptr;
}
- });
+ }
- return 1;
+ return 0;
}
VkResult on_vkBeginCommandBuffer(
@@ -4904,8 +5152,11 @@ private:
#endif
#ifdef VK_USE_PLATFORM_FUCHSIA
- fuchsia::hardware::goldfish::ControlDeviceSyncPtr mControlDevice;
- fuchsia::sysmem::AllocatorSyncPtr mSysmemAllocator;
+ std::unique_ptr<
+ llcpp::fuchsia::hardware::goldfish::ControlDevice::SyncClient>
+ mControlDevice;
+ std::unique_ptr<llcpp::fuchsia::sysmem::Allocator::SyncClient>
+ mSysmemAllocator;
#endif
WorkPool mWorkPool { 4 };
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 0eeba153..8f16a528 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -59,105 +59,7 @@ using android::base::guest::AutoLock;
using android::base::guest::Lock;
using android::base::Pool;
-class VkEncoder::Impl {
-public:
- Impl(IOStream* stream) : m_stream(stream), m_logEncodes(false) {
- const char* emuVkLogEncodesPropName = "qemu.vk.log";
- char encodeProp[PROPERTY_VALUE_MAX];
- if (property_get(emuVkLogEncodesPropName, encodeProp, nullptr) > 0) {
- m_logEncodes = atoi(encodeProp) > 0;
- }
- }
-
- ~Impl() { }
-
- VulkanCountingStream* countingStream() { return &m_countingStream; }
- VulkanStreamGuest* stream() { return &m_stream; }
- Pool* pool() { return &m_pool; }
- ResourceTracker* resources() { return ResourceTracker::get(); }
- Validation* validation() { return &m_validation; }
-
- void log(const char* text) {
- if (!m_logEncodes) return;
- ALOGD("encoder log: %s", text);
- }
-
- void flush() {
- lock();
- m_stream.flush();
- unlock();
- }
-
- // can be recursive
- void lock() {
- if (this == sAcquiredEncoderThreadLocal) {
- ++sAcquiredEncoderThreadLockLevels;
- return; // recursive
- }
- while (mLock.test_and_set(std::memory_order_acquire));
- sAcquiredEncoderThreadLocal = this;
- sAcquiredEncoderThreadLockLevels = 1;
- }
-
- void unlock() {
- if (this != sAcquiredEncoderThreadLocal) {
- // error, trying to unlock without having locked first
- return;
- }
-
- --sAcquiredEncoderThreadLockLevels;
- if (0 == sAcquiredEncoderThreadLockLevels) {
- mLock.clear(std::memory_order_release);
- sAcquiredEncoderThreadLocal = nullptr;
- }
- }
-
-private:
- VulkanCountingStream m_countingStream;
- VulkanStreamGuest m_stream;
- Pool m_pool { 8, 4096, 64 };
-
- Validation m_validation;
- bool m_logEncodes;
- std::atomic_flag mLock = ATOMIC_FLAG_INIT;
- static thread_local Impl* sAcquiredEncoderThreadLocal;
- static thread_local uint32_t sAcquiredEncoderThreadLockLevels;
-};
-
-VkEncoder::~VkEncoder() {
- auto rt = ResourceTracker::get();
- if (!rt) return;
- rt->onEncoderDeleted(this);
-}
-
-// static
-thread_local VkEncoder::Impl* VkEncoder::Impl::sAcquiredEncoderThreadLocal = nullptr;
-thread_local uint32_t VkEncoder::Impl::sAcquiredEncoderThreadLockLevels = 0;
-
-struct EncoderAutoLock {
- EncoderAutoLock(VkEncoder* enc) : mEnc(enc) {
- mEnc->lock();
- }
- ~EncoderAutoLock() {
- mEnc->unlock();
- }
- VkEncoder* mEnc;
-};
-
-VkEncoder::VkEncoder(IOStream *stream) :
- mImpl(new VkEncoder::Impl(stream)) { }
-
-void VkEncoder::flush() {
- mImpl->flush();
-}
-
-void VkEncoder::lock() {
- mImpl->lock();
-}
-
-void VkEncoder::unlock() {
- mImpl->unlock();
-}
+#include "VkEncoder.cpp.inl"
#define VALIDATE_RET(retType, success, validate) \
retType goldfish_vk_validateResult = validate; \
@@ -174,7 +76,6 @@ VkResult VkEncoder::vkCreateInstance(
VkInstance* pInstance)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateInstance encode");
mImpl->log("start vkCreateInstance");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -236,13 +137,11 @@ VkResult VkEncoder::vkCreateInstance(
stream->handleMapping()->mapHandles_VkInstance_u64(pInstance, &cgen_var_3, 1);
stream->write((uint64_t*)&cgen_var_3, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateInstance readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_4;
stream->read((uint64_t*)&cgen_var_4, 8);
stream->handleMapping()->mapHandles_u64_VkInstance(&cgen_var_4, (VkInstance*)pInstance, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateInstance returnUnmarshal");
VkResult vkCreateInstance_VkResult_return = (VkResult)0;
stream->read(&vkCreateInstance_VkResult_return, sizeof(VkResult));
mImpl->resources()->on_vkCreateInstance(this, vkCreateInstance_VkResult_return, pCreateInfo, pAllocator, pInstance);
@@ -258,7 +157,6 @@ void VkEncoder::vkDestroyInstance(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyInstance encode");
mImpl->log("start vkDestroyInstance");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -307,8 +205,6 @@ void VkEncoder::vkDestroyInstance(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyInstance readParams");
- AEMU_SCOPED_TRACE("vkDestroyInstance returnUnmarshal");
resources->destroyMapping()->mapHandles_VkInstance((VkInstance*)&instance);
pool->freeAll();
countingStream->clearPool();
@@ -322,7 +218,6 @@ VkResult VkEncoder::vkEnumeratePhysicalDevices(
VkPhysicalDevice* pPhysicalDevices)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkEnumeratePhysicalDevices encode");
mImpl->log("start vkEnumeratePhysicalDevices");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -387,7 +282,6 @@ VkResult VkEncoder::vkEnumeratePhysicalDevices(
}
}
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkEnumeratePhysicalDevices readParams");
// WARNING PTR CHECK
uint32_t* check_pPhysicalDeviceCount;
check_pPhysicalDeviceCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -418,7 +312,6 @@ VkResult VkEncoder::vkEnumeratePhysicalDevices(
}
}
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkEnumeratePhysicalDevices returnUnmarshal");
VkResult vkEnumeratePhysicalDevices_VkResult_return = (VkResult)0;
stream->read(&vkEnumeratePhysicalDevices_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -433,7 +326,6 @@ void VkEncoder::vkGetPhysicalDeviceFeatures(
VkPhysicalDeviceFeatures* pFeatures)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures encode");
mImpl->log("start vkGetPhysicalDeviceFeatures");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -458,13 +350,11 @@ void VkEncoder::vkGetPhysicalDeviceFeatures(
stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_21, 1);
stream->write((uint64_t*)&cgen_var_21, 1 * 8);
marshal_VkPhysicalDeviceFeatures(stream, (VkPhysicalDeviceFeatures*)(pFeatures));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures readParams");
unmarshal_VkPhysicalDeviceFeatures(stream, (VkPhysicalDeviceFeatures*)(pFeatures));
if (pFeatures)
{
transform_fromhost_VkPhysicalDeviceFeatures(mImpl->resources(), (VkPhysicalDeviceFeatures*)(pFeatures));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -477,7 +367,6 @@ void VkEncoder::vkGetPhysicalDeviceFormatProperties(
VkFormatProperties* pFormatProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties encode");
mImpl->log("start vkGetPhysicalDeviceFormatProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -506,13 +395,11 @@ void VkEncoder::vkGetPhysicalDeviceFormatProperties(
stream->write((uint64_t*)&cgen_var_23, 1 * 8);
stream->write((VkFormat*)&local_format, sizeof(VkFormat));
marshal_VkFormatProperties(stream, (VkFormatProperties*)(pFormatProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties readParams");
unmarshal_VkFormatProperties(stream, (VkFormatProperties*)(pFormatProperties));
if (pFormatProperties)
{
transform_fromhost_VkFormatProperties(mImpl->resources(), (VkFormatProperties*)(pFormatProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -529,7 +416,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties(
VkImageFormatProperties* pImageFormatProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties encode");
mImpl->log("start vkGetPhysicalDeviceImageFormatProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -574,13 +460,11 @@ VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties(
stream->write((VkImageUsageFlags*)&local_usage, sizeof(VkImageUsageFlags));
stream->write((VkImageCreateFlags*)&local_flags, sizeof(VkImageCreateFlags));
marshal_VkImageFormatProperties(stream, (VkImageFormatProperties*)(pImageFormatProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties readParams");
unmarshal_VkImageFormatProperties(stream, (VkImageFormatProperties*)(pImageFormatProperties));
if (pImageFormatProperties)
{
transform_fromhost_VkImageFormatProperties(mImpl->resources(), (VkImageFormatProperties*)(pImageFormatProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties returnUnmarshal");
VkResult vkGetPhysicalDeviceImageFormatProperties_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceImageFormatProperties_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -595,7 +479,6 @@ void VkEncoder::vkGetPhysicalDeviceProperties(
VkPhysicalDeviceProperties* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties encode");
mImpl->log("start vkGetPhysicalDeviceProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -620,13 +503,11 @@ void VkEncoder::vkGetPhysicalDeviceProperties(
stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_27, 1);
stream->write((uint64_t*)&cgen_var_27, 1 * 8);
marshal_VkPhysicalDeviceProperties(stream, (VkPhysicalDeviceProperties*)(pProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties readParams");
unmarshal_VkPhysicalDeviceProperties(stream, (VkPhysicalDeviceProperties*)(pProperties));
if (pProperties)
{
transform_fromhost_VkPhysicalDeviceProperties(mImpl->resources(), (VkPhysicalDeviceProperties*)(pProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties returnUnmarshal");
mImpl->resources()->on_vkGetPhysicalDeviceProperties(this, physicalDevice, pProperties);
pool->freeAll();
countingStream->clearPool();
@@ -640,7 +521,6 @@ void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties(
VkQueueFamilyProperties* pQueueFamilyProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties encode");
mImpl->log("start vkGetPhysicalDeviceQueueFamilyProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -697,7 +577,6 @@ void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties(
marshal_VkQueueFamilyProperties(stream, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties readParams");
// WARNING PTR CHECK
uint32_t* check_pQueueFamilyPropertyCount;
check_pQueueFamilyPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -730,7 +609,6 @@ void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties(
transform_fromhost_VkQueueFamilyProperties(mImpl->resources(), (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -742,7 +620,6 @@ void VkEncoder::vkGetPhysicalDeviceMemoryProperties(
VkPhysicalDeviceMemoryProperties* pMemoryProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties encode");
mImpl->log("start vkGetPhysicalDeviceMemoryProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -767,13 +644,11 @@ void VkEncoder::vkGetPhysicalDeviceMemoryProperties(
stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_37, 1);
stream->write((uint64_t*)&cgen_var_37, 1 * 8);
marshal_VkPhysicalDeviceMemoryProperties(stream, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties readParams");
unmarshal_VkPhysicalDeviceMemoryProperties(stream, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
if (pMemoryProperties)
{
transform_fromhost_VkPhysicalDeviceMemoryProperties(mImpl->resources(), (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties returnUnmarshal");
mImpl->resources()->on_vkGetPhysicalDeviceMemoryProperties(this, physicalDevice, pMemoryProperties);
pool->freeAll();
countingStream->clearPool();
@@ -786,7 +661,6 @@ PFN_vkVoidFunction VkEncoder::vkGetInstanceProcAddr(
const char* pName)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetInstanceProcAddr encode");
mImpl->log("start vkGetInstanceProcAddr");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -817,8 +691,6 @@ PFN_vkVoidFunction VkEncoder::vkGetInstanceProcAddr(
stream->handleMapping()->mapHandles_VkInstance_u64(&local_instance, &cgen_var_39, 1);
stream->write((uint64_t*)&cgen_var_39, 1 * 8);
stream->putString(local_pName);
- AEMU_SCOPED_TRACE("vkGetInstanceProcAddr readParams");
- AEMU_SCOPED_TRACE("vkGetInstanceProcAddr returnUnmarshal");
PFN_vkVoidFunction vkGetInstanceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
stream->read(&vkGetInstanceProcAddr_PFN_vkVoidFunction_return, sizeof(PFN_vkVoidFunction));
pool->freeAll();
@@ -833,7 +705,6 @@ PFN_vkVoidFunction VkEncoder::vkGetDeviceProcAddr(
const char* pName)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDeviceProcAddr encode");
mImpl->log("start vkGetDeviceProcAddr");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -864,8 +735,6 @@ PFN_vkVoidFunction VkEncoder::vkGetDeviceProcAddr(
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_41, 1);
stream->write((uint64_t*)&cgen_var_41, 1 * 8);
stream->putString(local_pName);
- AEMU_SCOPED_TRACE("vkGetDeviceProcAddr readParams");
- AEMU_SCOPED_TRACE("vkGetDeviceProcAddr returnUnmarshal");
PFN_vkVoidFunction vkGetDeviceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
stream->read(&vkGetDeviceProcAddr_PFN_vkVoidFunction_return, sizeof(PFN_vkVoidFunction));
pool->freeAll();
@@ -882,7 +751,6 @@ VkResult VkEncoder::vkCreateDevice(
VkDevice* pDevice)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateDevice encode");
mImpl->log("start vkCreateDevice");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -952,13 +820,11 @@ VkResult VkEncoder::vkCreateDevice(
stream->handleMapping()->mapHandles_VkDevice_u64(pDevice, &cgen_var_47, 1);
stream->write((uint64_t*)&cgen_var_47, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateDevice readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_48;
stream->read((uint64_t*)&cgen_var_48, 8);
stream->handleMapping()->mapHandles_u64_VkDevice(&cgen_var_48, (VkDevice*)pDevice, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateDevice returnUnmarshal");
VkResult vkCreateDevice_VkResult_return = (VkResult)0;
stream->read(&vkCreateDevice_VkResult_return, sizeof(VkResult));
mImpl->resources()->on_vkCreateDevice(this, vkCreateDevice_VkResult_return, physicalDevice, pCreateInfo, pAllocator, pDevice);
@@ -974,7 +840,6 @@ void VkEncoder::vkDestroyDevice(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyDevice encode");
mImpl->log("start vkDestroyDevice");
mImpl->resources()->on_vkDestroyDevice_pre(this, device, pAllocator);
auto stream = mImpl->stream();
@@ -1024,8 +889,6 @@ void VkEncoder::vkDestroyDevice(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyDevice readParams");
- AEMU_SCOPED_TRACE("vkDestroyDevice returnUnmarshal");
resources->destroyMapping()->mapHandles_VkDevice((VkDevice*)&device);
stream->flush();
pool->freeAll();
@@ -1040,7 +903,6 @@ VkResult VkEncoder::vkEnumerateInstanceExtensionProperties(
VkExtensionProperties* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkEnumerateInstanceExtensionProperties encode");
mImpl->log("start vkEnumerateInstanceExtensionProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -1123,7 +985,6 @@ VkResult VkEncoder::vkEnumerateInstanceExtensionProperties(
marshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumerateInstanceExtensionProperties readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -1156,7 +1017,6 @@ VkResult VkEncoder::vkEnumerateInstanceExtensionProperties(
transform_fromhost_VkExtensionProperties(mImpl->resources(), (VkExtensionProperties*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumerateInstanceExtensionProperties returnUnmarshal");
VkResult vkEnumerateInstanceExtensionProperties_VkResult_return = (VkResult)0;
stream->read(&vkEnumerateInstanceExtensionProperties_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -1173,7 +1033,6 @@ VkResult VkEncoder::vkEnumerateDeviceExtensionProperties(
VkExtensionProperties* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkEnumerateDeviceExtensionProperties encode");
mImpl->log("start vkEnumerateDeviceExtensionProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -1264,7 +1123,6 @@ VkResult VkEncoder::vkEnumerateDeviceExtensionProperties(
marshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumerateDeviceExtensionProperties readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -1297,7 +1155,6 @@ VkResult VkEncoder::vkEnumerateDeviceExtensionProperties(
transform_fromhost_VkExtensionProperties(mImpl->resources(), (VkExtensionProperties*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumerateDeviceExtensionProperties returnUnmarshal");
VkResult vkEnumerateDeviceExtensionProperties_VkResult_return = (VkResult)0;
stream->read(&vkEnumerateDeviceExtensionProperties_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -1312,7 +1169,6 @@ VkResult VkEncoder::vkEnumerateInstanceLayerProperties(
VkLayerProperties* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkEnumerateInstanceLayerProperties encode");
mImpl->log("start vkEnumerateInstanceLayerProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -1361,7 +1217,6 @@ VkResult VkEncoder::vkEnumerateInstanceLayerProperties(
marshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumerateInstanceLayerProperties readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -1394,7 +1249,6 @@ VkResult VkEncoder::vkEnumerateInstanceLayerProperties(
transform_fromhost_VkLayerProperties(mImpl->resources(), (VkLayerProperties*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumerateInstanceLayerProperties returnUnmarshal");
VkResult vkEnumerateInstanceLayerProperties_VkResult_return = (VkResult)0;
stream->read(&vkEnumerateInstanceLayerProperties_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -1410,7 +1264,6 @@ VkResult VkEncoder::vkEnumerateDeviceLayerProperties(
VkLayerProperties* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkEnumerateDeviceLayerProperties encode");
mImpl->log("start vkEnumerateDeviceLayerProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -1467,7 +1320,6 @@ VkResult VkEncoder::vkEnumerateDeviceLayerProperties(
marshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumerateDeviceLayerProperties readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -1500,7 +1352,6 @@ VkResult VkEncoder::vkEnumerateDeviceLayerProperties(
transform_fromhost_VkLayerProperties(mImpl->resources(), (VkLayerProperties*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumerateDeviceLayerProperties returnUnmarshal");
VkResult vkEnumerateDeviceLayerProperties_VkResult_return = (VkResult)0;
stream->read(&vkEnumerateDeviceLayerProperties_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -1517,7 +1368,6 @@ void VkEncoder::vkGetDeviceQueue(
VkQueue* pQueue)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDeviceQueue encode");
mImpl->log("start vkGetDeviceQueue");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -1556,13 +1406,11 @@ void VkEncoder::vkGetDeviceQueue(
stream->handleMapping()->mapHandles_VkQueue_u64(pQueue, &cgen_var_88, 1);
stream->write((uint64_t*)&cgen_var_88, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkGetDeviceQueue readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_89;
stream->read((uint64_t*)&cgen_var_89, 8);
stream->handleMapping()->mapHandles_u64_VkQueue(&cgen_var_89, (VkQueue*)pQueue, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkGetDeviceQueue returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -1576,7 +1424,6 @@ VkResult VkEncoder::vkQueueSubmit(
VkFence fence)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueSubmit encode");
mImpl->log("start vkQueueSubmit");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -1636,8 +1483,6 @@ VkResult VkEncoder::vkQueueSubmit(
uint64_t cgen_var_93;
stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_93, 1);
stream->write((uint64_t*)&cgen_var_93, 1 * 8);
- AEMU_SCOPED_TRACE("vkQueueSubmit readParams");
- AEMU_SCOPED_TRACE("vkQueueSubmit returnUnmarshal");
VkResult vkQueueSubmit_VkResult_return = (VkResult)0;
stream->read(&vkQueueSubmit_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -1651,7 +1496,6 @@ VkResult VkEncoder::vkQueueWaitIdle(
VkQueue queue)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueWaitIdle encode");
mImpl->log("start vkQueueWaitIdle");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -1674,8 +1518,6 @@ VkResult VkEncoder::vkQueueWaitIdle(
uint64_t cgen_var_95;
stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_95, 1);
stream->write((uint64_t*)&cgen_var_95, 1 * 8);
- AEMU_SCOPED_TRACE("vkQueueWaitIdle readParams");
- AEMU_SCOPED_TRACE("vkQueueWaitIdle returnUnmarshal");
VkResult vkQueueWaitIdle_VkResult_return = (VkResult)0;
stream->read(&vkQueueWaitIdle_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -1689,7 +1531,6 @@ VkResult VkEncoder::vkDeviceWaitIdle(
VkDevice device)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDeviceWaitIdle encode");
mImpl->log("start vkDeviceWaitIdle");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -1712,8 +1553,6 @@ VkResult VkEncoder::vkDeviceWaitIdle(
uint64_t cgen_var_97;
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_97, 1);
stream->write((uint64_t*)&cgen_var_97, 1 * 8);
- AEMU_SCOPED_TRACE("vkDeviceWaitIdle readParams");
- AEMU_SCOPED_TRACE("vkDeviceWaitIdle returnUnmarshal");
VkResult vkDeviceWaitIdle_VkResult_return = (VkResult)0;
stream->read(&vkDeviceWaitIdle_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -1730,7 +1569,6 @@ VkResult VkEncoder::vkAllocateMemory(
VkDeviceMemory* pMemory)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkAllocateMemory encode");
mImpl->log("start vkAllocateMemory");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -1800,13 +1638,11 @@ VkResult VkEncoder::vkAllocateMemory(
stream->handleMapping()->mapHandles_VkDeviceMemory_u64(pMemory, &cgen_var_103, 1);
stream->write((uint64_t*)&cgen_var_103, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkAllocateMemory readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_104;
stream->read((uint64_t*)&cgen_var_104, 8);
stream->handleMapping()->mapHandles_u64_VkDeviceMemory(&cgen_var_104, (VkDeviceMemory*)pMemory, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkAllocateMemory returnUnmarshal");
VkResult vkAllocateMemory_VkResult_return = (VkResult)0;
stream->read(&vkAllocateMemory_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -1822,7 +1658,6 @@ void VkEncoder::vkFreeMemory(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkFreeMemory encode");
mImpl->log("start vkFreeMemory");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -1876,8 +1711,6 @@ void VkEncoder::vkFreeMemory(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkFreeMemory readParams");
- AEMU_SCOPED_TRACE("vkFreeMemory returnUnmarshal");
resources->destroyMapping()->mapHandles_VkDeviceMemory((VkDeviceMemory*)&memory);
pool->freeAll();
countingStream->clearPool();
@@ -1893,7 +1726,6 @@ VkResult VkEncoder::vkMapMemory(
VkMemoryMapFlags flags,
void** ppData)
{
- AEMU_SCOPED_TRACE("vkMapMemory resourceEvent");
VkResult vkMapMemory_VkResult_return = (VkResult)0;
vkMapMemory_VkResult_return = mImpl->resources()->on_vkMapMemory(this, VK_SUCCESS, device, memory, offset, size, flags, ppData);
mImpl->log("finish vkMapMemory");;
@@ -1904,7 +1736,6 @@ void VkEncoder::vkUnmapMemory(
VkDevice device,
VkDeviceMemory memory)
{
- AEMU_SCOPED_TRACE("vkUnmapMemory resourceEvent");
mImpl->resources()->on_vkUnmapMemory(this, device, memory);
}
@@ -1914,7 +1745,6 @@ VkResult VkEncoder::vkFlushMappedMemoryRanges(
const VkMappedMemoryRange* pMemoryRanges)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkFlushMappedMemoryRanges encode");
mImpl->log("start vkFlushMappedMemoryRanges");
VALIDATE_RET(VkResult, VK_SUCCESS, mImpl->validation()->on_vkFlushMappedMemoryRanges(this, VK_SUCCESS, device, memoryRangeCount, pMemoryRanges));
auto stream = mImpl->stream();
@@ -2005,8 +1835,6 @@ VkResult VkEncoder::vkFlushMappedMemoryRanges(
stream->write(targetRange, actualSize);
}
}
- AEMU_SCOPED_TRACE("vkFlushMappedMemoryRanges readParams");
- AEMU_SCOPED_TRACE("vkFlushMappedMemoryRanges returnUnmarshal");
VkResult vkFlushMappedMemoryRanges_VkResult_return = (VkResult)0;
stream->read(&vkFlushMappedMemoryRanges_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -2022,7 +1850,6 @@ VkResult VkEncoder::vkInvalidateMappedMemoryRanges(
const VkMappedMemoryRange* pMemoryRanges)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkInvalidateMappedMemoryRanges encode");
mImpl->log("start vkInvalidateMappedMemoryRanges");
VALIDATE_RET(VkResult, VK_SUCCESS, mImpl->validation()->on_vkInvalidateMappedMemoryRanges(this, VK_SUCCESS, device, memoryRangeCount, pMemoryRanges));
auto stream = mImpl->stream();
@@ -2075,8 +1902,6 @@ VkResult VkEncoder::vkInvalidateMappedMemoryRanges(
{
marshal_VkMappedMemoryRange(stream, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
}
- AEMU_SCOPED_TRACE("vkInvalidateMappedMemoryRanges readParams");
- AEMU_SCOPED_TRACE("vkInvalidateMappedMemoryRanges returnUnmarshal");
VkResult vkInvalidateMappedMemoryRanges_VkResult_return = (VkResult)0;
stream->read(&vkInvalidateMappedMemoryRanges_VkResult_return, sizeof(VkResult));
if (!resources->usingDirectMapping())
@@ -2111,7 +1936,6 @@ void VkEncoder::vkGetDeviceMemoryCommitment(
VkDeviceSize* pCommittedMemoryInBytes)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDeviceMemoryCommitment encode");
mImpl->log("start vkGetDeviceMemoryCommitment");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2145,9 +1969,7 @@ void VkEncoder::vkGetDeviceMemoryCommitment(
stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_118, 1);
stream->write((uint64_t*)&cgen_var_118, 1 * 8);
stream->write((VkDeviceSize*)pCommittedMemoryInBytes, sizeof(VkDeviceSize));
- AEMU_SCOPED_TRACE("vkGetDeviceMemoryCommitment readParams");
stream->read((VkDeviceSize*)pCommittedMemoryInBytes, sizeof(VkDeviceSize));
- AEMU_SCOPED_TRACE("vkGetDeviceMemoryCommitment returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -2161,7 +1983,6 @@ VkResult VkEncoder::vkBindBufferMemory(
VkDeviceSize memoryOffset)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkBindBufferMemory encode");
mImpl->log("start vkBindBufferMemory");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2205,8 +2026,6 @@ VkResult VkEncoder::vkBindBufferMemory(
stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_124, 1);
stream->write((uint64_t*)&cgen_var_124, 1 * 8);
stream->write((VkDeviceSize*)&local_memoryOffset, sizeof(VkDeviceSize));
- AEMU_SCOPED_TRACE("vkBindBufferMemory readParams");
- AEMU_SCOPED_TRACE("vkBindBufferMemory returnUnmarshal");
VkResult vkBindBufferMemory_VkResult_return = (VkResult)0;
stream->read(&vkBindBufferMemory_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -2223,7 +2042,6 @@ VkResult VkEncoder::vkBindImageMemory(
VkDeviceSize memoryOffset)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkBindImageMemory encode");
mImpl->log("start vkBindImageMemory");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2267,8 +2085,6 @@ VkResult VkEncoder::vkBindImageMemory(
stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_130, 1);
stream->write((uint64_t*)&cgen_var_130, 1 * 8);
stream->write((VkDeviceSize*)&local_memoryOffset, sizeof(VkDeviceSize));
- AEMU_SCOPED_TRACE("vkBindImageMemory readParams");
- AEMU_SCOPED_TRACE("vkBindImageMemory returnUnmarshal");
VkResult vkBindImageMemory_VkResult_return = (VkResult)0;
stream->read(&vkBindImageMemory_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -2284,7 +2100,6 @@ void VkEncoder::vkGetBufferMemoryRequirements(
VkMemoryRequirements* pMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements encode");
mImpl->log("start vkGetBufferMemoryRequirements");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2317,13 +2132,11 @@ void VkEncoder::vkGetBufferMemoryRequirements(
stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_134, 1);
stream->write((uint64_t*)&cgen_var_134, 1 * 8);
marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
- AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements readParams");
unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
if (pMemoryRequirements)
{
transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
}
- AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -2336,7 +2149,6 @@ void VkEncoder::vkGetImageMemoryRequirements(
VkMemoryRequirements* pMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements encode");
mImpl->log("start vkGetImageMemoryRequirements");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2369,13 +2181,11 @@ void VkEncoder::vkGetImageMemoryRequirements(
stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_138, 1);
stream->write((uint64_t*)&cgen_var_138, 1 * 8);
marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
- AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements readParams");
unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
if (pMemoryRequirements)
{
transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
}
- AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -2389,7 +2199,6 @@ void VkEncoder::vkGetImageSparseMemoryRequirements(
VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements encode");
mImpl->log("start vkGetImageSparseMemoryRequirements");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2454,7 +2263,6 @@ void VkEncoder::vkGetImageSparseMemoryRequirements(
marshal_VkSparseImageMemoryRequirements(stream, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
}
}
- AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements readParams");
// WARNING PTR CHECK
uint32_t* check_pSparseMemoryRequirementCount;
check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -2487,7 +2295,6 @@ void VkEncoder::vkGetImageSparseMemoryRequirements(
transform_fromhost_VkSparseImageMemoryRequirements(mImpl->resources(), (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
}
}
- AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -2505,7 +2312,6 @@ void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties(
VkSparseImageFormatProperties* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties encode");
mImpl->log("start vkGetPhysicalDeviceSparseImageFormatProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2582,7 +2388,6 @@ void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties(
marshal_VkSparseImageFormatProperties(stream, (VkSparseImageFormatProperties*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -2615,7 +2420,6 @@ void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties(
transform_fromhost_VkSparseImageFormatProperties(mImpl->resources(), (VkSparseImageFormatProperties*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -2629,7 +2433,6 @@ VkResult VkEncoder::vkQueueBindSparse(
VkFence fence)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueBindSparse encode");
mImpl->log("start vkQueueBindSparse");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2689,8 +2492,6 @@ VkResult VkEncoder::vkQueueBindSparse(
uint64_t cgen_var_160;
stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_160, 1);
stream->write((uint64_t*)&cgen_var_160, 1 * 8);
- AEMU_SCOPED_TRACE("vkQueueBindSparse readParams");
- AEMU_SCOPED_TRACE("vkQueueBindSparse returnUnmarshal");
VkResult vkQueueBindSparse_VkResult_return = (VkResult)0;
stream->read(&vkQueueBindSparse_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -2707,7 +2508,6 @@ VkResult VkEncoder::vkCreateFence(
VkFence* pFence)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateFence encode");
mImpl->log("start vkCreateFence");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2777,13 +2577,11 @@ VkResult VkEncoder::vkCreateFence(
stream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_166, 1);
stream->write((uint64_t*)&cgen_var_166, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateFence readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_167;
stream->read((uint64_t*)&cgen_var_167, 8);
stream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_167, (VkFence*)pFence, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateFence returnUnmarshal");
VkResult vkCreateFence_VkResult_return = (VkResult)0;
stream->read(&vkCreateFence_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -2799,7 +2597,6 @@ void VkEncoder::vkDestroyFence(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyFence encode");
mImpl->log("start vkDestroyFence");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2856,8 +2653,6 @@ void VkEncoder::vkDestroyFence(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyFence readParams");
- AEMU_SCOPED_TRACE("vkDestroyFence returnUnmarshal");
resources->destroyMapping()->mapHandles_VkFence((VkFence*)&fence);
pool->freeAll();
countingStream->clearPool();
@@ -2871,7 +2666,6 @@ VkResult VkEncoder::vkResetFences(
const VkFence* pFences)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkResetFences encode");
mImpl->log("start vkResetFences");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2918,8 +2712,6 @@ VkResult VkEncoder::vkResetFences(
stream->handleMapping()->mapHandles_VkFence_u64(local_pFences, cgen_var_177, ((fenceCount)));
stream->write((uint64_t*)cgen_var_177, ((fenceCount)) * 8);
}
- AEMU_SCOPED_TRACE("vkResetFences readParams");
- AEMU_SCOPED_TRACE("vkResetFences returnUnmarshal");
VkResult vkResetFences_VkResult_return = (VkResult)0;
stream->read(&vkResetFences_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -2934,7 +2726,6 @@ VkResult VkEncoder::vkGetFenceStatus(
VkFence fence)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetFenceStatus encode");
mImpl->log("start vkGetFenceStatus");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -2965,8 +2756,6 @@ VkResult VkEncoder::vkGetFenceStatus(
uint64_t cgen_var_181;
stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_181, 1);
stream->write((uint64_t*)&cgen_var_181, 1 * 8);
- AEMU_SCOPED_TRACE("vkGetFenceStatus readParams");
- AEMU_SCOPED_TRACE("vkGetFenceStatus returnUnmarshal");
VkResult vkGetFenceStatus_VkResult_return = (VkResult)0;
stream->read(&vkGetFenceStatus_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -2984,7 +2773,6 @@ VkResult VkEncoder::vkWaitForFences(
uint64_t timeout)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkWaitForFences encode");
mImpl->log("start vkWaitForFences");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3039,8 +2827,6 @@ VkResult VkEncoder::vkWaitForFences(
}
stream->write((VkBool32*)&local_waitAll, sizeof(VkBool32));
stream->write((uint64_t*)&local_timeout, sizeof(uint64_t));
- AEMU_SCOPED_TRACE("vkWaitForFences readParams");
- AEMU_SCOPED_TRACE("vkWaitForFences returnUnmarshal");
VkResult vkWaitForFences_VkResult_return = (VkResult)0;
stream->read(&vkWaitForFences_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -3057,7 +2843,6 @@ VkResult VkEncoder::vkCreateSemaphore(
VkSemaphore* pSemaphore)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateSemaphore encode");
mImpl->log("start vkCreateSemaphore");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3127,13 +2912,11 @@ VkResult VkEncoder::vkCreateSemaphore(
stream->handleMapping()->mapHandles_VkSemaphore_u64(pSemaphore, &cgen_var_191, 1);
stream->write((uint64_t*)&cgen_var_191, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateSemaphore readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_192;
stream->read((uint64_t*)&cgen_var_192, 8);
stream->handleMapping()->mapHandles_u64_VkSemaphore(&cgen_var_192, (VkSemaphore*)pSemaphore, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateSemaphore returnUnmarshal");
VkResult vkCreateSemaphore_VkResult_return = (VkResult)0;
stream->read(&vkCreateSemaphore_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -3149,7 +2932,6 @@ void VkEncoder::vkDestroySemaphore(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroySemaphore encode");
mImpl->log("start vkDestroySemaphore");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3206,8 +2988,6 @@ void VkEncoder::vkDestroySemaphore(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroySemaphore readParams");
- AEMU_SCOPED_TRACE("vkDestroySemaphore returnUnmarshal");
resources->destroyMapping()->mapHandles_VkSemaphore((VkSemaphore*)&semaphore);
pool->freeAll();
countingStream->clearPool();
@@ -3222,7 +3002,6 @@ VkResult VkEncoder::vkCreateEvent(
VkEvent* pEvent)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateEvent encode");
mImpl->log("start vkCreateEvent");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3292,13 +3071,11 @@ VkResult VkEncoder::vkCreateEvent(
stream->handleMapping()->mapHandles_VkEvent_u64(pEvent, &cgen_var_204, 1);
stream->write((uint64_t*)&cgen_var_204, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateEvent readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_205;
stream->read((uint64_t*)&cgen_var_205, 8);
stream->handleMapping()->mapHandles_u64_VkEvent(&cgen_var_205, (VkEvent*)pEvent, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateEvent returnUnmarshal");
VkResult vkCreateEvent_VkResult_return = (VkResult)0;
stream->read(&vkCreateEvent_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -3314,7 +3091,6 @@ void VkEncoder::vkDestroyEvent(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyEvent encode");
mImpl->log("start vkDestroyEvent");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3371,8 +3147,6 @@ void VkEncoder::vkDestroyEvent(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyEvent readParams");
- AEMU_SCOPED_TRACE("vkDestroyEvent returnUnmarshal");
resources->destroyMapping()->mapHandles_VkEvent((VkEvent*)&event);
pool->freeAll();
countingStream->clearPool();
@@ -3385,7 +3159,6 @@ VkResult VkEncoder::vkGetEventStatus(
VkEvent event)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetEventStatus encode");
mImpl->log("start vkGetEventStatus");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3416,8 +3189,6 @@ VkResult VkEncoder::vkGetEventStatus(
uint64_t cgen_var_215;
stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_215, 1);
stream->write((uint64_t*)&cgen_var_215, 1 * 8);
- AEMU_SCOPED_TRACE("vkGetEventStatus readParams");
- AEMU_SCOPED_TRACE("vkGetEventStatus returnUnmarshal");
VkResult vkGetEventStatus_VkResult_return = (VkResult)0;
stream->read(&vkGetEventStatus_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -3432,7 +3203,6 @@ VkResult VkEncoder::vkSetEvent(
VkEvent event)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkSetEvent encode");
mImpl->log("start vkSetEvent");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3463,8 +3233,6 @@ VkResult VkEncoder::vkSetEvent(
uint64_t cgen_var_219;
stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_219, 1);
stream->write((uint64_t*)&cgen_var_219, 1 * 8);
- AEMU_SCOPED_TRACE("vkSetEvent readParams");
- AEMU_SCOPED_TRACE("vkSetEvent returnUnmarshal");
VkResult vkSetEvent_VkResult_return = (VkResult)0;
stream->read(&vkSetEvent_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -3479,7 +3247,6 @@ VkResult VkEncoder::vkResetEvent(
VkEvent event)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkResetEvent encode");
mImpl->log("start vkResetEvent");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3510,8 +3277,6 @@ VkResult VkEncoder::vkResetEvent(
uint64_t cgen_var_223;
stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_223, 1);
stream->write((uint64_t*)&cgen_var_223, 1 * 8);
- AEMU_SCOPED_TRACE("vkResetEvent readParams");
- AEMU_SCOPED_TRACE("vkResetEvent returnUnmarshal");
VkResult vkResetEvent_VkResult_return = (VkResult)0;
stream->read(&vkResetEvent_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -3528,7 +3293,6 @@ VkResult VkEncoder::vkCreateQueryPool(
VkQueryPool* pQueryPool)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateQueryPool encode");
mImpl->log("start vkCreateQueryPool");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3598,13 +3362,11 @@ VkResult VkEncoder::vkCreateQueryPool(
stream->handleMapping()->mapHandles_VkQueryPool_u64(pQueryPool, &cgen_var_229, 1);
stream->write((uint64_t*)&cgen_var_229, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateQueryPool readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_230;
stream->read((uint64_t*)&cgen_var_230, 8);
stream->handleMapping()->mapHandles_u64_VkQueryPool(&cgen_var_230, (VkQueryPool*)pQueryPool, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateQueryPool returnUnmarshal");
VkResult vkCreateQueryPool_VkResult_return = (VkResult)0;
stream->read(&vkCreateQueryPool_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -3620,7 +3382,6 @@ void VkEncoder::vkDestroyQueryPool(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyQueryPool encode");
mImpl->log("start vkDestroyQueryPool");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3677,8 +3438,6 @@ void VkEncoder::vkDestroyQueryPool(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyQueryPool readParams");
- AEMU_SCOPED_TRACE("vkDestroyQueryPool returnUnmarshal");
resources->destroyMapping()->mapHandles_VkQueryPool((VkQueryPool*)&queryPool);
pool->freeAll();
countingStream->clearPool();
@@ -3697,7 +3456,6 @@ VkResult VkEncoder::vkGetQueryPoolResults(
VkQueryResultFlags flags)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetQueryPoolResults encode");
mImpl->log("start vkGetQueryPoolResults");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3752,9 +3510,7 @@ VkResult VkEncoder::vkGetQueryPoolResults(
stream->write((void*)pData, ((dataSize)) * sizeof(uint8_t));
stream->write((VkDeviceSize*)&local_stride, sizeof(VkDeviceSize));
stream->write((VkQueryResultFlags*)&local_flags, sizeof(VkQueryResultFlags));
- AEMU_SCOPED_TRACE("vkGetQueryPoolResults readParams");
stream->read((void*)pData, ((dataSize)) * sizeof(uint8_t));
- AEMU_SCOPED_TRACE("vkGetQueryPoolResults returnUnmarshal");
VkResult vkGetQueryPoolResults_VkResult_return = (VkResult)0;
stream->read(&vkGetQueryPoolResults_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -3771,7 +3527,6 @@ VkResult VkEncoder::vkCreateBuffer(
VkBuffer* pBuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateBuffer encode");
mImpl->log("start vkCreateBuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3841,13 +3596,11 @@ VkResult VkEncoder::vkCreateBuffer(
stream->handleMapping()->mapHandles_VkBuffer_u64(pBuffer, &cgen_var_248, 1);
stream->write((uint64_t*)&cgen_var_248, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateBuffer readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_249;
stream->read((uint64_t*)&cgen_var_249, 8);
stream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_249, (VkBuffer*)pBuffer, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateBuffer returnUnmarshal");
VkResult vkCreateBuffer_VkResult_return = (VkResult)0;
stream->read(&vkCreateBuffer_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -3863,7 +3616,6 @@ void VkEncoder::vkDestroyBuffer(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyBuffer encode");
mImpl->log("start vkDestroyBuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -3920,8 +3672,6 @@ void VkEncoder::vkDestroyBuffer(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyBuffer readParams");
- AEMU_SCOPED_TRACE("vkDestroyBuffer returnUnmarshal");
resources->destroyMapping()->mapHandles_VkBuffer((VkBuffer*)&buffer);
pool->freeAll();
countingStream->clearPool();
@@ -3936,7 +3686,6 @@ VkResult VkEncoder::vkCreateBufferView(
VkBufferView* pView)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateBufferView encode");
mImpl->log("start vkCreateBufferView");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4006,13 +3755,11 @@ VkResult VkEncoder::vkCreateBufferView(
stream->handleMapping()->mapHandles_VkBufferView_u64(pView, &cgen_var_261, 1);
stream->write((uint64_t*)&cgen_var_261, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateBufferView readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_262;
stream->read((uint64_t*)&cgen_var_262, 8);
stream->handleMapping()->mapHandles_u64_VkBufferView(&cgen_var_262, (VkBufferView*)pView, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateBufferView returnUnmarshal");
VkResult vkCreateBufferView_VkResult_return = (VkResult)0;
stream->read(&vkCreateBufferView_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -4028,7 +3775,6 @@ void VkEncoder::vkDestroyBufferView(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyBufferView encode");
mImpl->log("start vkDestroyBufferView");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4085,8 +3831,6 @@ void VkEncoder::vkDestroyBufferView(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyBufferView readParams");
- AEMU_SCOPED_TRACE("vkDestroyBufferView returnUnmarshal");
resources->destroyMapping()->mapHandles_VkBufferView((VkBufferView*)&bufferView);
pool->freeAll();
countingStream->clearPool();
@@ -4101,7 +3845,6 @@ VkResult VkEncoder::vkCreateImage(
VkImage* pImage)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateImage encode");
mImpl->log("start vkCreateImage");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4172,13 +3915,11 @@ VkResult VkEncoder::vkCreateImage(
stream->handleMapping()->mapHandles_VkImage_u64(pImage, &cgen_var_274, 1);
stream->write((uint64_t*)&cgen_var_274, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateImage readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_275;
stream->read((uint64_t*)&cgen_var_275, 8);
stream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_275, (VkImage*)pImage, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateImage returnUnmarshal");
VkResult vkCreateImage_VkResult_return = (VkResult)0;
stream->read(&vkCreateImage_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -4194,7 +3935,6 @@ void VkEncoder::vkDestroyImage(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyImage encode");
mImpl->log("start vkDestroyImage");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4251,8 +3991,6 @@ void VkEncoder::vkDestroyImage(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyImage readParams");
- AEMU_SCOPED_TRACE("vkDestroyImage returnUnmarshal");
resources->destroyMapping()->mapHandles_VkImage((VkImage*)&image);
pool->freeAll();
countingStream->clearPool();
@@ -4267,7 +4005,6 @@ void VkEncoder::vkGetImageSubresourceLayout(
VkSubresourceLayout* pLayout)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetImageSubresourceLayout encode");
mImpl->log("start vkGetImageSubresourceLayout");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4313,13 +4050,11 @@ void VkEncoder::vkGetImageSubresourceLayout(
stream->write((uint64_t*)&cgen_var_285, 1 * 8);
marshal_VkImageSubresource(stream, (VkImageSubresource*)(local_pSubresource));
marshal_VkSubresourceLayout(stream, (VkSubresourceLayout*)(pLayout));
- AEMU_SCOPED_TRACE("vkGetImageSubresourceLayout readParams");
unmarshal_VkSubresourceLayout(stream, (VkSubresourceLayout*)(pLayout));
if (pLayout)
{
transform_fromhost_VkSubresourceLayout(mImpl->resources(), (VkSubresourceLayout*)(pLayout));
}
- AEMU_SCOPED_TRACE("vkGetImageSubresourceLayout returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -4333,7 +4068,6 @@ VkResult VkEncoder::vkCreateImageView(
VkImageView* pView)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateImageView encode");
mImpl->log("start vkCreateImageView");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4403,13 +4137,11 @@ VkResult VkEncoder::vkCreateImageView(
stream->handleMapping()->mapHandles_VkImageView_u64(pView, &cgen_var_291, 1);
stream->write((uint64_t*)&cgen_var_291, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateImageView readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_292;
stream->read((uint64_t*)&cgen_var_292, 8);
stream->handleMapping()->mapHandles_u64_VkImageView(&cgen_var_292, (VkImageView*)pView, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateImageView returnUnmarshal");
VkResult vkCreateImageView_VkResult_return = (VkResult)0;
stream->read(&vkCreateImageView_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -4425,7 +4157,6 @@ void VkEncoder::vkDestroyImageView(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyImageView encode");
mImpl->log("start vkDestroyImageView");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4482,8 +4213,6 @@ void VkEncoder::vkDestroyImageView(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyImageView readParams");
- AEMU_SCOPED_TRACE("vkDestroyImageView returnUnmarshal");
resources->destroyMapping()->mapHandles_VkImageView((VkImageView*)&imageView);
pool->freeAll();
countingStream->clearPool();
@@ -4498,7 +4227,6 @@ VkResult VkEncoder::vkCreateShaderModule(
VkShaderModule* pShaderModule)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateShaderModule encode");
mImpl->log("start vkCreateShaderModule");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4568,13 +4296,11 @@ VkResult VkEncoder::vkCreateShaderModule(
stream->handleMapping()->mapHandles_VkShaderModule_u64(pShaderModule, &cgen_var_304, 1);
stream->write((uint64_t*)&cgen_var_304, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateShaderModule readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_305;
stream->read((uint64_t*)&cgen_var_305, 8);
stream->handleMapping()->mapHandles_u64_VkShaderModule(&cgen_var_305, (VkShaderModule*)pShaderModule, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateShaderModule returnUnmarshal");
VkResult vkCreateShaderModule_VkResult_return = (VkResult)0;
stream->read(&vkCreateShaderModule_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -4590,7 +4316,6 @@ void VkEncoder::vkDestroyShaderModule(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyShaderModule encode");
mImpl->log("start vkDestroyShaderModule");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4647,8 +4372,6 @@ void VkEncoder::vkDestroyShaderModule(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyShaderModule readParams");
- AEMU_SCOPED_TRACE("vkDestroyShaderModule returnUnmarshal");
resources->destroyMapping()->mapHandles_VkShaderModule((VkShaderModule*)&shaderModule);
pool->freeAll();
countingStream->clearPool();
@@ -4663,7 +4386,6 @@ VkResult VkEncoder::vkCreatePipelineCache(
VkPipelineCache* pPipelineCache)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreatePipelineCache encode");
mImpl->log("start vkCreatePipelineCache");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4733,13 +4455,11 @@ VkResult VkEncoder::vkCreatePipelineCache(
stream->handleMapping()->mapHandles_VkPipelineCache_u64(pPipelineCache, &cgen_var_317, 1);
stream->write((uint64_t*)&cgen_var_317, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreatePipelineCache readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_318;
stream->read((uint64_t*)&cgen_var_318, 8);
stream->handleMapping()->mapHandles_u64_VkPipelineCache(&cgen_var_318, (VkPipelineCache*)pPipelineCache, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreatePipelineCache returnUnmarshal");
VkResult vkCreatePipelineCache_VkResult_return = (VkResult)0;
stream->read(&vkCreatePipelineCache_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -4755,7 +4475,6 @@ void VkEncoder::vkDestroyPipelineCache(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyPipelineCache encode");
mImpl->log("start vkDestroyPipelineCache");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4812,8 +4531,6 @@ void VkEncoder::vkDestroyPipelineCache(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyPipelineCache readParams");
- AEMU_SCOPED_TRACE("vkDestroyPipelineCache returnUnmarshal");
resources->destroyMapping()->mapHandles_VkPipelineCache((VkPipelineCache*)&pipelineCache);
pool->freeAll();
countingStream->clearPool();
@@ -4828,7 +4545,6 @@ VkResult VkEncoder::vkGetPipelineCacheData(
void* pData)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPipelineCacheData encode");
mImpl->log("start vkGetPipelineCacheData");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4889,7 +4605,6 @@ VkResult VkEncoder::vkGetPipelineCacheData(
{
stream->write((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
}
- AEMU_SCOPED_TRACE("vkGetPipelineCacheData readParams");
// WARNING PTR CHECK
size_t* check_pDataSize;
check_pDataSize = (size_t*)(uintptr_t)stream->getBe64();
@@ -4912,7 +4627,6 @@ VkResult VkEncoder::vkGetPipelineCacheData(
}
stream->read((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
}
- AEMU_SCOPED_TRACE("vkGetPipelineCacheData returnUnmarshal");
VkResult vkGetPipelineCacheData_VkResult_return = (VkResult)0;
stream->read(&vkGetPipelineCacheData_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -4929,7 +4643,6 @@ VkResult VkEncoder::vkMergePipelineCaches(
const VkPipelineCache* pSrcCaches)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkMergePipelineCaches encode");
mImpl->log("start vkMergePipelineCaches");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -4984,8 +4697,6 @@ VkResult VkEncoder::vkMergePipelineCaches(
stream->handleMapping()->mapHandles_VkPipelineCache_u64(local_pSrcCaches, cgen_var_343, ((srcCacheCount)));
stream->write((uint64_t*)cgen_var_343, ((srcCacheCount)) * 8);
}
- AEMU_SCOPED_TRACE("vkMergePipelineCaches readParams");
- AEMU_SCOPED_TRACE("vkMergePipelineCaches returnUnmarshal");
VkResult vkMergePipelineCaches_VkResult_return = (VkResult)0;
stream->read(&vkMergePipelineCaches_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -5004,7 +4715,6 @@ VkResult VkEncoder::vkCreateGraphicsPipelines(
VkPipeline* pPipelines)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateGraphicsPipelines encode");
mImpl->log("start vkCreateGraphicsPipelines");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5106,7 +4816,6 @@ VkResult VkEncoder::vkCreateGraphicsPipelines(
stream->write((uint64_t*)cgen_var_351, ((createInfoCount)) * 8);
}
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateGraphicsPipelines readParams");
stream->setHandleMapping(resources->createMapping());
if (((createInfoCount)))
{
@@ -5116,7 +4825,6 @@ VkResult VkEncoder::vkCreateGraphicsPipelines(
stream->handleMapping()->mapHandles_u64_VkPipeline(cgen_var_352, (VkPipeline*)pPipelines, ((createInfoCount)));
}
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateGraphicsPipelines returnUnmarshal");
VkResult vkCreateGraphicsPipelines_VkResult_return = (VkResult)0;
stream->read(&vkCreateGraphicsPipelines_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -5135,7 +4843,6 @@ VkResult VkEncoder::vkCreateComputePipelines(
VkPipeline* pPipelines)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateComputePipelines encode");
mImpl->log("start vkCreateComputePipelines");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5237,7 +4944,6 @@ VkResult VkEncoder::vkCreateComputePipelines(
stream->write((uint64_t*)cgen_var_360, ((createInfoCount)) * 8);
}
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateComputePipelines readParams");
stream->setHandleMapping(resources->createMapping());
if (((createInfoCount)))
{
@@ -5247,7 +4953,6 @@ VkResult VkEncoder::vkCreateComputePipelines(
stream->handleMapping()->mapHandles_u64_VkPipeline(cgen_var_361, (VkPipeline*)pPipelines, ((createInfoCount)));
}
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateComputePipelines returnUnmarshal");
VkResult vkCreateComputePipelines_VkResult_return = (VkResult)0;
stream->read(&vkCreateComputePipelines_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -5263,7 +4968,6 @@ void VkEncoder::vkDestroyPipeline(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyPipeline encode");
mImpl->log("start vkDestroyPipeline");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5320,8 +5024,6 @@ void VkEncoder::vkDestroyPipeline(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyPipeline readParams");
- AEMU_SCOPED_TRACE("vkDestroyPipeline returnUnmarshal");
resources->destroyMapping()->mapHandles_VkPipeline((VkPipeline*)&pipeline);
pool->freeAll();
countingStream->clearPool();
@@ -5336,7 +5038,6 @@ VkResult VkEncoder::vkCreatePipelineLayout(
VkPipelineLayout* pPipelineLayout)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreatePipelineLayout encode");
mImpl->log("start vkCreatePipelineLayout");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5406,13 +5107,11 @@ VkResult VkEncoder::vkCreatePipelineLayout(
stream->handleMapping()->mapHandles_VkPipelineLayout_u64(pPipelineLayout, &cgen_var_373, 1);
stream->write((uint64_t*)&cgen_var_373, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreatePipelineLayout readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_374;
stream->read((uint64_t*)&cgen_var_374, 8);
stream->handleMapping()->mapHandles_u64_VkPipelineLayout(&cgen_var_374, (VkPipelineLayout*)pPipelineLayout, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreatePipelineLayout returnUnmarshal");
VkResult vkCreatePipelineLayout_VkResult_return = (VkResult)0;
stream->read(&vkCreatePipelineLayout_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -5428,7 +5127,6 @@ void VkEncoder::vkDestroyPipelineLayout(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyPipelineLayout encode");
mImpl->log("start vkDestroyPipelineLayout");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5485,8 +5183,6 @@ void VkEncoder::vkDestroyPipelineLayout(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyPipelineLayout readParams");
- AEMU_SCOPED_TRACE("vkDestroyPipelineLayout returnUnmarshal");
resources->destroyMapping()->mapHandles_VkPipelineLayout((VkPipelineLayout*)&pipelineLayout);
pool->freeAll();
countingStream->clearPool();
@@ -5501,7 +5197,6 @@ VkResult VkEncoder::vkCreateSampler(
VkSampler* pSampler)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateSampler encode");
mImpl->log("start vkCreateSampler");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5571,13 +5266,11 @@ VkResult VkEncoder::vkCreateSampler(
stream->handleMapping()->mapHandles_VkSampler_u64(pSampler, &cgen_var_386, 1);
stream->write((uint64_t*)&cgen_var_386, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateSampler readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_387;
stream->read((uint64_t*)&cgen_var_387, 8);
stream->handleMapping()->mapHandles_u64_VkSampler(&cgen_var_387, (VkSampler*)pSampler, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateSampler returnUnmarshal");
VkResult vkCreateSampler_VkResult_return = (VkResult)0;
stream->read(&vkCreateSampler_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -5593,7 +5286,6 @@ void VkEncoder::vkDestroySampler(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroySampler encode");
mImpl->log("start vkDestroySampler");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5650,8 +5342,6 @@ void VkEncoder::vkDestroySampler(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroySampler readParams");
- AEMU_SCOPED_TRACE("vkDestroySampler returnUnmarshal");
resources->destroyMapping()->mapHandles_VkSampler((VkSampler*)&sampler);
pool->freeAll();
countingStream->clearPool();
@@ -5666,7 +5356,6 @@ VkResult VkEncoder::vkCreateDescriptorSetLayout(
VkDescriptorSetLayout* pSetLayout)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateDescriptorSetLayout encode");
mImpl->log("start vkCreateDescriptorSetLayout");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5736,13 +5425,11 @@ VkResult VkEncoder::vkCreateDescriptorSetLayout(
stream->handleMapping()->mapHandles_VkDescriptorSetLayout_u64(pSetLayout, &cgen_var_399, 1);
stream->write((uint64_t*)&cgen_var_399, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateDescriptorSetLayout readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_400;
stream->read((uint64_t*)&cgen_var_400, 8);
stream->handleMapping()->mapHandles_u64_VkDescriptorSetLayout(&cgen_var_400, (VkDescriptorSetLayout*)pSetLayout, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateDescriptorSetLayout returnUnmarshal");
VkResult vkCreateDescriptorSetLayout_VkResult_return = (VkResult)0;
stream->read(&vkCreateDescriptorSetLayout_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -5758,7 +5445,6 @@ void VkEncoder::vkDestroyDescriptorSetLayout(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyDescriptorSetLayout encode");
mImpl->log("start vkDestroyDescriptorSetLayout");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5815,8 +5501,6 @@ void VkEncoder::vkDestroyDescriptorSetLayout(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyDescriptorSetLayout readParams");
- AEMU_SCOPED_TRACE("vkDestroyDescriptorSetLayout returnUnmarshal");
resources->destroyMapping()->mapHandles_VkDescriptorSetLayout((VkDescriptorSetLayout*)&descriptorSetLayout);
pool->freeAll();
countingStream->clearPool();
@@ -5831,7 +5515,6 @@ VkResult VkEncoder::vkCreateDescriptorPool(
VkDescriptorPool* pDescriptorPool)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateDescriptorPool encode");
mImpl->log("start vkCreateDescriptorPool");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5901,13 +5584,11 @@ VkResult VkEncoder::vkCreateDescriptorPool(
stream->handleMapping()->mapHandles_VkDescriptorPool_u64(pDescriptorPool, &cgen_var_412, 1);
stream->write((uint64_t*)&cgen_var_412, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateDescriptorPool readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_413;
stream->read((uint64_t*)&cgen_var_413, 8);
stream->handleMapping()->mapHandles_u64_VkDescriptorPool(&cgen_var_413, (VkDescriptorPool*)pDescriptorPool, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateDescriptorPool returnUnmarshal");
VkResult vkCreateDescriptorPool_VkResult_return = (VkResult)0;
stream->read(&vkCreateDescriptorPool_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -5923,7 +5604,6 @@ void VkEncoder::vkDestroyDescriptorPool(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyDescriptorPool encode");
mImpl->log("start vkDestroyDescriptorPool");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -5980,8 +5660,6 @@ void VkEncoder::vkDestroyDescriptorPool(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyDescriptorPool readParams");
- AEMU_SCOPED_TRACE("vkDestroyDescriptorPool returnUnmarshal");
resources->destroyMapping()->mapHandles_VkDescriptorPool((VkDescriptorPool*)&descriptorPool);
pool->freeAll();
countingStream->clearPool();
@@ -5995,7 +5673,6 @@ VkResult VkEncoder::vkResetDescriptorPool(
VkDescriptorPoolResetFlags flags)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkResetDescriptorPool encode");
mImpl->log("start vkResetDescriptorPool");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6030,8 +5707,6 @@ VkResult VkEncoder::vkResetDescriptorPool(
stream->handleMapping()->mapHandles_VkDescriptorPool_u64(&local_descriptorPool, &cgen_var_423, 1);
stream->write((uint64_t*)&cgen_var_423, 1 * 8);
stream->write((VkDescriptorPoolResetFlags*)&local_flags, sizeof(VkDescriptorPoolResetFlags));
- AEMU_SCOPED_TRACE("vkResetDescriptorPool readParams");
- AEMU_SCOPED_TRACE("vkResetDescriptorPool returnUnmarshal");
VkResult vkResetDescriptorPool_VkResult_return = (VkResult)0;
stream->read(&vkResetDescriptorPool_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -6047,7 +5722,6 @@ VkResult VkEncoder::vkAllocateDescriptorSets(
VkDescriptorSet* pDescriptorSets)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkAllocateDescriptorSets encode");
mImpl->log("start vkAllocateDescriptorSets");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6099,7 +5773,6 @@ VkResult VkEncoder::vkAllocateDescriptorSets(
stream->write((uint64_t*)cgen_var_427, pAllocateInfo->descriptorSetCount * 8);
}
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkAllocateDescriptorSets readParams");
stream->setHandleMapping(resources->createMapping());
if (pAllocateInfo->descriptorSetCount)
{
@@ -6109,7 +5782,6 @@ VkResult VkEncoder::vkAllocateDescriptorSets(
stream->handleMapping()->mapHandles_u64_VkDescriptorSet(cgen_var_428, (VkDescriptorSet*)pDescriptorSets, pAllocateInfo->descriptorSetCount);
}
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkAllocateDescriptorSets returnUnmarshal");
VkResult vkAllocateDescriptorSets_VkResult_return = (VkResult)0;
stream->read(&vkAllocateDescriptorSets_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -6126,7 +5798,6 @@ VkResult VkEncoder::vkFreeDescriptorSets(
const VkDescriptorSet* pDescriptorSets)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkFreeDescriptorSets encode");
mImpl->log("start vkFreeDescriptorSets");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6193,8 +5864,6 @@ VkResult VkEncoder::vkFreeDescriptorSets(
stream->write((uint64_t*)cgen_var_436, ((descriptorSetCount)) * 8);
}
}
- AEMU_SCOPED_TRACE("vkFreeDescriptorSets readParams");
- AEMU_SCOPED_TRACE("vkFreeDescriptorSets returnUnmarshal");
VkResult vkFreeDescriptorSets_VkResult_return = (VkResult)0;
stream->read(&vkFreeDescriptorSets_VkResult_return, sizeof(VkResult));
if (pDescriptorSets)
@@ -6216,7 +5885,6 @@ void VkEncoder::vkUpdateDescriptorSets(
const VkCopyDescriptorSet* pDescriptorCopies)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSets encode");
mImpl->log("start vkUpdateDescriptorSets");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6297,8 +5965,6 @@ void VkEncoder::vkUpdateDescriptorSets(
{
marshal_VkCopyDescriptorSet(stream, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
}
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSets readParams");
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSets returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -6312,7 +5978,6 @@ VkResult VkEncoder::vkCreateFramebuffer(
VkFramebuffer* pFramebuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateFramebuffer encode");
mImpl->log("start vkCreateFramebuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6382,13 +6047,11 @@ VkResult VkEncoder::vkCreateFramebuffer(
stream->handleMapping()->mapHandles_VkFramebuffer_u64(pFramebuffer, &cgen_var_444, 1);
stream->write((uint64_t*)&cgen_var_444, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateFramebuffer readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_445;
stream->read((uint64_t*)&cgen_var_445, 8);
stream->handleMapping()->mapHandles_u64_VkFramebuffer(&cgen_var_445, (VkFramebuffer*)pFramebuffer, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateFramebuffer returnUnmarshal");
VkResult vkCreateFramebuffer_VkResult_return = (VkResult)0;
stream->read(&vkCreateFramebuffer_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -6404,7 +6067,6 @@ void VkEncoder::vkDestroyFramebuffer(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyFramebuffer encode");
mImpl->log("start vkDestroyFramebuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6461,8 +6123,6 @@ void VkEncoder::vkDestroyFramebuffer(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyFramebuffer readParams");
- AEMU_SCOPED_TRACE("vkDestroyFramebuffer returnUnmarshal");
resources->destroyMapping()->mapHandles_VkFramebuffer((VkFramebuffer*)&framebuffer);
pool->freeAll();
countingStream->clearPool();
@@ -6477,7 +6137,6 @@ VkResult VkEncoder::vkCreateRenderPass(
VkRenderPass* pRenderPass)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateRenderPass encode");
mImpl->log("start vkCreateRenderPass");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6547,13 +6206,11 @@ VkResult VkEncoder::vkCreateRenderPass(
stream->handleMapping()->mapHandles_VkRenderPass_u64(pRenderPass, &cgen_var_457, 1);
stream->write((uint64_t*)&cgen_var_457, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateRenderPass readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_458;
stream->read((uint64_t*)&cgen_var_458, 8);
stream->handleMapping()->mapHandles_u64_VkRenderPass(&cgen_var_458, (VkRenderPass*)pRenderPass, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateRenderPass returnUnmarshal");
VkResult vkCreateRenderPass_VkResult_return = (VkResult)0;
stream->read(&vkCreateRenderPass_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -6569,7 +6226,6 @@ void VkEncoder::vkDestroyRenderPass(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyRenderPass encode");
mImpl->log("start vkDestroyRenderPass");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6626,8 +6282,6 @@ void VkEncoder::vkDestroyRenderPass(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyRenderPass readParams");
- AEMU_SCOPED_TRACE("vkDestroyRenderPass returnUnmarshal");
resources->destroyMapping()->mapHandles_VkRenderPass((VkRenderPass*)&renderPass);
pool->freeAll();
countingStream->clearPool();
@@ -6641,7 +6295,6 @@ void VkEncoder::vkGetRenderAreaGranularity(
VkExtent2D* pGranularity)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetRenderAreaGranularity encode");
mImpl->log("start vkGetRenderAreaGranularity");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6674,13 +6327,11 @@ void VkEncoder::vkGetRenderAreaGranularity(
stream->handleMapping()->mapHandles_VkRenderPass_u64(&local_renderPass, &cgen_var_468, 1);
stream->write((uint64_t*)&cgen_var_468, 1 * 8);
marshal_VkExtent2D(stream, (VkExtent2D*)(pGranularity));
- AEMU_SCOPED_TRACE("vkGetRenderAreaGranularity readParams");
unmarshal_VkExtent2D(stream, (VkExtent2D*)(pGranularity));
if (pGranularity)
{
transform_fromhost_VkExtent2D(mImpl->resources(), (VkExtent2D*)(pGranularity));
}
- AEMU_SCOPED_TRACE("vkGetRenderAreaGranularity returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -6694,7 +6345,6 @@ VkResult VkEncoder::vkCreateCommandPool(
VkCommandPool* pCommandPool)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateCommandPool encode");
mImpl->log("start vkCreateCommandPool");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6764,13 +6414,11 @@ VkResult VkEncoder::vkCreateCommandPool(
stream->handleMapping()->mapHandles_VkCommandPool_u64(pCommandPool, &cgen_var_474, 1);
stream->write((uint64_t*)&cgen_var_474, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateCommandPool readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_475;
stream->read((uint64_t*)&cgen_var_475, 8);
stream->handleMapping()->mapHandles_u64_VkCommandPool(&cgen_var_475, (VkCommandPool*)pCommandPool, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateCommandPool returnUnmarshal");
VkResult vkCreateCommandPool_VkResult_return = (VkResult)0;
stream->read(&vkCreateCommandPool_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -6786,7 +6434,6 @@ void VkEncoder::vkDestroyCommandPool(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyCommandPool encode");
mImpl->log("start vkDestroyCommandPool");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6843,8 +6490,6 @@ void VkEncoder::vkDestroyCommandPool(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyCommandPool readParams");
- AEMU_SCOPED_TRACE("vkDestroyCommandPool returnUnmarshal");
resources->destroyMapping()->mapHandles_VkCommandPool((VkCommandPool*)&commandPool);
pool->freeAll();
countingStream->clearPool();
@@ -6858,7 +6503,6 @@ VkResult VkEncoder::vkResetCommandPool(
VkCommandPoolResetFlags flags)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkResetCommandPool encode");
mImpl->log("start vkResetCommandPool");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6893,8 +6537,6 @@ VkResult VkEncoder::vkResetCommandPool(
stream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_485, 1);
stream->write((uint64_t*)&cgen_var_485, 1 * 8);
stream->write((VkCommandPoolResetFlags*)&local_flags, sizeof(VkCommandPoolResetFlags));
- AEMU_SCOPED_TRACE("vkResetCommandPool readParams");
- AEMU_SCOPED_TRACE("vkResetCommandPool returnUnmarshal");
VkResult vkResetCommandPool_VkResult_return = (VkResult)0;
stream->read(&vkResetCommandPool_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -6910,7 +6552,6 @@ VkResult VkEncoder::vkAllocateCommandBuffers(
VkCommandBuffer* pCommandBuffers)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkAllocateCommandBuffers encode");
mImpl->log("start vkAllocateCommandBuffers");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -6962,7 +6603,6 @@ VkResult VkEncoder::vkAllocateCommandBuffers(
stream->write((uint64_t*)cgen_var_489, pAllocateInfo->commandBufferCount * 8);
}
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkAllocateCommandBuffers readParams");
stream->setHandleMapping(resources->createMapping());
if (pAllocateInfo->commandBufferCount)
{
@@ -6972,7 +6612,6 @@ VkResult VkEncoder::vkAllocateCommandBuffers(
stream->handleMapping()->mapHandles_u64_VkCommandBuffer(cgen_var_490, (VkCommandBuffer*)pCommandBuffers, pAllocateInfo->commandBufferCount);
}
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkAllocateCommandBuffers returnUnmarshal");
VkResult vkAllocateCommandBuffers_VkResult_return = (VkResult)0;
stream->read(&vkAllocateCommandBuffers_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -6989,7 +6628,6 @@ void VkEncoder::vkFreeCommandBuffers(
const VkCommandBuffer* pCommandBuffers)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkFreeCommandBuffers encode");
mImpl->log("start vkFreeCommandBuffers");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7056,8 +6694,6 @@ void VkEncoder::vkFreeCommandBuffers(
stream->write((uint64_t*)cgen_var_498, ((commandBufferCount)) * 8);
}
}
- AEMU_SCOPED_TRACE("vkFreeCommandBuffers readParams");
- AEMU_SCOPED_TRACE("vkFreeCommandBuffers returnUnmarshal");
if (pCommandBuffers)
{
resources->destroyMapping()->mapHandles_VkCommandBuffer((VkCommandBuffer*)pCommandBuffers, ((commandBufferCount)));
@@ -7073,7 +6709,6 @@ VkResult VkEncoder::vkBeginCommandBuffer(
const VkCommandBufferBeginInfo* pBeginInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkBeginCommandBuffer encode");
mImpl->log("start vkBeginCommandBuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7109,8 +6744,6 @@ VkResult VkEncoder::vkBeginCommandBuffer(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_500, 1);
stream->write((uint64_t*)&cgen_var_500, 1 * 8);
marshal_VkCommandBufferBeginInfo(stream, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
- AEMU_SCOPED_TRACE("vkBeginCommandBuffer readParams");
- AEMU_SCOPED_TRACE("vkBeginCommandBuffer returnUnmarshal");
VkResult vkBeginCommandBuffer_VkResult_return = (VkResult)0;
stream->read(&vkBeginCommandBuffer_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -7124,7 +6757,6 @@ VkResult VkEncoder::vkEndCommandBuffer(
VkCommandBuffer commandBuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkEndCommandBuffer encode");
mImpl->log("start vkEndCommandBuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7147,8 +6779,6 @@ VkResult VkEncoder::vkEndCommandBuffer(
uint64_t cgen_var_502;
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_502, 1);
stream->write((uint64_t*)&cgen_var_502, 1 * 8);
- AEMU_SCOPED_TRACE("vkEndCommandBuffer readParams");
- AEMU_SCOPED_TRACE("vkEndCommandBuffer returnUnmarshal");
VkResult vkEndCommandBuffer_VkResult_return = (VkResult)0;
stream->read(&vkEndCommandBuffer_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -7163,7 +6793,6 @@ VkResult VkEncoder::vkResetCommandBuffer(
VkCommandBufferResetFlags flags)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkResetCommandBuffer encode");
mImpl->log("start vkResetCommandBuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7190,8 +6819,6 @@ VkResult VkEncoder::vkResetCommandBuffer(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_504, 1);
stream->write((uint64_t*)&cgen_var_504, 1 * 8);
stream->write((VkCommandBufferResetFlags*)&local_flags, sizeof(VkCommandBufferResetFlags));
- AEMU_SCOPED_TRACE("vkResetCommandBuffer readParams");
- AEMU_SCOPED_TRACE("vkResetCommandBuffer returnUnmarshal");
VkResult vkResetCommandBuffer_VkResult_return = (VkResult)0;
stream->read(&vkResetCommandBuffer_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -7207,7 +6834,6 @@ void VkEncoder::vkCmdBindPipeline(
VkPipeline pipeline)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdBindPipeline encode");
mImpl->log("start vkCmdBindPipeline");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7242,8 +6868,6 @@ void VkEncoder::vkCmdBindPipeline(
uint64_t cgen_var_508;
stream->handleMapping()->mapHandles_VkPipeline_u64(&local_pipeline, &cgen_var_508, 1);
stream->write((uint64_t*)&cgen_var_508, 1 * 8);
- AEMU_SCOPED_TRACE("vkCmdBindPipeline readParams");
- AEMU_SCOPED_TRACE("vkCmdBindPipeline returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7257,7 +6881,6 @@ void VkEncoder::vkCmdSetViewport(
const VkViewport* pViewports)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetViewport encode");
mImpl->log("start vkCmdSetViewport");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7313,8 +6936,6 @@ void VkEncoder::vkCmdSetViewport(
{
marshal_VkViewport(stream, (VkViewport*)(local_pViewports + i));
}
- AEMU_SCOPED_TRACE("vkCmdSetViewport readParams");
- AEMU_SCOPED_TRACE("vkCmdSetViewport returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7328,7 +6949,6 @@ void VkEncoder::vkCmdSetScissor(
const VkRect2D* pScissors)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetScissor encode");
mImpl->log("start vkCmdSetScissor");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7384,8 +7004,6 @@ void VkEncoder::vkCmdSetScissor(
{
marshal_VkRect2D(stream, (VkRect2D*)(local_pScissors + i));
}
- AEMU_SCOPED_TRACE("vkCmdSetScissor readParams");
- AEMU_SCOPED_TRACE("vkCmdSetScissor returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7397,7 +7015,6 @@ void VkEncoder::vkCmdSetLineWidth(
float lineWidth)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetLineWidth encode");
mImpl->log("start vkCmdSetLineWidth");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7424,8 +7041,6 @@ void VkEncoder::vkCmdSetLineWidth(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_514, 1);
stream->write((uint64_t*)&cgen_var_514, 1 * 8);
stream->write((float*)&local_lineWidth, sizeof(float));
- AEMU_SCOPED_TRACE("vkCmdSetLineWidth readParams");
- AEMU_SCOPED_TRACE("vkCmdSetLineWidth returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7439,7 +7054,6 @@ void VkEncoder::vkCmdSetDepthBias(
float depthBiasSlopeFactor)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetDepthBias encode");
mImpl->log("start vkCmdSetDepthBias");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7474,8 +7088,6 @@ void VkEncoder::vkCmdSetDepthBias(
stream->write((float*)&local_depthBiasConstantFactor, sizeof(float));
stream->write((float*)&local_depthBiasClamp, sizeof(float));
stream->write((float*)&local_depthBiasSlopeFactor, sizeof(float));
- AEMU_SCOPED_TRACE("vkCmdSetDepthBias readParams");
- AEMU_SCOPED_TRACE("vkCmdSetDepthBias returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7487,7 +7099,6 @@ void VkEncoder::vkCmdSetBlendConstants(
const float blendConstants[4])
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetBlendConstants encode");
mImpl->log("start vkCmdSetBlendConstants");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7514,8 +7125,6 @@ void VkEncoder::vkCmdSetBlendConstants(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_518, 1);
stream->write((uint64_t*)&cgen_var_518, 1 * 8);
stream->write((float*)local_blendConstants, 4 * sizeof(float));
- AEMU_SCOPED_TRACE("vkCmdSetBlendConstants readParams");
- AEMU_SCOPED_TRACE("vkCmdSetBlendConstants returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7528,7 +7137,6 @@ void VkEncoder::vkCmdSetDepthBounds(
float maxDepthBounds)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetDepthBounds encode");
mImpl->log("start vkCmdSetDepthBounds");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7559,8 +7167,6 @@ void VkEncoder::vkCmdSetDepthBounds(
stream->write((uint64_t*)&cgen_var_520, 1 * 8);
stream->write((float*)&local_minDepthBounds, sizeof(float));
stream->write((float*)&local_maxDepthBounds, sizeof(float));
- AEMU_SCOPED_TRACE("vkCmdSetDepthBounds readParams");
- AEMU_SCOPED_TRACE("vkCmdSetDepthBounds returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7573,7 +7179,6 @@ void VkEncoder::vkCmdSetStencilCompareMask(
uint32_t compareMask)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetStencilCompareMask encode");
mImpl->log("start vkCmdSetStencilCompareMask");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7604,8 +7209,6 @@ void VkEncoder::vkCmdSetStencilCompareMask(
stream->write((uint64_t*)&cgen_var_522, 1 * 8);
stream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
stream->write((uint32_t*)&local_compareMask, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdSetStencilCompareMask readParams");
- AEMU_SCOPED_TRACE("vkCmdSetStencilCompareMask returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7618,7 +7221,6 @@ void VkEncoder::vkCmdSetStencilWriteMask(
uint32_t writeMask)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetStencilWriteMask encode");
mImpl->log("start vkCmdSetStencilWriteMask");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7649,8 +7251,6 @@ void VkEncoder::vkCmdSetStencilWriteMask(
stream->write((uint64_t*)&cgen_var_524, 1 * 8);
stream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
stream->write((uint32_t*)&local_writeMask, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdSetStencilWriteMask readParams");
- AEMU_SCOPED_TRACE("vkCmdSetStencilWriteMask returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7663,7 +7263,6 @@ void VkEncoder::vkCmdSetStencilReference(
uint32_t reference)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetStencilReference encode");
mImpl->log("start vkCmdSetStencilReference");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7694,8 +7293,6 @@ void VkEncoder::vkCmdSetStencilReference(
stream->write((uint64_t*)&cgen_var_526, 1 * 8);
stream->write((VkStencilFaceFlags*)&local_faceMask, sizeof(VkStencilFaceFlags));
stream->write((uint32_t*)&local_reference, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdSetStencilReference readParams");
- AEMU_SCOPED_TRACE("vkCmdSetStencilReference returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7713,7 +7310,6 @@ void VkEncoder::vkCmdBindDescriptorSets(
const uint32_t* pDynamicOffsets)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdBindDescriptorSets encode");
mImpl->log("start vkCmdBindDescriptorSets");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7788,8 +7384,6 @@ void VkEncoder::vkCmdBindDescriptorSets(
}
stream->write((uint32_t*)&local_dynamicOffsetCount, sizeof(uint32_t));
stream->write((uint32_t*)local_pDynamicOffsets, ((dynamicOffsetCount)) * sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdBindDescriptorSets readParams");
- AEMU_SCOPED_TRACE("vkCmdBindDescriptorSets returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7803,7 +7397,6 @@ void VkEncoder::vkCmdBindIndexBuffer(
VkIndexType indexType)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdBindIndexBuffer encode");
mImpl->log("start vkCmdBindIndexBuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7842,8 +7435,6 @@ void VkEncoder::vkCmdBindIndexBuffer(
stream->write((uint64_t*)&cgen_var_536, 1 * 8);
stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
stream->write((VkIndexType*)&local_indexType, sizeof(VkIndexType));
- AEMU_SCOPED_TRACE("vkCmdBindIndexBuffer readParams");
- AEMU_SCOPED_TRACE("vkCmdBindIndexBuffer returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7858,7 +7449,6 @@ void VkEncoder::vkCmdBindVertexBuffers(
const VkDeviceSize* pOffsets)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdBindVertexBuffers encode");
mImpl->log("start vkCmdBindVertexBuffers");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7917,8 +7507,6 @@ void VkEncoder::vkCmdBindVertexBuffers(
stream->write((uint64_t*)cgen_var_540, ((bindingCount)) * 8);
}
stream->write((VkDeviceSize*)local_pOffsets, ((bindingCount)) * sizeof(VkDeviceSize));
- AEMU_SCOPED_TRACE("vkCmdBindVertexBuffers readParams");
- AEMU_SCOPED_TRACE("vkCmdBindVertexBuffers returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7933,7 +7521,6 @@ void VkEncoder::vkCmdDraw(
uint32_t firstInstance)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDraw encode");
mImpl->log("start vkCmdDraw");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -7972,8 +7559,6 @@ void VkEncoder::vkCmdDraw(
stream->write((uint32_t*)&local_instanceCount, sizeof(uint32_t));
stream->write((uint32_t*)&local_firstVertex, sizeof(uint32_t));
stream->write((uint32_t*)&local_firstInstance, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDraw readParams");
- AEMU_SCOPED_TRACE("vkCmdDraw returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -7989,7 +7574,6 @@ void VkEncoder::vkCmdDrawIndexed(
uint32_t firstInstance)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDrawIndexed encode");
mImpl->log("start vkCmdDrawIndexed");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8032,8 +7616,6 @@ void VkEncoder::vkCmdDrawIndexed(
stream->write((uint32_t*)&local_firstIndex, sizeof(uint32_t));
stream->write((int32_t*)&local_vertexOffset, sizeof(int32_t));
stream->write((uint32_t*)&local_firstInstance, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDrawIndexed readParams");
- AEMU_SCOPED_TRACE("vkCmdDrawIndexed returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8048,7 +7630,6 @@ void VkEncoder::vkCmdDrawIndirect(
uint32_t stride)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDrawIndirect encode");
mImpl->log("start vkCmdDrawIndirect");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8091,8 +7672,6 @@ void VkEncoder::vkCmdDrawIndirect(
stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
stream->write((uint32_t*)&local_drawCount, sizeof(uint32_t));
stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDrawIndirect readParams");
- AEMU_SCOPED_TRACE("vkCmdDrawIndirect returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8107,7 +7686,6 @@ void VkEncoder::vkCmdDrawIndexedIndirect(
uint32_t stride)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirect encode");
mImpl->log("start vkCmdDrawIndexedIndirect");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8150,8 +7728,6 @@ void VkEncoder::vkCmdDrawIndexedIndirect(
stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
stream->write((uint32_t*)&local_drawCount, sizeof(uint32_t));
stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirect readParams");
- AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirect returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8165,7 +7741,6 @@ void VkEncoder::vkCmdDispatch(
uint32_t groupCountZ)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDispatch encode");
mImpl->log("start vkCmdDispatch");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8200,8 +7775,6 @@ void VkEncoder::vkCmdDispatch(
stream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
stream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
stream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDispatch readParams");
- AEMU_SCOPED_TRACE("vkCmdDispatch returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8214,7 +7787,6 @@ void VkEncoder::vkCmdDispatchIndirect(
VkDeviceSize offset)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDispatchIndirect encode");
mImpl->log("start vkCmdDispatchIndirect");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8249,8 +7821,6 @@ void VkEncoder::vkCmdDispatchIndirect(
stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_558, 1);
stream->write((uint64_t*)&cgen_var_558, 1 * 8);
stream->write((VkDeviceSize*)&local_offset, sizeof(VkDeviceSize));
- AEMU_SCOPED_TRACE("vkCmdDispatchIndirect readParams");
- AEMU_SCOPED_TRACE("vkCmdDispatchIndirect returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8265,7 +7835,6 @@ void VkEncoder::vkCmdCopyBuffer(
const VkBufferCopy* pRegions)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdCopyBuffer encode");
mImpl->log("start vkCmdCopyBuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8333,8 +7902,6 @@ void VkEncoder::vkCmdCopyBuffer(
{
marshal_VkBufferCopy(stream, (VkBufferCopy*)(local_pRegions + i));
}
- AEMU_SCOPED_TRACE("vkCmdCopyBuffer readParams");
- AEMU_SCOPED_TRACE("vkCmdCopyBuffer returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8351,7 +7918,6 @@ void VkEncoder::vkCmdCopyImage(
const VkImageCopy* pRegions)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdCopyImage encode");
mImpl->log("start vkCmdCopyImage");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8427,8 +7993,6 @@ void VkEncoder::vkCmdCopyImage(
{
marshal_VkImageCopy(stream, (VkImageCopy*)(local_pRegions + i));
}
- AEMU_SCOPED_TRACE("vkCmdCopyImage readParams");
- AEMU_SCOPED_TRACE("vkCmdCopyImage returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8446,7 +8010,6 @@ void VkEncoder::vkCmdBlitImage(
VkFilter filter)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdBlitImage encode");
mImpl->log("start vkCmdBlitImage");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8526,8 +8089,6 @@ void VkEncoder::vkCmdBlitImage(
marshal_VkImageBlit(stream, (VkImageBlit*)(local_pRegions + i));
}
stream->write((VkFilter*)&local_filter, sizeof(VkFilter));
- AEMU_SCOPED_TRACE("vkCmdBlitImage readParams");
- AEMU_SCOPED_TRACE("vkCmdBlitImage returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8543,7 +8104,6 @@ void VkEncoder::vkCmdCopyBufferToImage(
const VkBufferImageCopy* pRegions)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdCopyBufferToImage encode");
mImpl->log("start vkCmdCopyBufferToImage");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8615,8 +8175,6 @@ void VkEncoder::vkCmdCopyBufferToImage(
{
marshal_VkBufferImageCopy(stream, (VkBufferImageCopy*)(local_pRegions + i));
}
- AEMU_SCOPED_TRACE("vkCmdCopyBufferToImage readParams");
- AEMU_SCOPED_TRACE("vkCmdCopyBufferToImage returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8632,7 +8190,6 @@ void VkEncoder::vkCmdCopyImageToBuffer(
const VkBufferImageCopy* pRegions)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdCopyImageToBuffer encode");
mImpl->log("start vkCmdCopyImageToBuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8704,8 +8261,6 @@ void VkEncoder::vkCmdCopyImageToBuffer(
{
marshal_VkBufferImageCopy(stream, (VkBufferImageCopy*)(local_pRegions + i));
}
- AEMU_SCOPED_TRACE("vkCmdCopyImageToBuffer readParams");
- AEMU_SCOPED_TRACE("vkCmdCopyImageToBuffer returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8720,7 +8275,6 @@ void VkEncoder::vkCmdUpdateBuffer(
const void* pData)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdUpdateBuffer encode");
mImpl->log("start vkCmdUpdateBuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8767,8 +8321,6 @@ void VkEncoder::vkCmdUpdateBuffer(
stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
stream->write((VkDeviceSize*)&local_dataSize, sizeof(VkDeviceSize));
stream->write((void*)local_pData, ((dataSize)) * sizeof(uint8_t));
- AEMU_SCOPED_TRACE("vkCmdUpdateBuffer readParams");
- AEMU_SCOPED_TRACE("vkCmdUpdateBuffer returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8783,7 +8335,6 @@ void VkEncoder::vkCmdFillBuffer(
uint32_t data)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdFillBuffer encode");
mImpl->log("start vkCmdFillBuffer");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8826,8 +8377,6 @@ void VkEncoder::vkCmdFillBuffer(
stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
stream->write((VkDeviceSize*)&local_size, sizeof(VkDeviceSize));
stream->write((uint32_t*)&local_data, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdFillBuffer readParams");
- AEMU_SCOPED_TRACE("vkCmdFillBuffer returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8843,7 +8392,6 @@ void VkEncoder::vkCmdClearColorImage(
const VkImageSubresourceRange* pRanges)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdClearColorImage encode");
mImpl->log("start vkCmdClearColorImage");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -8920,8 +8468,6 @@ void VkEncoder::vkCmdClearColorImage(
{
marshal_VkImageSubresourceRange(stream, (VkImageSubresourceRange*)(local_pRanges + i));
}
- AEMU_SCOPED_TRACE("vkCmdClearColorImage readParams");
- AEMU_SCOPED_TRACE("vkCmdClearColorImage returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -8937,7 +8483,6 @@ void VkEncoder::vkCmdClearDepthStencilImage(
const VkImageSubresourceRange* pRanges)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdClearDepthStencilImage encode");
mImpl->log("start vkCmdClearDepthStencilImage");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9014,8 +8559,6 @@ void VkEncoder::vkCmdClearDepthStencilImage(
{
marshal_VkImageSubresourceRange(stream, (VkImageSubresourceRange*)(local_pRanges + i));
}
- AEMU_SCOPED_TRACE("vkCmdClearDepthStencilImage readParams");
- AEMU_SCOPED_TRACE("vkCmdClearDepthStencilImage returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9030,7 +8573,6 @@ void VkEncoder::vkCmdClearAttachments(
const VkClearRect* pRects)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdClearAttachments encode");
mImpl->log("start vkCmdClearAttachments");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9111,8 +8653,6 @@ void VkEncoder::vkCmdClearAttachments(
{
marshal_VkClearRect(stream, (VkClearRect*)(local_pRects + i));
}
- AEMU_SCOPED_TRACE("vkCmdClearAttachments readParams");
- AEMU_SCOPED_TRACE("vkCmdClearAttachments returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9129,7 +8669,6 @@ void VkEncoder::vkCmdResolveImage(
const VkImageResolve* pRegions)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdResolveImage encode");
mImpl->log("start vkCmdResolveImage");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9205,8 +8744,6 @@ void VkEncoder::vkCmdResolveImage(
{
marshal_VkImageResolve(stream, (VkImageResolve*)(local_pRegions + i));
}
- AEMU_SCOPED_TRACE("vkCmdResolveImage readParams");
- AEMU_SCOPED_TRACE("vkCmdResolveImage returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9219,7 +8756,6 @@ void VkEncoder::vkCmdSetEvent(
VkPipelineStageFlags stageMask)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetEvent encode");
mImpl->log("start vkCmdSetEvent");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9254,8 +8790,6 @@ void VkEncoder::vkCmdSetEvent(
stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_616, 1);
stream->write((uint64_t*)&cgen_var_616, 1 * 8);
stream->write((VkPipelineStageFlags*)&local_stageMask, sizeof(VkPipelineStageFlags));
- AEMU_SCOPED_TRACE("vkCmdSetEvent readParams");
- AEMU_SCOPED_TRACE("vkCmdSetEvent returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9268,7 +8802,6 @@ void VkEncoder::vkCmdResetEvent(
VkPipelineStageFlags stageMask)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdResetEvent encode");
mImpl->log("start vkCmdResetEvent");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9303,8 +8836,6 @@ void VkEncoder::vkCmdResetEvent(
stream->handleMapping()->mapHandles_VkEvent_u64(&local_event, &cgen_var_620, 1);
stream->write((uint64_t*)&cgen_var_620, 1 * 8);
stream->write((VkPipelineStageFlags*)&local_stageMask, sizeof(VkPipelineStageFlags));
- AEMU_SCOPED_TRACE("vkCmdResetEvent readParams");
- AEMU_SCOPED_TRACE("vkCmdResetEvent returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9325,7 +8856,6 @@ void VkEncoder::vkCmdWaitEvents(
const VkImageMemoryBarrier* pImageMemoryBarriers)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdWaitEvents encode");
mImpl->log("start vkCmdWaitEvents");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9467,8 +8997,6 @@ void VkEncoder::vkCmdWaitEvents(
{
marshal_VkImageMemoryBarrier(stream, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
}
- AEMU_SCOPED_TRACE("vkCmdWaitEvents readParams");
- AEMU_SCOPED_TRACE("vkCmdWaitEvents returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9488,7 +9016,6 @@ void VkEncoder::vkCmdPipelineBarrier(
const VkImageMemoryBarrier* pImageMemoryBarriers)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdPipelineBarrier encode");
mImpl->log("start vkCmdPipelineBarrier");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9610,8 +9137,6 @@ void VkEncoder::vkCmdPipelineBarrier(
{
marshal_VkImageMemoryBarrier(stream, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
}
- AEMU_SCOPED_TRACE("vkCmdPipelineBarrier readParams");
- AEMU_SCOPED_TRACE("vkCmdPipelineBarrier returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9625,7 +9150,6 @@ void VkEncoder::vkCmdBeginQuery(
VkQueryControlFlags flags)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdBeginQuery encode");
mImpl->log("start vkCmdBeginQuery");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9664,8 +9188,6 @@ void VkEncoder::vkCmdBeginQuery(
stream->write((uint64_t*)&cgen_var_630, 1 * 8);
stream->write((uint32_t*)&local_query, sizeof(uint32_t));
stream->write((VkQueryControlFlags*)&local_flags, sizeof(VkQueryControlFlags));
- AEMU_SCOPED_TRACE("vkCmdBeginQuery readParams");
- AEMU_SCOPED_TRACE("vkCmdBeginQuery returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9678,7 +9200,6 @@ void VkEncoder::vkCmdEndQuery(
uint32_t query)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdEndQuery encode");
mImpl->log("start vkCmdEndQuery");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9713,8 +9234,6 @@ void VkEncoder::vkCmdEndQuery(
stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_634, 1);
stream->write((uint64_t*)&cgen_var_634, 1 * 8);
stream->write((uint32_t*)&local_query, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdEndQuery readParams");
- AEMU_SCOPED_TRACE("vkCmdEndQuery returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9728,7 +9247,6 @@ void VkEncoder::vkCmdResetQueryPool(
uint32_t queryCount)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdResetQueryPool encode");
mImpl->log("start vkCmdResetQueryPool");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9767,8 +9285,6 @@ void VkEncoder::vkCmdResetQueryPool(
stream->write((uint64_t*)&cgen_var_638, 1 * 8);
stream->write((uint32_t*)&local_firstQuery, sizeof(uint32_t));
stream->write((uint32_t*)&local_queryCount, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdResetQueryPool readParams");
- AEMU_SCOPED_TRACE("vkCmdResetQueryPool returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9782,7 +9298,6 @@ void VkEncoder::vkCmdWriteTimestamp(
uint32_t query)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdWriteTimestamp encode");
mImpl->log("start vkCmdWriteTimestamp");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9821,8 +9336,6 @@ void VkEncoder::vkCmdWriteTimestamp(
stream->handleMapping()->mapHandles_VkQueryPool_u64(&local_queryPool, &cgen_var_642, 1);
stream->write((uint64_t*)&cgen_var_642, 1 * 8);
stream->write((uint32_t*)&local_query, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdWriteTimestamp readParams");
- AEMU_SCOPED_TRACE("vkCmdWriteTimestamp returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9840,7 +9353,6 @@ void VkEncoder::vkCmdCopyQueryPoolResults(
VkQueryResultFlags flags)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdCopyQueryPoolResults encode");
mImpl->log("start vkCmdCopyQueryPoolResults");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9899,8 +9411,6 @@ void VkEncoder::vkCmdCopyQueryPoolResults(
stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
stream->write((VkDeviceSize*)&local_stride, sizeof(VkDeviceSize));
stream->write((VkQueryResultFlags*)&local_flags, sizeof(VkQueryResultFlags));
- AEMU_SCOPED_TRACE("vkCmdCopyQueryPoolResults readParams");
- AEMU_SCOPED_TRACE("vkCmdCopyQueryPoolResults returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9916,7 +9426,6 @@ void VkEncoder::vkCmdPushConstants(
const void* pValues)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdPushConstants encode");
mImpl->log("start vkCmdPushConstants");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -9967,8 +9476,6 @@ void VkEncoder::vkCmdPushConstants(
stream->write((uint32_t*)&local_offset, sizeof(uint32_t));
stream->write((uint32_t*)&local_size, sizeof(uint32_t));
stream->write((void*)local_pValues, ((size)) * sizeof(uint8_t));
- AEMU_SCOPED_TRACE("vkCmdPushConstants readParams");
- AEMU_SCOPED_TRACE("vkCmdPushConstants returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -9981,7 +9488,6 @@ void VkEncoder::vkCmdBeginRenderPass(
VkSubpassContents contents)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdBeginRenderPass encode");
mImpl->log("start vkCmdBeginRenderPass");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10021,8 +9527,6 @@ void VkEncoder::vkCmdBeginRenderPass(
stream->write((uint64_t*)&cgen_var_654, 1 * 8);
marshal_VkRenderPassBeginInfo(stream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
stream->write((VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
- AEMU_SCOPED_TRACE("vkCmdBeginRenderPass readParams");
- AEMU_SCOPED_TRACE("vkCmdBeginRenderPass returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10034,7 +9538,6 @@ void VkEncoder::vkCmdNextSubpass(
VkSubpassContents contents)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdNextSubpass encode");
mImpl->log("start vkCmdNextSubpass");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10061,8 +9564,6 @@ void VkEncoder::vkCmdNextSubpass(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_656, 1);
stream->write((uint64_t*)&cgen_var_656, 1 * 8);
stream->write((VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
- AEMU_SCOPED_TRACE("vkCmdNextSubpass readParams");
- AEMU_SCOPED_TRACE("vkCmdNextSubpass returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10073,7 +9574,6 @@ void VkEncoder::vkCmdEndRenderPass(
VkCommandBuffer commandBuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdEndRenderPass encode");
mImpl->log("start vkCmdEndRenderPass");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10096,8 +9596,6 @@ void VkEncoder::vkCmdEndRenderPass(
uint64_t cgen_var_658;
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_658, 1);
stream->write((uint64_t*)&cgen_var_658, 1 * 8);
- AEMU_SCOPED_TRACE("vkCmdEndRenderPass readParams");
- AEMU_SCOPED_TRACE("vkCmdEndRenderPass returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10110,7 +9608,6 @@ void VkEncoder::vkCmdExecuteCommands(
const VkCommandBuffer* pCommandBuffers)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdExecuteCommands encode");
mImpl->log("start vkCmdExecuteCommands");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10157,8 +9654,6 @@ void VkEncoder::vkCmdExecuteCommands(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(local_pCommandBuffers, cgen_var_662, ((commandBufferCount)));
stream->write((uint64_t*)cgen_var_662, ((commandBufferCount)) * 8);
}
- AEMU_SCOPED_TRACE("vkCmdExecuteCommands readParams");
- AEMU_SCOPED_TRACE("vkCmdExecuteCommands returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10171,7 +9666,6 @@ VkResult VkEncoder::vkEnumerateInstanceVersion(
uint32_t* pApiVersion)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion encode");
mImpl->log("start vkEnumerateInstanceVersion");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10188,9 +9682,7 @@ VkResult VkEncoder::vkEnumerateInstanceVersion(
stream->write(&opcode_vkEnumerateInstanceVersion, sizeof(uint32_t));
stream->write(&packetSize_vkEnumerateInstanceVersion, sizeof(uint32_t));
stream->write((uint32_t*)pApiVersion, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion readParams");
stream->read((uint32_t*)pApiVersion, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion returnUnmarshal");
VkResult vkEnumerateInstanceVersion_VkResult_return = (VkResult)0;
stream->read(&vkEnumerateInstanceVersion_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -10206,7 +9698,6 @@ VkResult VkEncoder::vkBindBufferMemory2(
const VkBindBufferMemoryInfo* pBindInfos)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkBindBufferMemory2 encode");
mImpl->log("start vkBindBufferMemory2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10258,8 +9749,6 @@ VkResult VkEncoder::vkBindBufferMemory2(
{
marshal_VkBindBufferMemoryInfo(stream, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
}
- AEMU_SCOPED_TRACE("vkBindBufferMemory2 readParams");
- AEMU_SCOPED_TRACE("vkBindBufferMemory2 returnUnmarshal");
VkResult vkBindBufferMemory2_VkResult_return = (VkResult)0;
stream->read(&vkBindBufferMemory2_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -10275,7 +9764,6 @@ VkResult VkEncoder::vkBindImageMemory2(
const VkBindImageMemoryInfo* pBindInfos)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkBindImageMemory2 encode");
mImpl->log("start vkBindImageMemory2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10327,8 +9815,6 @@ VkResult VkEncoder::vkBindImageMemory2(
{
marshal_VkBindImageMemoryInfo(stream, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
}
- AEMU_SCOPED_TRACE("vkBindImageMemory2 readParams");
- AEMU_SCOPED_TRACE("vkBindImageMemory2 returnUnmarshal");
VkResult vkBindImageMemory2_VkResult_return = (VkResult)0;
stream->read(&vkBindImageMemory2_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -10346,7 +9832,6 @@ void VkEncoder::vkGetDeviceGroupPeerMemoryFeatures(
VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeatures encode");
mImpl->log("start vkGetDeviceGroupPeerMemoryFeatures");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10383,9 +9868,7 @@ void VkEncoder::vkGetDeviceGroupPeerMemoryFeatures(
stream->write((uint32_t*)&local_localDeviceIndex, sizeof(uint32_t));
stream->write((uint32_t*)&local_remoteDeviceIndex, sizeof(uint32_t));
stream->write((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
- AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeatures readParams");
stream->read((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
- AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeatures returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10397,7 +9880,6 @@ void VkEncoder::vkCmdSetDeviceMask(
uint32_t deviceMask)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetDeviceMask encode");
mImpl->log("start vkCmdSetDeviceMask");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10424,8 +9906,6 @@ void VkEncoder::vkCmdSetDeviceMask(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_670, 1);
stream->write((uint64_t*)&cgen_var_670, 1 * 8);
stream->write((uint32_t*)&local_deviceMask, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdSetDeviceMask readParams");
- AEMU_SCOPED_TRACE("vkCmdSetDeviceMask returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10442,7 +9922,6 @@ void VkEncoder::vkCmdDispatchBase(
uint32_t groupCountZ)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDispatchBase encode");
mImpl->log("start vkCmdDispatchBase");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10489,8 +9968,6 @@ void VkEncoder::vkCmdDispatchBase(
stream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
stream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
stream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDispatchBase readParams");
- AEMU_SCOPED_TRACE("vkCmdDispatchBase returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10503,7 +9980,6 @@ VkResult VkEncoder::vkEnumeratePhysicalDeviceGroups(
VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroups encode");
mImpl->log("start vkEnumeratePhysicalDeviceGroups");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10560,7 +10036,6 @@ VkResult VkEncoder::vkEnumeratePhysicalDeviceGroups(
marshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroups readParams");
// WARNING PTR CHECK
uint32_t* check_pPhysicalDeviceGroupCount;
check_pPhysicalDeviceGroupCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -10593,7 +10068,6 @@ VkResult VkEncoder::vkEnumeratePhysicalDeviceGroups(
transform_fromhost_VkPhysicalDeviceGroupProperties(mImpl->resources(), (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroups returnUnmarshal");
VkResult vkEnumeratePhysicalDeviceGroups_VkResult_return = (VkResult)0;
stream->read(&vkEnumeratePhysicalDeviceGroups_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -10609,7 +10083,6 @@ void VkEncoder::vkGetImageMemoryRequirements2(
VkMemoryRequirements2* pMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2 encode");
mImpl->log("start vkGetImageMemoryRequirements2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10647,13 +10120,11 @@ void VkEncoder::vkGetImageMemoryRequirements2(
stream->write((uint64_t*)&cgen_var_682, 1 * 8);
marshal_VkImageMemoryRequirementsInfo2(stream, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
- AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2 readParams");
unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
if (pMemoryRequirements)
{
transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
}
- AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2 returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10666,7 +10137,6 @@ void VkEncoder::vkGetBufferMemoryRequirements2(
VkMemoryRequirements2* pMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2 encode");
mImpl->log("start vkGetBufferMemoryRequirements2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10704,13 +10174,11 @@ void VkEncoder::vkGetBufferMemoryRequirements2(
stream->write((uint64_t*)&cgen_var_684, 1 * 8);
marshal_VkBufferMemoryRequirementsInfo2(stream, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
- AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2 readParams");
unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
if (pMemoryRequirements)
{
transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
}
- AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2 returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10724,7 +10192,6 @@ void VkEncoder::vkGetImageSparseMemoryRequirements2(
VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2 encode");
mImpl->log("start vkGetImageSparseMemoryRequirements2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10794,7 +10261,6 @@ void VkEncoder::vkGetImageSparseMemoryRequirements2(
marshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
}
}
- AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2 readParams");
// WARNING PTR CHECK
uint32_t* check_pSparseMemoryRequirementCount;
check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -10827,7 +10293,6 @@ void VkEncoder::vkGetImageSparseMemoryRequirements2(
transform_fromhost_VkSparseImageMemoryRequirements2(mImpl->resources(), (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
}
}
- AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2 returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10839,7 +10304,6 @@ void VkEncoder::vkGetPhysicalDeviceFeatures2(
VkPhysicalDeviceFeatures2* pFeatures)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2 encode");
mImpl->log("start vkGetPhysicalDeviceFeatures2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10864,13 +10328,11 @@ void VkEncoder::vkGetPhysicalDeviceFeatures2(
stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_694, 1);
stream->write((uint64_t*)&cgen_var_694, 1 * 8);
marshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2 readParams");
unmarshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
if (pFeatures)
{
transform_fromhost_VkPhysicalDeviceFeatures2(mImpl->resources(), (VkPhysicalDeviceFeatures2*)(pFeatures));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2 returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10882,7 +10344,6 @@ void VkEncoder::vkGetPhysicalDeviceProperties2(
VkPhysicalDeviceProperties2* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2 encode");
mImpl->log("start vkGetPhysicalDeviceProperties2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10907,13 +10368,11 @@ void VkEncoder::vkGetPhysicalDeviceProperties2(
stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_696, 1);
stream->write((uint64_t*)&cgen_var_696, 1 * 8);
marshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2 readParams");
unmarshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
if (pProperties)
{
transform_fromhost_VkPhysicalDeviceProperties2(mImpl->resources(), (VkPhysicalDeviceProperties2*)(pProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2 returnUnmarshal");
mImpl->resources()->on_vkGetPhysicalDeviceProperties2(this, physicalDevice, pProperties);
pool->freeAll();
countingStream->clearPool();
@@ -10927,7 +10386,6 @@ void VkEncoder::vkGetPhysicalDeviceFormatProperties2(
VkFormatProperties2* pFormatProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2 encode");
mImpl->log("start vkGetPhysicalDeviceFormatProperties2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -10956,13 +10414,11 @@ void VkEncoder::vkGetPhysicalDeviceFormatProperties2(
stream->write((uint64_t*)&cgen_var_698, 1 * 8);
stream->write((VkFormat*)&local_format, sizeof(VkFormat));
marshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2 readParams");
unmarshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
if (pFormatProperties)
{
transform_fromhost_VkFormatProperties2(mImpl->resources(), (VkFormatProperties2*)(pFormatProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2 returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -10975,7 +10431,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2(
VkImageFormatProperties2* pImageFormatProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2 encode");
mImpl->log("start vkGetPhysicalDeviceImageFormatProperties2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11013,13 +10468,11 @@ VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2(
stream->write((uint64_t*)&cgen_var_700, 1 * 8);
marshal_VkPhysicalDeviceImageFormatInfo2(stream, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
marshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2 readParams");
unmarshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
if (pImageFormatProperties)
{
transform_fromhost_VkImageFormatProperties2(mImpl->resources(), (VkImageFormatProperties2*)(pImageFormatProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2 returnUnmarshal");
VkResult vkGetPhysicalDeviceImageFormatProperties2_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceImageFormatProperties2_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -11035,7 +10488,6 @@ void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2(
VkQueueFamilyProperties2* pQueueFamilyProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2 encode");
mImpl->log("start vkGetPhysicalDeviceQueueFamilyProperties2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11092,7 +10544,6 @@ void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2(
marshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2 readParams");
// WARNING PTR CHECK
uint32_t* check_pQueueFamilyPropertyCount;
check_pQueueFamilyPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -11125,7 +10576,6 @@ void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2(
transform_fromhost_VkQueueFamilyProperties2(mImpl->resources(), (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2 returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -11137,7 +10587,6 @@ void VkEncoder::vkGetPhysicalDeviceMemoryProperties2(
VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2 encode");
mImpl->log("start vkGetPhysicalDeviceMemoryProperties2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11162,13 +10611,11 @@ void VkEncoder::vkGetPhysicalDeviceMemoryProperties2(
stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_710, 1);
stream->write((uint64_t*)&cgen_var_710, 1 * 8);
marshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2 readParams");
unmarshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
if (pMemoryProperties)
{
transform_fromhost_VkPhysicalDeviceMemoryProperties2(mImpl->resources(), (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2 returnUnmarshal");
mImpl->resources()->on_vkGetPhysicalDeviceMemoryProperties2(this, physicalDevice, pMemoryProperties);
pool->freeAll();
countingStream->clearPool();
@@ -11183,7 +10630,6 @@ void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2(
VkSparseImageFormatProperties2* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2 encode");
mImpl->log("start vkGetPhysicalDeviceSparseImageFormatProperties2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11253,7 +10699,6 @@ void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2(
marshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2 readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -11286,7 +10731,6 @@ void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2(
transform_fromhost_VkSparseImageFormatProperties2(mImpl->resources(), (VkSparseImageFormatProperties2*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2 returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -11299,7 +10743,6 @@ void VkEncoder::vkTrimCommandPool(
VkCommandPoolTrimFlags flags)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkTrimCommandPool encode");
mImpl->log("start vkTrimCommandPool");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11334,8 +10777,6 @@ void VkEncoder::vkTrimCommandPool(
stream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_722, 1);
stream->write((uint64_t*)&cgen_var_722, 1 * 8);
stream->write((VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
- AEMU_SCOPED_TRACE("vkTrimCommandPool readParams");
- AEMU_SCOPED_TRACE("vkTrimCommandPool returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -11348,7 +10789,6 @@ void VkEncoder::vkGetDeviceQueue2(
VkQueue* pQueue)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDeviceQueue2 encode");
mImpl->log("start vkGetDeviceQueue2");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11392,11 +10832,9 @@ void VkEncoder::vkGetDeviceQueue2(
stream->handleMapping()->mapHandles_VkQueue_u64(pQueue, &cgen_var_726, 1);
stream->write((uint64_t*)&cgen_var_726, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkGetDeviceQueue2 readParams");
uint64_t cgen_var_727;
stream->read((uint64_t*)&cgen_var_727, 8);
stream->handleMapping()->mapHandles_u64_VkQueue(&cgen_var_727, (VkQueue*)pQueue, 1);
- AEMU_SCOPED_TRACE("vkGetDeviceQueue2 returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -11410,7 +10848,6 @@ VkResult VkEncoder::vkCreateSamplerYcbcrConversion(
VkSamplerYcbcrConversion* pYcbcrConversion)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversion encode");
mImpl->log("start vkCreateSamplerYcbcrConversion");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11480,13 +10917,11 @@ VkResult VkEncoder::vkCreateSamplerYcbcrConversion(
stream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(pYcbcrConversion, &cgen_var_733, 1);
stream->write((uint64_t*)&cgen_var_733, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversion readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_734;
stream->read((uint64_t*)&cgen_var_734, 8);
stream->handleMapping()->mapHandles_u64_VkSamplerYcbcrConversion(&cgen_var_734, (VkSamplerYcbcrConversion*)pYcbcrConversion, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversion returnUnmarshal");
VkResult vkCreateSamplerYcbcrConversion_VkResult_return = (VkResult)0;
stream->read(&vkCreateSamplerYcbcrConversion_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -11502,7 +10937,6 @@ void VkEncoder::vkDestroySamplerYcbcrConversion(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversion encode");
mImpl->log("start vkDestroySamplerYcbcrConversion");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11559,8 +10993,6 @@ void VkEncoder::vkDestroySamplerYcbcrConversion(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversion readParams");
- AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversion returnUnmarshal");
resources->destroyMapping()->mapHandles_VkSamplerYcbcrConversion((VkSamplerYcbcrConversion*)&ycbcrConversion);
pool->freeAll();
countingStream->clearPool();
@@ -11575,7 +11007,6 @@ VkResult VkEncoder::vkCreateDescriptorUpdateTemplate(
VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplate encode");
mImpl->log("start vkCreateDescriptorUpdateTemplate");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11645,13 +11076,11 @@ VkResult VkEncoder::vkCreateDescriptorUpdateTemplate(
stream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(pDescriptorUpdateTemplate, &cgen_var_746, 1);
stream->write((uint64_t*)&cgen_var_746, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplate readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_747;
stream->read((uint64_t*)&cgen_var_747, 8);
stream->handleMapping()->mapHandles_u64_VkDescriptorUpdateTemplate(&cgen_var_747, (VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplate returnUnmarshal");
VkResult vkCreateDescriptorUpdateTemplate_VkResult_return = (VkResult)0;
stream->read(&vkCreateDescriptorUpdateTemplate_VkResult_return, sizeof(VkResult));
mImpl->resources()->on_vkCreateDescriptorUpdateTemplate(this, vkCreateDescriptorUpdateTemplate_VkResult_return, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
@@ -11668,7 +11097,6 @@ void VkEncoder::vkDestroyDescriptorUpdateTemplate(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplate encode");
mImpl->log("start vkDestroyDescriptorUpdateTemplate");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11725,8 +11153,6 @@ void VkEncoder::vkDestroyDescriptorUpdateTemplate(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplate readParams");
- AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplate returnUnmarshal");
resources->destroyMapping()->mapHandles_VkDescriptorUpdateTemplate((VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate);
pool->freeAll();
countingStream->clearPool();
@@ -11741,7 +11167,6 @@ void VkEncoder::vkUpdateDescriptorSetWithTemplate(
const void* pData)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplate encode");
mImpl->log("start vkUpdateDescriptorSetWithTemplate");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11800,8 +11225,6 @@ void VkEncoder::vkUpdateDescriptorSetWithTemplate(
{
stream->write((void*)local_pData, sizeof(uint8_t));
}
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplate readParams");
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplate returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -11814,7 +11237,6 @@ void VkEncoder::vkGetPhysicalDeviceExternalBufferProperties(
VkExternalBufferProperties* pExternalBufferProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferProperties encode");
mImpl->log("start vkGetPhysicalDeviceExternalBufferProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11853,14 +11275,12 @@ void VkEncoder::vkGetPhysicalDeviceExternalBufferProperties(
stream->write((uint64_t*)&cgen_var_763, 1 * 8);
marshal_VkPhysicalDeviceExternalBufferInfo(stream, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
marshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferProperties readParams");
unmarshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
if (pExternalBufferProperties)
{
mImpl->resources()->transformImpl_VkExternalBufferProperties_fromhost(pExternalBufferProperties, 1);
transform_fromhost_VkExternalBufferProperties(mImpl->resources(), (VkExternalBufferProperties*)(pExternalBufferProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferProperties returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -11873,7 +11293,6 @@ void VkEncoder::vkGetPhysicalDeviceExternalFenceProperties(
VkExternalFenceProperties* pExternalFenceProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFenceProperties encode");
mImpl->log("start vkGetPhysicalDeviceExternalFenceProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11911,13 +11330,11 @@ void VkEncoder::vkGetPhysicalDeviceExternalFenceProperties(
stream->write((uint64_t*)&cgen_var_765, 1 * 8);
marshal_VkPhysicalDeviceExternalFenceInfo(stream, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
marshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFenceProperties readParams");
unmarshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
if (pExternalFenceProperties)
{
transform_fromhost_VkExternalFenceProperties(mImpl->resources(), (VkExternalFenceProperties*)(pExternalFenceProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFenceProperties returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -11930,7 +11347,6 @@ void VkEncoder::vkGetPhysicalDeviceExternalSemaphoreProperties(
VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphoreProperties encode");
mImpl->log("start vkGetPhysicalDeviceExternalSemaphoreProperties");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -11968,13 +11384,11 @@ void VkEncoder::vkGetPhysicalDeviceExternalSemaphoreProperties(
stream->write((uint64_t*)&cgen_var_767, 1 * 8);
marshal_VkPhysicalDeviceExternalSemaphoreInfo(stream, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
marshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphoreProperties readParams");
unmarshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
if (pExternalSemaphoreProperties)
{
transform_fromhost_VkExternalSemaphoreProperties(mImpl->resources(), (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphoreProperties returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -11987,7 +11401,6 @@ void VkEncoder::vkGetDescriptorSetLayoutSupport(
VkDescriptorSetLayoutSupport* pSupport)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupport encode");
mImpl->log("start vkGetDescriptorSetLayoutSupport");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12025,13 +11438,11 @@ void VkEncoder::vkGetDescriptorSetLayoutSupport(
stream->write((uint64_t*)&cgen_var_769, 1 * 8);
marshal_VkDescriptorSetLayoutCreateInfo(stream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
marshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
- AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupport readParams");
unmarshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
if (pSupport)
{
transform_fromhost_VkDescriptorSetLayoutSupport(mImpl->resources(), (VkDescriptorSetLayoutSupport*)(pSupport));
}
- AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupport returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -12046,7 +11457,6 @@ void VkEncoder::vkDestroySurfaceKHR(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroySurfaceKHR encode");
mImpl->log("start vkDestroySurfaceKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12103,8 +11513,6 @@ void VkEncoder::vkDestroySurfaceKHR(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroySurfaceKHR readParams");
- AEMU_SCOPED_TRACE("vkDestroySurfaceKHR returnUnmarshal");
resources->destroyMapping()->mapHandles_VkSurfaceKHR((VkSurfaceKHR*)&surface);
pool->freeAll();
countingStream->clearPool();
@@ -12119,7 +11527,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceSupportKHR(
VkBool32* pSupported)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceSupportKHR encode");
mImpl->log("start vkGetPhysicalDeviceSurfaceSupportKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12156,9 +11563,7 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceSupportKHR(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_779, 1);
stream->write((uint64_t*)&cgen_var_779, 1 * 8);
stream->write((VkBool32*)pSupported, sizeof(VkBool32));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceSupportKHR readParams");
stream->read((VkBool32*)pSupported, sizeof(VkBool32));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceSupportKHR returnUnmarshal");
VkResult vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -12174,7 +11579,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
VkSurfaceCapabilitiesKHR* pSurfaceCapabilities)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilitiesKHR encode");
mImpl->log("start vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12207,13 +11611,11 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_783, 1);
stream->write((uint64_t*)&cgen_var_783, 1 * 8);
marshal_VkSurfaceCapabilitiesKHR(stream, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilitiesKHR readParams");
unmarshal_VkSurfaceCapabilitiesKHR(stream, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
if (pSurfaceCapabilities)
{
transform_fromhost_VkSurfaceCapabilitiesKHR(mImpl->resources(), (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilitiesKHR returnUnmarshal");
VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -12230,7 +11632,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceFormatsKHR(
VkSurfaceFormatKHR* pSurfaceFormats)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormatsKHR encode");
mImpl->log("start vkGetPhysicalDeviceSurfaceFormatsKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12295,7 +11696,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceFormatsKHR(
marshal_VkSurfaceFormatKHR(stream, (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormatsKHR readParams");
// WARNING PTR CHECK
uint32_t* check_pSurfaceFormatCount;
check_pSurfaceFormatCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -12328,7 +11728,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceFormatsKHR(
transform_fromhost_VkSurfaceFormatKHR(mImpl->resources(), (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormatsKHR returnUnmarshal");
VkResult vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -12345,7 +11744,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfacePresentModesKHR(
VkPresentModeKHR* pPresentModes)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfacePresentModesKHR encode");
mImpl->log("start vkGetPhysicalDeviceSurfacePresentModesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12404,7 +11802,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfacePresentModesKHR(
{
stream->write((VkPresentModeKHR*)pPresentModes, (*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfacePresentModesKHR readParams");
// WARNING PTR CHECK
uint32_t* check_pPresentModeCount;
check_pPresentModeCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -12427,7 +11824,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfacePresentModesKHR(
}
stream->read((VkPresentModeKHR*)pPresentModes, (*(pPresentModeCount)) * sizeof(VkPresentModeKHR));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfacePresentModesKHR returnUnmarshal");
VkResult vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -12446,7 +11842,6 @@ VkResult VkEncoder::vkCreateSwapchainKHR(
VkSwapchainKHR* pSwapchain)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateSwapchainKHR encode");
mImpl->log("start vkCreateSwapchainKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12516,13 +11911,11 @@ VkResult VkEncoder::vkCreateSwapchainKHR(
stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(pSwapchain, &cgen_var_809, 1);
stream->write((uint64_t*)&cgen_var_809, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateSwapchainKHR readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_810;
stream->read((uint64_t*)&cgen_var_810, 8);
stream->handleMapping()->mapHandles_u64_VkSwapchainKHR(&cgen_var_810, (VkSwapchainKHR*)pSwapchain, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateSwapchainKHR returnUnmarshal");
VkResult vkCreateSwapchainKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateSwapchainKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -12538,7 +11931,6 @@ void VkEncoder::vkDestroySwapchainKHR(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroySwapchainKHR encode");
mImpl->log("start vkDestroySwapchainKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12595,8 +11987,6 @@ void VkEncoder::vkDestroySwapchainKHR(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroySwapchainKHR readParams");
- AEMU_SCOPED_TRACE("vkDestroySwapchainKHR returnUnmarshal");
resources->destroyMapping()->mapHandles_VkSwapchainKHR((VkSwapchainKHR*)&swapchain);
pool->freeAll();
countingStream->clearPool();
@@ -12611,7 +12001,6 @@ VkResult VkEncoder::vkGetSwapchainImagesKHR(
VkImage* pSwapchainImages)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetSwapchainImagesKHR encode");
mImpl->log("start vkGetSwapchainImagesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12684,7 +12073,6 @@ VkResult VkEncoder::vkGetSwapchainImagesKHR(
}
}
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkGetSwapchainImagesKHR readParams");
// WARNING PTR CHECK
uint32_t* check_pSwapchainImageCount;
check_pSwapchainImageCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -12713,7 +12101,6 @@ VkResult VkEncoder::vkGetSwapchainImagesKHR(
stream->handleMapping()->mapHandles_u64_VkImage(cgen_var_829, (VkImage*)pSwapchainImages, (*(pSwapchainImageCount)));
}
}
- AEMU_SCOPED_TRACE("vkGetSwapchainImagesKHR returnUnmarshal");
VkResult vkGetSwapchainImagesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetSwapchainImagesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -12732,7 +12119,6 @@ VkResult VkEncoder::vkAcquireNextImageKHR(
uint32_t* pImageIndex)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkAcquireNextImageKHR encode");
mImpl->log("start vkAcquireNextImageKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12785,9 +12171,7 @@ VkResult VkEncoder::vkAcquireNextImageKHR(
stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_837, 1);
stream->write((uint64_t*)&cgen_var_837, 1 * 8);
stream->write((uint32_t*)pImageIndex, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkAcquireNextImageKHR readParams");
stream->read((uint32_t*)pImageIndex, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkAcquireNextImageKHR returnUnmarshal");
VkResult vkAcquireNextImageKHR_VkResult_return = (VkResult)0;
stream->read(&vkAcquireNextImageKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -12802,7 +12186,6 @@ VkResult VkEncoder::vkQueuePresentKHR(
const VkPresentInfoKHR* pPresentInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueuePresentKHR encode");
mImpl->log("start vkQueuePresentKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12838,8 +12221,6 @@ VkResult VkEncoder::vkQueuePresentKHR(
stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_839, 1);
stream->write((uint64_t*)&cgen_var_839, 1 * 8);
marshal_VkPresentInfoKHR(stream, (VkPresentInfoKHR*)(local_pPresentInfo));
- AEMU_SCOPED_TRACE("vkQueuePresentKHR readParams");
- AEMU_SCOPED_TRACE("vkQueuePresentKHR returnUnmarshal");
VkResult vkQueuePresentKHR_VkResult_return = (VkResult)0;
stream->read(&vkQueuePresentKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -12854,7 +12235,6 @@ VkResult VkEncoder::vkGetDeviceGroupPresentCapabilitiesKHR(
VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDeviceGroupPresentCapabilitiesKHR encode");
mImpl->log("start vkGetDeviceGroupPresentCapabilitiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12879,13 +12259,11 @@ VkResult VkEncoder::vkGetDeviceGroupPresentCapabilitiesKHR(
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_841, 1);
stream->write((uint64_t*)&cgen_var_841, 1 * 8);
marshal_VkDeviceGroupPresentCapabilitiesKHR(stream, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
- AEMU_SCOPED_TRACE("vkGetDeviceGroupPresentCapabilitiesKHR readParams");
unmarshal_VkDeviceGroupPresentCapabilitiesKHR(stream, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
if (pDeviceGroupPresentCapabilities)
{
transform_fromhost_VkDeviceGroupPresentCapabilitiesKHR(mImpl->resources(), (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
}
- AEMU_SCOPED_TRACE("vkGetDeviceGroupPresentCapabilitiesKHR returnUnmarshal");
VkResult vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -12901,7 +12279,6 @@ VkResult VkEncoder::vkGetDeviceGroupSurfacePresentModesKHR(
VkDeviceGroupPresentModeFlagsKHR* pModes)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDeviceGroupSurfacePresentModesKHR encode");
mImpl->log("start vkGetDeviceGroupSurfacePresentModesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -12946,7 +12323,6 @@ VkResult VkEncoder::vkGetDeviceGroupSurfacePresentModesKHR(
{
stream->write((VkDeviceGroupPresentModeFlagsKHR*)pModes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
}
- AEMU_SCOPED_TRACE("vkGetDeviceGroupSurfacePresentModesKHR readParams");
// WARNING PTR CHECK
VkDeviceGroupPresentModeFlagsKHR* check_pModes;
check_pModes = (VkDeviceGroupPresentModeFlagsKHR*)(uintptr_t)stream->getBe64();
@@ -12958,7 +12334,6 @@ VkResult VkEncoder::vkGetDeviceGroupSurfacePresentModesKHR(
}
stream->read((VkDeviceGroupPresentModeFlagsKHR*)pModes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
}
- AEMU_SCOPED_TRACE("vkGetDeviceGroupSurfacePresentModesKHR returnUnmarshal");
VkResult vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -12975,7 +12350,6 @@ VkResult VkEncoder::vkGetPhysicalDevicePresentRectanglesKHR(
VkRect2D* pRects)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDevicePresentRectanglesKHR encode");
mImpl->log("start vkGetPhysicalDevicePresentRectanglesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -13040,7 +12414,6 @@ VkResult VkEncoder::vkGetPhysicalDevicePresentRectanglesKHR(
marshal_VkRect2D(stream, (VkRect2D*)(pRects + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDevicePresentRectanglesKHR readParams");
// WARNING PTR CHECK
uint32_t* check_pRectCount;
check_pRectCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -13073,7 +12446,6 @@ VkResult VkEncoder::vkGetPhysicalDevicePresentRectanglesKHR(
transform_fromhost_VkRect2D(mImpl->resources(), (VkRect2D*)(pRects + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDevicePresentRectanglesKHR returnUnmarshal");
VkResult vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -13089,7 +12461,6 @@ VkResult VkEncoder::vkAcquireNextImage2KHR(
uint32_t* pImageIndex)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkAcquireNextImage2KHR encode");
mImpl->log("start vkAcquireNextImage2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -13127,9 +12498,7 @@ VkResult VkEncoder::vkAcquireNextImage2KHR(
stream->write((uint64_t*)&cgen_var_860, 1 * 8);
marshal_VkAcquireNextImageInfoKHR(stream, (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo));
stream->write((uint32_t*)pImageIndex, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkAcquireNextImage2KHR readParams");
stream->read((uint32_t*)pImageIndex, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkAcquireNextImage2KHR returnUnmarshal");
VkResult vkAcquireNextImage2KHR_VkResult_return = (VkResult)0;
stream->read(&vkAcquireNextImage2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -13147,7 +12516,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayPropertiesKHR(
VkDisplayPropertiesKHR* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPropertiesKHR encode");
mImpl->log("start vkGetPhysicalDeviceDisplayPropertiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -13204,7 +12572,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayPropertiesKHR(
marshal_VkDisplayPropertiesKHR(stream, (VkDisplayPropertiesKHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPropertiesKHR readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -13237,7 +12604,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayPropertiesKHR(
transform_fromhost_VkDisplayPropertiesKHR(mImpl->resources(), (VkDisplayPropertiesKHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPropertiesKHR returnUnmarshal");
VkResult vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -13253,7 +12619,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
VkDisplayPlanePropertiesKHR* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlanePropertiesKHR encode");
mImpl->log("start vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -13310,7 +12675,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
marshal_VkDisplayPlanePropertiesKHR(stream, (VkDisplayPlanePropertiesKHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlanePropertiesKHR readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -13343,7 +12707,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
transform_fromhost_VkDisplayPlanePropertiesKHR(mImpl->resources(), (VkDisplayPlanePropertiesKHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlanePropertiesKHR returnUnmarshal");
VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -13360,7 +12723,6 @@ VkResult VkEncoder::vkGetDisplayPlaneSupportedDisplaysKHR(
VkDisplayKHR* pDisplays)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDisplayPlaneSupportedDisplaysKHR encode");
mImpl->log("start vkGetDisplayPlaneSupportedDisplaysKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -13429,7 +12791,6 @@ VkResult VkEncoder::vkGetDisplayPlaneSupportedDisplaysKHR(
}
}
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkGetDisplayPlaneSupportedDisplaysKHR readParams");
// WARNING PTR CHECK
uint32_t* check_pDisplayCount;
check_pDisplayCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -13458,7 +12819,6 @@ VkResult VkEncoder::vkGetDisplayPlaneSupportedDisplaysKHR(
stream->handleMapping()->mapHandles_u64_VkDisplayKHR(cgen_var_887, (VkDisplayKHR*)pDisplays, (*(pDisplayCount)));
}
}
- AEMU_SCOPED_TRACE("vkGetDisplayPlaneSupportedDisplaysKHR returnUnmarshal");
VkResult vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -13475,7 +12835,6 @@ VkResult VkEncoder::vkGetDisplayModePropertiesKHR(
VkDisplayModePropertiesKHR* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDisplayModePropertiesKHR encode");
mImpl->log("start vkGetDisplayModePropertiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -13540,7 +12899,6 @@ VkResult VkEncoder::vkGetDisplayModePropertiesKHR(
marshal_VkDisplayModePropertiesKHR(stream, (VkDisplayModePropertiesKHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetDisplayModePropertiesKHR readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -13573,7 +12931,6 @@ VkResult VkEncoder::vkGetDisplayModePropertiesKHR(
transform_fromhost_VkDisplayModePropertiesKHR(mImpl->resources(), (VkDisplayModePropertiesKHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetDisplayModePropertiesKHR returnUnmarshal");
VkResult vkGetDisplayModePropertiesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetDisplayModePropertiesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -13591,7 +12948,6 @@ VkResult VkEncoder::vkCreateDisplayModeKHR(
VkDisplayModeKHR* pMode)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateDisplayModeKHR encode");
mImpl->log("start vkCreateDisplayModeKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -13669,13 +13025,11 @@ VkResult VkEncoder::vkCreateDisplayModeKHR(
stream->handleMapping()->mapHandles_VkDisplayModeKHR_u64(pMode, &cgen_var_905, 1);
stream->write((uint64_t*)&cgen_var_905, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateDisplayModeKHR readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_906;
stream->read((uint64_t*)&cgen_var_906, 8);
stream->handleMapping()->mapHandles_u64_VkDisplayModeKHR(&cgen_var_906, (VkDisplayModeKHR*)pMode, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateDisplayModeKHR returnUnmarshal");
VkResult vkCreateDisplayModeKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateDisplayModeKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -13692,7 +13046,6 @@ VkResult VkEncoder::vkGetDisplayPlaneCapabilitiesKHR(
VkDisplayPlaneCapabilitiesKHR* pCapabilities)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilitiesKHR encode");
mImpl->log("start vkGetDisplayPlaneCapabilitiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -13729,13 +13082,11 @@ VkResult VkEncoder::vkGetDisplayPlaneCapabilitiesKHR(
stream->write((uint64_t*)&cgen_var_910, 1 * 8);
stream->write((uint32_t*)&local_planeIndex, sizeof(uint32_t));
marshal_VkDisplayPlaneCapabilitiesKHR(stream, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
- AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilitiesKHR readParams");
unmarshal_VkDisplayPlaneCapabilitiesKHR(stream, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
if (pCapabilities)
{
transform_fromhost_VkDisplayPlaneCapabilitiesKHR(mImpl->resources(), (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
}
- AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilitiesKHR returnUnmarshal");
VkResult vkGetDisplayPlaneCapabilitiesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetDisplayPlaneCapabilitiesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -13752,7 +13103,6 @@ VkResult VkEncoder::vkCreateDisplayPlaneSurfaceKHR(
VkSurfaceKHR* pSurface)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateDisplayPlaneSurfaceKHR encode");
mImpl->log("start vkCreateDisplayPlaneSurfaceKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -13822,11 +13172,9 @@ VkResult VkEncoder::vkCreateDisplayPlaneSurfaceKHR(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_916, 1);
stream->write((uint64_t*)&cgen_var_916, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateDisplayPlaneSurfaceKHR readParams");
uint64_t cgen_var_917;
stream->read((uint64_t*)&cgen_var_917, 8);
stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_917, (VkSurfaceKHR*)pSurface, 1);
- AEMU_SCOPED_TRACE("vkCreateDisplayPlaneSurfaceKHR returnUnmarshal");
VkResult vkCreateDisplayPlaneSurfaceKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateDisplayPlaneSurfaceKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -13846,7 +13194,6 @@ VkResult VkEncoder::vkCreateSharedSwapchainsKHR(
VkSwapchainKHR* pSwapchains)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateSharedSwapchainsKHR encode");
mImpl->log("start vkCreateSharedSwapchainsKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -13940,7 +13287,6 @@ VkResult VkEncoder::vkCreateSharedSwapchainsKHR(
stream->write((uint64_t*)cgen_var_923, ((swapchainCount)) * 8);
}
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateSharedSwapchainsKHR readParams");
if (((swapchainCount)))
{
uint64_t* cgen_var_924;
@@ -13948,7 +13294,6 @@ VkResult VkEncoder::vkCreateSharedSwapchainsKHR(
stream->read((uint64_t*)cgen_var_924, ((swapchainCount)) * 8);
stream->handleMapping()->mapHandles_u64_VkSwapchainKHR(cgen_var_924, (VkSwapchainKHR*)pSwapchains, ((swapchainCount)));
}
- AEMU_SCOPED_TRACE("vkCreateSharedSwapchainsKHR returnUnmarshal");
VkResult vkCreateSharedSwapchainsKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateSharedSwapchainsKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -13967,7 +13312,6 @@ VkResult VkEncoder::vkCreateXlibSurfaceKHR(
VkSurfaceKHR* pSurface)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateXlibSurfaceKHR encode");
mImpl->log("start vkCreateXlibSurfaceKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14037,11 +13381,9 @@ VkResult VkEncoder::vkCreateXlibSurfaceKHR(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_930, 1);
stream->write((uint64_t*)&cgen_var_930, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateXlibSurfaceKHR readParams");
uint64_t cgen_var_931;
stream->read((uint64_t*)&cgen_var_931, 8);
stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_931, (VkSurfaceKHR*)pSurface, 1);
- AEMU_SCOPED_TRACE("vkCreateXlibSurfaceKHR returnUnmarshal");
VkResult vkCreateXlibSurfaceKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateXlibSurfaceKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -14058,7 +13400,6 @@ VkBool32 VkEncoder::vkGetPhysicalDeviceXlibPresentationSupportKHR(
VisualID visualID)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXlibPresentationSupportKHR encode");
mImpl->log("start vkGetPhysicalDeviceXlibPresentationSupportKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14091,9 +13432,7 @@ VkBool32 VkEncoder::vkGetPhysicalDeviceXlibPresentationSupportKHR(
stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
stream->write((Display*)dpy, sizeof(Display));
stream->write((VisualID*)&local_visualID, sizeof(VisualID));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXlibPresentationSupportKHR readParams");
stream->read((Display*)dpy, sizeof(Display));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXlibPresentationSupportKHR returnUnmarshal");
VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return = (VkBool32)0;
stream->read(&vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return, sizeof(VkBool32));
pool->freeAll();
@@ -14112,7 +13451,6 @@ VkResult VkEncoder::vkCreateXcbSurfaceKHR(
VkSurfaceKHR* pSurface)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateXcbSurfaceKHR encode");
mImpl->log("start vkCreateXcbSurfaceKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14182,11 +13520,9 @@ VkResult VkEncoder::vkCreateXcbSurfaceKHR(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_939, 1);
stream->write((uint64_t*)&cgen_var_939, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateXcbSurfaceKHR readParams");
uint64_t cgen_var_940;
stream->read((uint64_t*)&cgen_var_940, 8);
stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_940, (VkSurfaceKHR*)pSurface, 1);
- AEMU_SCOPED_TRACE("vkCreateXcbSurfaceKHR returnUnmarshal");
VkResult vkCreateXcbSurfaceKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateXcbSurfaceKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -14203,7 +13539,6 @@ VkBool32 VkEncoder::vkGetPhysicalDeviceXcbPresentationSupportKHR(
xcb_visualid_t visual_id)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXcbPresentationSupportKHR encode");
mImpl->log("start vkGetPhysicalDeviceXcbPresentationSupportKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14236,9 +13571,7 @@ VkBool32 VkEncoder::vkGetPhysicalDeviceXcbPresentationSupportKHR(
stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
stream->write((xcb_connection_t*)connection, sizeof(xcb_connection_t));
stream->write((xcb_visualid_t*)&local_visual_id, sizeof(xcb_visualid_t));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXcbPresentationSupportKHR readParams");
stream->read((xcb_connection_t*)connection, sizeof(xcb_connection_t));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceXcbPresentationSupportKHR returnUnmarshal");
VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return = (VkBool32)0;
stream->read(&vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return, sizeof(VkBool32));
pool->freeAll();
@@ -14257,7 +13590,6 @@ VkResult VkEncoder::vkCreateWaylandSurfaceKHR(
VkSurfaceKHR* pSurface)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateWaylandSurfaceKHR encode");
mImpl->log("start vkCreateWaylandSurfaceKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14327,11 +13659,9 @@ VkResult VkEncoder::vkCreateWaylandSurfaceKHR(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_948, 1);
stream->write((uint64_t*)&cgen_var_948, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateWaylandSurfaceKHR readParams");
uint64_t cgen_var_949;
stream->read((uint64_t*)&cgen_var_949, 8);
stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_949, (VkSurfaceKHR*)pSurface, 1);
- AEMU_SCOPED_TRACE("vkCreateWaylandSurfaceKHR returnUnmarshal");
VkResult vkCreateWaylandSurfaceKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateWaylandSurfaceKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -14347,7 +13677,6 @@ VkBool32 VkEncoder::vkGetPhysicalDeviceWaylandPresentationSupportKHR(
wl_display* display)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWaylandPresentationSupportKHR encode");
mImpl->log("start vkGetPhysicalDeviceWaylandPresentationSupportKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14376,9 +13705,7 @@ VkBool32 VkEncoder::vkGetPhysicalDeviceWaylandPresentationSupportKHR(
stream->write((uint64_t*)&cgen_var_951, 1 * 8);
stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
stream->write((wl_display*)display, sizeof(wl_display));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWaylandPresentationSupportKHR readParams");
stream->read((wl_display*)display, sizeof(wl_display));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWaylandPresentationSupportKHR returnUnmarshal");
VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return = (VkBool32)0;
stream->read(&vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return, sizeof(VkBool32));
pool->freeAll();
@@ -14397,7 +13724,6 @@ VkResult VkEncoder::vkCreateMirSurfaceKHR(
VkSurfaceKHR* pSurface)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateMirSurfaceKHR encode");
mImpl->log("start vkCreateMirSurfaceKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14467,11 +13793,9 @@ VkResult VkEncoder::vkCreateMirSurfaceKHR(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_957, 1);
stream->write((uint64_t*)&cgen_var_957, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateMirSurfaceKHR readParams");
uint64_t cgen_var_958;
stream->read((uint64_t*)&cgen_var_958, 8);
stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_958, (VkSurfaceKHR*)pSurface, 1);
- AEMU_SCOPED_TRACE("vkCreateMirSurfaceKHR returnUnmarshal");
VkResult vkCreateMirSurfaceKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateMirSurfaceKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -14487,7 +13811,6 @@ VkBool32 VkEncoder::vkGetPhysicalDeviceMirPresentationSupportKHR(
MirConnection* connection)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMirPresentationSupportKHR encode");
mImpl->log("start vkGetPhysicalDeviceMirPresentationSupportKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14516,9 +13839,7 @@ VkBool32 VkEncoder::vkGetPhysicalDeviceMirPresentationSupportKHR(
stream->write((uint64_t*)&cgen_var_960, 1 * 8);
stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
stream->write((MirConnection*)connection, sizeof(MirConnection));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMirPresentationSupportKHR readParams");
stream->read((MirConnection*)connection, sizeof(MirConnection));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMirPresentationSupportKHR returnUnmarshal");
VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return = (VkBool32)0;
stream->read(&vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return, sizeof(VkBool32));
pool->freeAll();
@@ -14537,7 +13858,6 @@ VkResult VkEncoder::vkCreateAndroidSurfaceKHR(
VkSurfaceKHR* pSurface)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateAndroidSurfaceKHR encode");
mImpl->log("start vkCreateAndroidSurfaceKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14607,11 +13927,9 @@ VkResult VkEncoder::vkCreateAndroidSurfaceKHR(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_966, 1);
stream->write((uint64_t*)&cgen_var_966, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateAndroidSurfaceKHR readParams");
uint64_t cgen_var_967;
stream->read((uint64_t*)&cgen_var_967, 8);
stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_967, (VkSurfaceKHR*)pSurface, 1);
- AEMU_SCOPED_TRACE("vkCreateAndroidSurfaceKHR returnUnmarshal");
VkResult vkCreateAndroidSurfaceKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateAndroidSurfaceKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -14630,7 +13948,6 @@ VkResult VkEncoder::vkCreateWin32SurfaceKHR(
VkSurfaceKHR* pSurface)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateWin32SurfaceKHR encode");
mImpl->log("start vkCreateWin32SurfaceKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14700,11 +14017,9 @@ VkResult VkEncoder::vkCreateWin32SurfaceKHR(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_973, 1);
stream->write((uint64_t*)&cgen_var_973, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateWin32SurfaceKHR readParams");
uint64_t cgen_var_974;
stream->read((uint64_t*)&cgen_var_974, 8);
stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_974, (VkSurfaceKHR*)pSurface, 1);
- AEMU_SCOPED_TRACE("vkCreateWin32SurfaceKHR returnUnmarshal");
VkResult vkCreateWin32SurfaceKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateWin32SurfaceKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -14719,7 +14034,6 @@ VkBool32 VkEncoder::vkGetPhysicalDeviceWin32PresentationSupportKHR(
uint32_t queueFamilyIndex)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWin32PresentationSupportKHR encode");
mImpl->log("start vkGetPhysicalDeviceWin32PresentationSupportKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14746,8 +14060,6 @@ VkBool32 VkEncoder::vkGetPhysicalDeviceWin32PresentationSupportKHR(
stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_976, 1);
stream->write((uint64_t*)&cgen_var_976, 1 * 8);
stream->write((uint32_t*)&local_queueFamilyIndex, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWin32PresentationSupportKHR readParams");
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceWin32PresentationSupportKHR returnUnmarshal");
VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return = (VkBool32)0;
stream->read(&vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return, sizeof(VkBool32));
pool->freeAll();
@@ -14768,7 +14080,6 @@ void VkEncoder::vkGetPhysicalDeviceFeatures2KHR(
VkPhysicalDeviceFeatures2* pFeatures)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2KHR encode");
mImpl->log("start vkGetPhysicalDeviceFeatures2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14793,13 +14104,11 @@ void VkEncoder::vkGetPhysicalDeviceFeatures2KHR(
stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_978, 1);
stream->write((uint64_t*)&cgen_var_978, 1 * 8);
marshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2KHR readParams");
unmarshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
if (pFeatures)
{
transform_fromhost_VkPhysicalDeviceFeatures2(mImpl->resources(), (VkPhysicalDeviceFeatures2*)(pFeatures));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFeatures2KHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -14811,7 +14120,6 @@ void VkEncoder::vkGetPhysicalDeviceProperties2KHR(
VkPhysicalDeviceProperties2* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2KHR encode");
mImpl->log("start vkGetPhysicalDeviceProperties2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14836,13 +14144,11 @@ void VkEncoder::vkGetPhysicalDeviceProperties2KHR(
stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_980, 1);
stream->write((uint64_t*)&cgen_var_980, 1 * 8);
marshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2KHR readParams");
unmarshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
if (pProperties)
{
transform_fromhost_VkPhysicalDeviceProperties2(mImpl->resources(), (VkPhysicalDeviceProperties2*)(pProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceProperties2KHR returnUnmarshal");
mImpl->resources()->on_vkGetPhysicalDeviceProperties2KHR(this, physicalDevice, pProperties);
pool->freeAll();
countingStream->clearPool();
@@ -14856,7 +14162,6 @@ void VkEncoder::vkGetPhysicalDeviceFormatProperties2KHR(
VkFormatProperties2* pFormatProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2KHR encode");
mImpl->log("start vkGetPhysicalDeviceFormatProperties2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14885,13 +14190,11 @@ void VkEncoder::vkGetPhysicalDeviceFormatProperties2KHR(
stream->write((uint64_t*)&cgen_var_982, 1 * 8);
stream->write((VkFormat*)&local_format, sizeof(VkFormat));
marshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2KHR readParams");
unmarshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
if (pFormatProperties)
{
transform_fromhost_VkFormatProperties2(mImpl->resources(), (VkFormatProperties2*)(pFormatProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceFormatProperties2KHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -14904,7 +14207,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2KHR(
VkImageFormatProperties2* pImageFormatProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2KHR encode");
mImpl->log("start vkGetPhysicalDeviceImageFormatProperties2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -14942,13 +14244,11 @@ VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2KHR(
stream->write((uint64_t*)&cgen_var_984, 1 * 8);
marshal_VkPhysicalDeviceImageFormatInfo2(stream, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
marshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2KHR readParams");
unmarshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
if (pImageFormatProperties)
{
transform_fromhost_VkImageFormatProperties2(mImpl->resources(), (VkImageFormatProperties2*)(pImageFormatProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceImageFormatProperties2KHR returnUnmarshal");
VkResult vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -14964,7 +14264,6 @@ void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2KHR(
VkQueueFamilyProperties2* pQueueFamilyProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2KHR encode");
mImpl->log("start vkGetPhysicalDeviceQueueFamilyProperties2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15021,7 +14320,6 @@ void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2KHR(
marshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2KHR readParams");
// WARNING PTR CHECK
uint32_t* check_pQueueFamilyPropertyCount;
check_pQueueFamilyPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -15054,7 +14352,6 @@ void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties2KHR(
transform_fromhost_VkQueueFamilyProperties2(mImpl->resources(), (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceQueueFamilyProperties2KHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -15066,7 +14363,6 @@ void VkEncoder::vkGetPhysicalDeviceMemoryProperties2KHR(
VkPhysicalDeviceMemoryProperties2* pMemoryProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2KHR encode");
mImpl->log("start vkGetPhysicalDeviceMemoryProperties2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15091,13 +14387,11 @@ void VkEncoder::vkGetPhysicalDeviceMemoryProperties2KHR(
stream->handleMapping()->mapHandles_VkPhysicalDevice_u64(&local_physicalDevice, &cgen_var_994, 1);
stream->write((uint64_t*)&cgen_var_994, 1 * 8);
marshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2KHR readParams");
unmarshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
if (pMemoryProperties)
{
transform_fromhost_VkPhysicalDeviceMemoryProperties2(mImpl->resources(), (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMemoryProperties2KHR returnUnmarshal");
mImpl->resources()->on_vkGetPhysicalDeviceMemoryProperties2KHR(this, physicalDevice, pMemoryProperties);
pool->freeAll();
countingStream->clearPool();
@@ -15112,7 +14406,6 @@ void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
VkSparseImageFormatProperties2* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2KHR encode");
mImpl->log("start vkGetPhysicalDeviceSparseImageFormatProperties2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15182,7 +14475,6 @@ void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
marshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2KHR readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -15215,7 +14507,6 @@ void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
transform_fromhost_VkSparseImageFormatProperties2(mImpl->resources(), (VkSparseImageFormatProperties2*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSparseImageFormatProperties2KHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -15232,7 +14523,6 @@ void VkEncoder::vkGetDeviceGroupPeerMemoryFeaturesKHR(
VkPeerMemoryFeatureFlags* pPeerMemoryFeatures)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeaturesKHR encode");
mImpl->log("start vkGetDeviceGroupPeerMemoryFeaturesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15269,9 +14559,7 @@ void VkEncoder::vkGetDeviceGroupPeerMemoryFeaturesKHR(
stream->write((uint32_t*)&local_localDeviceIndex, sizeof(uint32_t));
stream->write((uint32_t*)&local_remoteDeviceIndex, sizeof(uint32_t));
stream->write((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
- AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeaturesKHR readParams");
stream->read((VkPeerMemoryFeatureFlags*)pPeerMemoryFeatures, sizeof(VkPeerMemoryFeatureFlags));
- AEMU_SCOPED_TRACE("vkGetDeviceGroupPeerMemoryFeaturesKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -15283,7 +14571,6 @@ void VkEncoder::vkCmdSetDeviceMaskKHR(
uint32_t deviceMask)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetDeviceMaskKHR encode");
mImpl->log("start vkCmdSetDeviceMaskKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15310,8 +14597,6 @@ void VkEncoder::vkCmdSetDeviceMaskKHR(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1006, 1);
stream->write((uint64_t*)&cgen_var_1006, 1 * 8);
stream->write((uint32_t*)&local_deviceMask, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdSetDeviceMaskKHR readParams");
- AEMU_SCOPED_TRACE("vkCmdSetDeviceMaskKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -15328,7 +14613,6 @@ void VkEncoder::vkCmdDispatchBaseKHR(
uint32_t groupCountZ)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDispatchBaseKHR encode");
mImpl->log("start vkCmdDispatchBaseKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15375,8 +14659,6 @@ void VkEncoder::vkCmdDispatchBaseKHR(
stream->write((uint32_t*)&local_groupCountX, sizeof(uint32_t));
stream->write((uint32_t*)&local_groupCountY, sizeof(uint32_t));
stream->write((uint32_t*)&local_groupCountZ, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDispatchBaseKHR readParams");
- AEMU_SCOPED_TRACE("vkCmdDispatchBaseKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -15393,7 +14675,6 @@ void VkEncoder::vkTrimCommandPoolKHR(
VkCommandPoolTrimFlags flags)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkTrimCommandPoolKHR encode");
mImpl->log("start vkTrimCommandPoolKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15428,8 +14709,6 @@ void VkEncoder::vkTrimCommandPoolKHR(
stream->handleMapping()->mapHandles_VkCommandPool_u64(&local_commandPool, &cgen_var_1012, 1);
stream->write((uint64_t*)&cgen_var_1012, 1 * 8);
stream->write((VkCommandPoolTrimFlags*)&local_flags, sizeof(VkCommandPoolTrimFlags));
- AEMU_SCOPED_TRACE("vkTrimCommandPoolKHR readParams");
- AEMU_SCOPED_TRACE("vkTrimCommandPoolKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -15444,7 +14723,6 @@ VkResult VkEncoder::vkEnumeratePhysicalDeviceGroupsKHR(
VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroupsKHR encode");
mImpl->log("start vkEnumeratePhysicalDeviceGroupsKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15501,7 +14779,6 @@ VkResult VkEncoder::vkEnumeratePhysicalDeviceGroupsKHR(
marshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroupsKHR readParams");
// WARNING PTR CHECK
uint32_t* check_pPhysicalDeviceGroupCount;
check_pPhysicalDeviceGroupCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -15534,7 +14811,6 @@ VkResult VkEncoder::vkEnumeratePhysicalDeviceGroupsKHR(
transform_fromhost_VkPhysicalDeviceGroupProperties(mImpl->resources(), (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkEnumeratePhysicalDeviceGroupsKHR returnUnmarshal");
VkResult vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return = (VkResult)0;
stream->read(&vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -15552,7 +14828,6 @@ void VkEncoder::vkGetPhysicalDeviceExternalBufferPropertiesKHR(
VkExternalBufferProperties* pExternalBufferProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferPropertiesKHR encode");
mImpl->log("start vkGetPhysicalDeviceExternalBufferPropertiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15591,14 +14866,12 @@ void VkEncoder::vkGetPhysicalDeviceExternalBufferPropertiesKHR(
stream->write((uint64_t*)&cgen_var_1022, 1 * 8);
marshal_VkPhysicalDeviceExternalBufferInfo(stream, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
marshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferPropertiesKHR readParams");
unmarshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
if (pExternalBufferProperties)
{
mImpl->resources()->transformImpl_VkExternalBufferProperties_fromhost(pExternalBufferProperties, 1);
transform_fromhost_VkExternalBufferProperties(mImpl->resources(), (VkExternalBufferProperties*)(pExternalBufferProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalBufferPropertiesKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -15615,7 +14888,6 @@ VkResult VkEncoder::vkGetMemoryWin32HandleKHR(
HANDLE* pHandle)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleKHR encode");
mImpl->log("start vkGetMemoryWin32HandleKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15653,9 +14925,7 @@ VkResult VkEncoder::vkGetMemoryWin32HandleKHR(
stream->write((uint64_t*)&cgen_var_1024, 1 * 8);
marshal_VkMemoryGetWin32HandleInfoKHR(stream, (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
stream->write((HANDLE*)pHandle, sizeof(HANDLE));
- AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleKHR readParams");
stream->read((HANDLE*)pHandle, sizeof(HANDLE));
- AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleKHR returnUnmarshal");
VkResult vkGetMemoryWin32HandleKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetMemoryWin32HandleKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -15672,7 +14942,6 @@ VkResult VkEncoder::vkGetMemoryWin32HandlePropertiesKHR(
VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetMemoryWin32HandlePropertiesKHR encode");
mImpl->log("start vkGetMemoryWin32HandlePropertiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15705,13 +14974,11 @@ VkResult VkEncoder::vkGetMemoryWin32HandlePropertiesKHR(
stream->write((VkExternalMemoryHandleTypeFlagBits*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
stream->write((HANDLE*)&local_handle, sizeof(HANDLE));
marshal_VkMemoryWin32HandlePropertiesKHR(stream, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
- AEMU_SCOPED_TRACE("vkGetMemoryWin32HandlePropertiesKHR readParams");
unmarshal_VkMemoryWin32HandlePropertiesKHR(stream, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
if (pMemoryWin32HandleProperties)
{
transform_fromhost_VkMemoryWin32HandlePropertiesKHR(mImpl->resources(), (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
}
- AEMU_SCOPED_TRACE("vkGetMemoryWin32HandlePropertiesKHR returnUnmarshal");
VkResult vkGetMemoryWin32HandlePropertiesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetMemoryWin32HandlePropertiesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -15729,7 +14996,6 @@ VkResult VkEncoder::vkGetMemoryFdKHR(
int* pFd)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetMemoryFdKHR encode");
mImpl->log("start vkGetMemoryFdKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15767,9 +15033,7 @@ VkResult VkEncoder::vkGetMemoryFdKHR(
stream->write((uint64_t*)&cgen_var_1028, 1 * 8);
marshal_VkMemoryGetFdInfoKHR(stream, (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo));
stream->write((int*)pFd, sizeof(int));
- AEMU_SCOPED_TRACE("vkGetMemoryFdKHR readParams");
stream->read((int*)pFd, sizeof(int));
- AEMU_SCOPED_TRACE("vkGetMemoryFdKHR returnUnmarshal");
VkResult vkGetMemoryFdKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetMemoryFdKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -15786,7 +15050,6 @@ VkResult VkEncoder::vkGetMemoryFdPropertiesKHR(
VkMemoryFdPropertiesKHR* pMemoryFdProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetMemoryFdPropertiesKHR encode");
mImpl->log("start vkGetMemoryFdPropertiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15819,13 +15082,11 @@ VkResult VkEncoder::vkGetMemoryFdPropertiesKHR(
stream->write((VkExternalMemoryHandleTypeFlagBits*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
stream->write((int*)&local_fd, sizeof(int));
marshal_VkMemoryFdPropertiesKHR(stream, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
- AEMU_SCOPED_TRACE("vkGetMemoryFdPropertiesKHR readParams");
unmarshal_VkMemoryFdPropertiesKHR(stream, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
if (pMemoryFdProperties)
{
transform_fromhost_VkMemoryFdPropertiesKHR(mImpl->resources(), (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
}
- AEMU_SCOPED_TRACE("vkGetMemoryFdPropertiesKHR returnUnmarshal");
VkResult vkGetMemoryFdPropertiesKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetMemoryFdPropertiesKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -15845,7 +15106,6 @@ void VkEncoder::vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
VkExternalSemaphoreProperties* pExternalSemaphoreProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR encode");
mImpl->log("start vkGetPhysicalDeviceExternalSemaphorePropertiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15883,13 +15143,11 @@ void VkEncoder::vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
stream->write((uint64_t*)&cgen_var_1032, 1 * 8);
marshal_VkPhysicalDeviceExternalSemaphoreInfo(stream, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
marshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR readParams");
unmarshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
if (pExternalSemaphoreProperties)
{
transform_fromhost_VkExternalSemaphoreProperties(mImpl->resources(), (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalSemaphorePropertiesKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -15905,7 +15163,6 @@ VkResult VkEncoder::vkImportSemaphoreWin32HandleKHR(
const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkImportSemaphoreWin32HandleKHR encode");
mImpl->log("start vkImportSemaphoreWin32HandleKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15941,8 +15198,6 @@ VkResult VkEncoder::vkImportSemaphoreWin32HandleKHR(
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1034, 1);
stream->write((uint64_t*)&cgen_var_1034, 1 * 8);
marshal_VkImportSemaphoreWin32HandleInfoKHR(stream, (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo));
- AEMU_SCOPED_TRACE("vkImportSemaphoreWin32HandleKHR readParams");
- AEMU_SCOPED_TRACE("vkImportSemaphoreWin32HandleKHR returnUnmarshal");
VkResult vkImportSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
stream->read(&vkImportSemaphoreWin32HandleKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -15958,7 +15213,6 @@ VkResult VkEncoder::vkGetSemaphoreWin32HandleKHR(
HANDLE* pHandle)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetSemaphoreWin32HandleKHR encode");
mImpl->log("start vkGetSemaphoreWin32HandleKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -15996,9 +15250,7 @@ VkResult VkEncoder::vkGetSemaphoreWin32HandleKHR(
stream->write((uint64_t*)&cgen_var_1036, 1 * 8);
marshal_VkSemaphoreGetWin32HandleInfoKHR(stream, (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
stream->write((HANDLE*)pHandle, sizeof(HANDLE));
- AEMU_SCOPED_TRACE("vkGetSemaphoreWin32HandleKHR readParams");
stream->read((HANDLE*)pHandle, sizeof(HANDLE));
- AEMU_SCOPED_TRACE("vkGetSemaphoreWin32HandleKHR returnUnmarshal");
VkResult vkGetSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetSemaphoreWin32HandleKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -16015,7 +15267,6 @@ VkResult VkEncoder::vkImportSemaphoreFdKHR(
const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkImportSemaphoreFdKHR encode");
mImpl->log("start vkImportSemaphoreFdKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16051,8 +15302,6 @@ VkResult VkEncoder::vkImportSemaphoreFdKHR(
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1038, 1);
stream->write((uint64_t*)&cgen_var_1038, 1 * 8);
marshal_VkImportSemaphoreFdInfoKHR(stream, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
- AEMU_SCOPED_TRACE("vkImportSemaphoreFdKHR readParams");
- AEMU_SCOPED_TRACE("vkImportSemaphoreFdKHR returnUnmarshal");
VkResult vkImportSemaphoreFdKHR_VkResult_return = (VkResult)0;
stream->read(&vkImportSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -16068,7 +15317,6 @@ VkResult VkEncoder::vkGetSemaphoreFdKHR(
int* pFd)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetSemaphoreFdKHR encode");
mImpl->log("start vkGetSemaphoreFdKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16106,9 +15354,7 @@ VkResult VkEncoder::vkGetSemaphoreFdKHR(
stream->write((uint64_t*)&cgen_var_1040, 1 * 8);
marshal_VkSemaphoreGetFdInfoKHR(stream, (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
stream->write((int*)pFd, sizeof(int));
- AEMU_SCOPED_TRACE("vkGetSemaphoreFdKHR readParams");
stream->read((int*)pFd, sizeof(int));
- AEMU_SCOPED_TRACE("vkGetSemaphoreFdKHR returnUnmarshal");
VkResult vkGetSemaphoreFdKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -16129,7 +15375,6 @@ void VkEncoder::vkCmdPushDescriptorSetKHR(
const VkWriteDescriptorSet* pDescriptorWrites)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetKHR encode");
mImpl->log("start vkCmdPushDescriptorSetKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16197,8 +15442,6 @@ void VkEncoder::vkCmdPushDescriptorSetKHR(
{
marshal_VkWriteDescriptorSet(stream, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
}
- AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetKHR readParams");
- AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -16213,7 +15456,6 @@ void VkEncoder::vkCmdPushDescriptorSetWithTemplateKHR(
const void* pData)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetWithTemplateKHR encode");
mImpl->log("start vkCmdPushDescriptorSetWithTemplateKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16276,8 +15518,6 @@ void VkEncoder::vkCmdPushDescriptorSetWithTemplateKHR(
{
stream->write((void*)local_pData, sizeof(uint8_t));
}
- AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetWithTemplateKHR readParams");
- AEMU_SCOPED_TRACE("vkCmdPushDescriptorSetWithTemplateKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -16297,7 +15537,6 @@ VkResult VkEncoder::vkCreateDescriptorUpdateTemplateKHR(
VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplateKHR encode");
mImpl->log("start vkCreateDescriptorUpdateTemplateKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16367,13 +15606,11 @@ VkResult VkEncoder::vkCreateDescriptorUpdateTemplateKHR(
stream->handleMapping()->mapHandles_VkDescriptorUpdateTemplate_u64(pDescriptorUpdateTemplate, &cgen_var_1058, 1);
stream->write((uint64_t*)&cgen_var_1058, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplateKHR readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_1059;
stream->read((uint64_t*)&cgen_var_1059, 8);
stream->handleMapping()->mapHandles_u64_VkDescriptorUpdateTemplate(&cgen_var_1059, (VkDescriptorUpdateTemplate*)pDescriptorUpdateTemplate, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateDescriptorUpdateTemplateKHR returnUnmarshal");
VkResult vkCreateDescriptorUpdateTemplateKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateDescriptorUpdateTemplateKHR_VkResult_return, sizeof(VkResult));
mImpl->resources()->on_vkCreateDescriptorUpdateTemplateKHR(this, vkCreateDescriptorUpdateTemplateKHR_VkResult_return, device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
@@ -16390,7 +15627,6 @@ void VkEncoder::vkDestroyDescriptorUpdateTemplateKHR(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplateKHR encode");
mImpl->log("start vkDestroyDescriptorUpdateTemplateKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16447,8 +15683,6 @@ void VkEncoder::vkDestroyDescriptorUpdateTemplateKHR(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplateKHR readParams");
- AEMU_SCOPED_TRACE("vkDestroyDescriptorUpdateTemplateKHR returnUnmarshal");
resources->destroyMapping()->mapHandles_VkDescriptorUpdateTemplate((VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate);
pool->freeAll();
countingStream->clearPool();
@@ -16463,7 +15697,6 @@ void VkEncoder::vkUpdateDescriptorSetWithTemplateKHR(
const void* pData)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateKHR encode");
mImpl->log("start vkUpdateDescriptorSetWithTemplateKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16522,8 +15755,6 @@ void VkEncoder::vkUpdateDescriptorSetWithTemplateKHR(
{
stream->write((void*)local_pData, sizeof(uint8_t));
}
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateKHR readParams");
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -16539,7 +15770,6 @@ VkResult VkEncoder::vkCreateRenderPass2KHR(
VkRenderPass* pRenderPass)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateRenderPass2KHR encode");
mImpl->log("start vkCreateRenderPass2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16609,11 +15839,9 @@ VkResult VkEncoder::vkCreateRenderPass2KHR(
stream->handleMapping()->mapHandles_VkRenderPass_u64(pRenderPass, &cgen_var_1079, 1);
stream->write((uint64_t*)&cgen_var_1079, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateRenderPass2KHR readParams");
uint64_t cgen_var_1080;
stream->read((uint64_t*)&cgen_var_1080, 8);
stream->handleMapping()->mapHandles_u64_VkRenderPass(&cgen_var_1080, (VkRenderPass*)pRenderPass, 1);
- AEMU_SCOPED_TRACE("vkCreateRenderPass2KHR returnUnmarshal");
VkResult vkCreateRenderPass2KHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateRenderPass2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -16629,7 +15857,6 @@ void VkEncoder::vkCmdBeginRenderPass2KHR(
const VkSubpassBeginInfoKHR* pSubpassBeginInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdBeginRenderPass2KHR encode");
mImpl->log("start vkCmdBeginRenderPass2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16678,8 +15905,6 @@ void VkEncoder::vkCmdBeginRenderPass2KHR(
stream->write((uint64_t*)&cgen_var_1082, 1 * 8);
marshal_VkRenderPassBeginInfo(stream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
marshal_VkSubpassBeginInfoKHR(stream, (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
- AEMU_SCOPED_TRACE("vkCmdBeginRenderPass2KHR readParams");
- AEMU_SCOPED_TRACE("vkCmdBeginRenderPass2KHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -16692,7 +15917,6 @@ void VkEncoder::vkCmdNextSubpass2KHR(
const VkSubpassEndInfoKHR* pSubpassEndInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdNextSubpass2KHR encode");
mImpl->log("start vkCmdNextSubpass2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16741,8 +15965,6 @@ void VkEncoder::vkCmdNextSubpass2KHR(
stream->write((uint64_t*)&cgen_var_1084, 1 * 8);
marshal_VkSubpassBeginInfoKHR(stream, (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
marshal_VkSubpassEndInfoKHR(stream, (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
- AEMU_SCOPED_TRACE("vkCmdNextSubpass2KHR readParams");
- AEMU_SCOPED_TRACE("vkCmdNextSubpass2KHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -16754,7 +15976,6 @@ void VkEncoder::vkCmdEndRenderPass2KHR(
const VkSubpassEndInfoKHR* pSubpassEndInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdEndRenderPass2KHR encode");
mImpl->log("start vkCmdEndRenderPass2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16790,8 +16011,6 @@ void VkEncoder::vkCmdEndRenderPass2KHR(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1086, 1);
stream->write((uint64_t*)&cgen_var_1086, 1 * 8);
marshal_VkSubpassEndInfoKHR(stream, (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
- AEMU_SCOPED_TRACE("vkCmdEndRenderPass2KHR readParams");
- AEMU_SCOPED_TRACE("vkCmdEndRenderPass2KHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -16805,7 +16024,6 @@ VkResult VkEncoder::vkGetSwapchainStatusKHR(
VkSwapchainKHR swapchain)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetSwapchainStatusKHR encode");
mImpl->log("start vkGetSwapchainStatusKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16836,8 +16054,6 @@ VkResult VkEncoder::vkGetSwapchainStatusKHR(
uint64_t cgen_var_1090;
stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_1090, 1);
stream->write((uint64_t*)&cgen_var_1090, 1 * 8);
- AEMU_SCOPED_TRACE("vkGetSwapchainStatusKHR readParams");
- AEMU_SCOPED_TRACE("vkGetSwapchainStatusKHR returnUnmarshal");
VkResult vkGetSwapchainStatusKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetSwapchainStatusKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -16855,7 +16071,6 @@ void VkEncoder::vkGetPhysicalDeviceExternalFencePropertiesKHR(
VkExternalFenceProperties* pExternalFenceProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFencePropertiesKHR encode");
mImpl->log("start vkGetPhysicalDeviceExternalFencePropertiesKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16893,13 +16108,11 @@ void VkEncoder::vkGetPhysicalDeviceExternalFencePropertiesKHR(
stream->write((uint64_t*)&cgen_var_1092, 1 * 8);
marshal_VkPhysicalDeviceExternalFenceInfo(stream, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
marshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFencePropertiesKHR readParams");
unmarshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
if (pExternalFenceProperties)
{
transform_fromhost_VkExternalFenceProperties(mImpl->resources(), (VkExternalFenceProperties*)(pExternalFenceProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalFencePropertiesKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -16915,7 +16128,6 @@ VkResult VkEncoder::vkImportFenceWin32HandleKHR(
const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkImportFenceWin32HandleKHR encode");
mImpl->log("start vkImportFenceWin32HandleKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -16951,8 +16163,6 @@ VkResult VkEncoder::vkImportFenceWin32HandleKHR(
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1094, 1);
stream->write((uint64_t*)&cgen_var_1094, 1 * 8);
marshal_VkImportFenceWin32HandleInfoKHR(stream, (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo));
- AEMU_SCOPED_TRACE("vkImportFenceWin32HandleKHR readParams");
- AEMU_SCOPED_TRACE("vkImportFenceWin32HandleKHR returnUnmarshal");
VkResult vkImportFenceWin32HandleKHR_VkResult_return = (VkResult)0;
stream->read(&vkImportFenceWin32HandleKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -16968,7 +16178,6 @@ VkResult VkEncoder::vkGetFenceWin32HandleKHR(
HANDLE* pHandle)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetFenceWin32HandleKHR encode");
mImpl->log("start vkGetFenceWin32HandleKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17006,9 +16215,7 @@ VkResult VkEncoder::vkGetFenceWin32HandleKHR(
stream->write((uint64_t*)&cgen_var_1096, 1 * 8);
marshal_VkFenceGetWin32HandleInfoKHR(stream, (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
stream->write((HANDLE*)pHandle, sizeof(HANDLE));
- AEMU_SCOPED_TRACE("vkGetFenceWin32HandleKHR readParams");
stream->read((HANDLE*)pHandle, sizeof(HANDLE));
- AEMU_SCOPED_TRACE("vkGetFenceWin32HandleKHR returnUnmarshal");
VkResult vkGetFenceWin32HandleKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetFenceWin32HandleKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -17025,7 +16232,6 @@ VkResult VkEncoder::vkImportFenceFdKHR(
const VkImportFenceFdInfoKHR* pImportFenceFdInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkImportFenceFdKHR encode");
mImpl->log("start vkImportFenceFdKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17061,8 +16267,6 @@ VkResult VkEncoder::vkImportFenceFdKHR(
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1098, 1);
stream->write((uint64_t*)&cgen_var_1098, 1 * 8);
marshal_VkImportFenceFdInfoKHR(stream, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
- AEMU_SCOPED_TRACE("vkImportFenceFdKHR readParams");
- AEMU_SCOPED_TRACE("vkImportFenceFdKHR returnUnmarshal");
VkResult vkImportFenceFdKHR_VkResult_return = (VkResult)0;
stream->read(&vkImportFenceFdKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -17078,7 +16282,6 @@ VkResult VkEncoder::vkGetFenceFdKHR(
int* pFd)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetFenceFdKHR encode");
mImpl->log("start vkGetFenceFdKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17116,9 +16319,7 @@ VkResult VkEncoder::vkGetFenceFdKHR(
stream->write((uint64_t*)&cgen_var_1100, 1 * 8);
marshal_VkFenceGetFdInfoKHR(stream, (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
stream->write((int*)pFd, sizeof(int));
- AEMU_SCOPED_TRACE("vkGetFenceFdKHR readParams");
stream->read((int*)pFd, sizeof(int));
- AEMU_SCOPED_TRACE("vkGetFenceFdKHR returnUnmarshal");
VkResult vkGetFenceFdKHR_VkResult_return = (VkResult)0;
stream->read(&vkGetFenceFdKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -17138,7 +16339,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceCapabilities2KHR(
VkSurfaceCapabilities2KHR* pSurfaceCapabilities)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2KHR encode");
mImpl->log("start vkGetPhysicalDeviceSurfaceCapabilities2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17176,13 +16376,11 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceCapabilities2KHR(
stream->write((uint64_t*)&cgen_var_1102, 1 * 8);
marshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
marshal_VkSurfaceCapabilities2KHR(stream, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2KHR readParams");
unmarshal_VkSurfaceCapabilities2KHR(stream, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
if (pSurfaceCapabilities)
{
transform_fromhost_VkSurfaceCapabilities2KHR(mImpl->resources(), (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2KHR returnUnmarshal");
VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -17199,7 +16397,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceFormats2KHR(
VkSurfaceFormat2KHR* pSurfaceFormats)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormats2KHR encode");
mImpl->log("start vkGetPhysicalDeviceSurfaceFormats2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17269,7 +16466,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceFormats2KHR(
marshal_VkSurfaceFormat2KHR(stream, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormats2KHR readParams");
// WARNING PTR CHECK
uint32_t* check_pSurfaceFormatCount;
check_pSurfaceFormatCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -17302,7 +16498,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceFormats2KHR(
transform_fromhost_VkSurfaceFormat2KHR(mImpl->resources(), (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceFormats2KHR returnUnmarshal");
VkResult vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -17322,7 +16517,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayProperties2KHR(
VkDisplayProperties2KHR* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayProperties2KHR encode");
mImpl->log("start vkGetPhysicalDeviceDisplayProperties2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17379,7 +16573,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayProperties2KHR(
marshal_VkDisplayProperties2KHR(stream, (VkDisplayProperties2KHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayProperties2KHR readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -17412,7 +16605,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayProperties2KHR(
transform_fromhost_VkDisplayProperties2KHR(mImpl->resources(), (VkDisplayProperties2KHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayProperties2KHR returnUnmarshal");
VkResult vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -17428,7 +16620,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
VkDisplayPlaneProperties2KHR* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlaneProperties2KHR encode");
mImpl->log("start vkGetPhysicalDeviceDisplayPlaneProperties2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17485,7 +16676,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
marshal_VkDisplayPlaneProperties2KHR(stream, (VkDisplayPlaneProperties2KHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlaneProperties2KHR readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -17518,7 +16708,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
transform_fromhost_VkDisplayPlaneProperties2KHR(mImpl->resources(), (VkDisplayPlaneProperties2KHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceDisplayPlaneProperties2KHR returnUnmarshal");
VkResult vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -17535,7 +16724,6 @@ VkResult VkEncoder::vkGetDisplayModeProperties2KHR(
VkDisplayModeProperties2KHR* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDisplayModeProperties2KHR encode");
mImpl->log("start vkGetDisplayModeProperties2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17600,7 +16788,6 @@ VkResult VkEncoder::vkGetDisplayModeProperties2KHR(
marshal_VkDisplayModeProperties2KHR(stream, (VkDisplayModeProperties2KHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetDisplayModeProperties2KHR readParams");
// WARNING PTR CHECK
uint32_t* check_pPropertyCount;
check_pPropertyCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -17633,7 +16820,6 @@ VkResult VkEncoder::vkGetDisplayModeProperties2KHR(
transform_fromhost_VkDisplayModeProperties2KHR(mImpl->resources(), (VkDisplayModeProperties2KHR*)(pProperties + i));
}
}
- AEMU_SCOPED_TRACE("vkGetDisplayModeProperties2KHR returnUnmarshal");
VkResult vkGetDisplayModeProperties2KHR_VkResult_return = (VkResult)0;
stream->read(&vkGetDisplayModeProperties2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -17649,7 +16835,6 @@ VkResult VkEncoder::vkGetDisplayPlaneCapabilities2KHR(
VkDisplayPlaneCapabilities2KHR* pCapabilities)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilities2KHR encode");
mImpl->log("start vkGetDisplayPlaneCapabilities2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17687,13 +16872,11 @@ VkResult VkEncoder::vkGetDisplayPlaneCapabilities2KHR(
stream->write((uint64_t*)&cgen_var_1138, 1 * 8);
marshal_VkDisplayPlaneInfo2KHR(stream, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo));
marshal_VkDisplayPlaneCapabilities2KHR(stream, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
- AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilities2KHR readParams");
unmarshal_VkDisplayPlaneCapabilities2KHR(stream, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
if (pCapabilities)
{
transform_fromhost_VkDisplayPlaneCapabilities2KHR(mImpl->resources(), (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
}
- AEMU_SCOPED_TRACE("vkGetDisplayPlaneCapabilities2KHR returnUnmarshal");
VkResult vkGetDisplayPlaneCapabilities2KHR_VkResult_return = (VkResult)0;
stream->read(&vkGetDisplayPlaneCapabilities2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -17717,7 +16900,6 @@ void VkEncoder::vkGetImageMemoryRequirements2KHR(
VkMemoryRequirements2* pMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2KHR encode");
mImpl->log("start vkGetImageMemoryRequirements2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17755,13 +16937,11 @@ void VkEncoder::vkGetImageMemoryRequirements2KHR(
stream->write((uint64_t*)&cgen_var_1140, 1 * 8);
marshal_VkImageMemoryRequirementsInfo2(stream, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
- AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2KHR readParams");
unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
if (pMemoryRequirements)
{
transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
}
- AEMU_SCOPED_TRACE("vkGetImageMemoryRequirements2KHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -17774,7 +16954,6 @@ void VkEncoder::vkGetBufferMemoryRequirements2KHR(
VkMemoryRequirements2* pMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2KHR encode");
mImpl->log("start vkGetBufferMemoryRequirements2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17812,13 +16991,11 @@ void VkEncoder::vkGetBufferMemoryRequirements2KHR(
stream->write((uint64_t*)&cgen_var_1142, 1 * 8);
marshal_VkBufferMemoryRequirementsInfo2(stream, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
- AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2KHR readParams");
unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
if (pMemoryRequirements)
{
transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
}
- AEMU_SCOPED_TRACE("vkGetBufferMemoryRequirements2KHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -17832,7 +17009,6 @@ void VkEncoder::vkGetImageSparseMemoryRequirements2KHR(
VkSparseImageMemoryRequirements2* pSparseMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2KHR encode");
mImpl->log("start vkGetImageSparseMemoryRequirements2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -17902,7 +17078,6 @@ void VkEncoder::vkGetImageSparseMemoryRequirements2KHR(
marshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
}
}
- AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2KHR readParams");
// WARNING PTR CHECK
uint32_t* check_pSparseMemoryRequirementCount;
check_pSparseMemoryRequirementCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -17935,7 +17110,6 @@ void VkEncoder::vkGetImageSparseMemoryRequirements2KHR(
transform_fromhost_VkSparseImageMemoryRequirements2(mImpl->resources(), (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
}
}
- AEMU_SCOPED_TRACE("vkGetImageSparseMemoryRequirements2KHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -17953,7 +17127,6 @@ VkResult VkEncoder::vkCreateSamplerYcbcrConversionKHR(
VkSamplerYcbcrConversion* pYcbcrConversion)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversionKHR encode");
mImpl->log("start vkCreateSamplerYcbcrConversionKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18023,13 +17196,11 @@ VkResult VkEncoder::vkCreateSamplerYcbcrConversionKHR(
stream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(pYcbcrConversion, &cgen_var_1156, 1);
stream->write((uint64_t*)&cgen_var_1156, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversionKHR readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_1157;
stream->read((uint64_t*)&cgen_var_1157, 8);
stream->handleMapping()->mapHandles_u64_VkSamplerYcbcrConversion(&cgen_var_1157, (VkSamplerYcbcrConversion*)pYcbcrConversion, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateSamplerYcbcrConversionKHR returnUnmarshal");
VkResult vkCreateSamplerYcbcrConversionKHR_VkResult_return = (VkResult)0;
stream->read(&vkCreateSamplerYcbcrConversionKHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -18045,7 +17216,6 @@ void VkEncoder::vkDestroySamplerYcbcrConversionKHR(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversionKHR encode");
mImpl->log("start vkDestroySamplerYcbcrConversionKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18102,8 +17272,6 @@ void VkEncoder::vkDestroySamplerYcbcrConversionKHR(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversionKHR readParams");
- AEMU_SCOPED_TRACE("vkDestroySamplerYcbcrConversionKHR returnUnmarshal");
resources->destroyMapping()->mapHandles_VkSamplerYcbcrConversion((VkSamplerYcbcrConversion*)&ycbcrConversion);
pool->freeAll();
countingStream->clearPool();
@@ -18119,7 +17287,6 @@ VkResult VkEncoder::vkBindBufferMemory2KHR(
const VkBindBufferMemoryInfo* pBindInfos)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkBindBufferMemory2KHR encode");
mImpl->log("start vkBindBufferMemory2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18171,8 +17338,6 @@ VkResult VkEncoder::vkBindBufferMemory2KHR(
{
marshal_VkBindBufferMemoryInfo(stream, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
}
- AEMU_SCOPED_TRACE("vkBindBufferMemory2KHR readParams");
- AEMU_SCOPED_TRACE("vkBindBufferMemory2KHR returnUnmarshal");
VkResult vkBindBufferMemory2KHR_VkResult_return = (VkResult)0;
stream->read(&vkBindBufferMemory2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -18188,7 +17353,6 @@ VkResult VkEncoder::vkBindImageMemory2KHR(
const VkBindImageMemoryInfo* pBindInfos)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkBindImageMemory2KHR encode");
mImpl->log("start vkBindImageMemory2KHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18240,8 +17404,6 @@ VkResult VkEncoder::vkBindImageMemory2KHR(
{
marshal_VkBindImageMemoryInfo(stream, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
}
- AEMU_SCOPED_TRACE("vkBindImageMemory2KHR readParams");
- AEMU_SCOPED_TRACE("vkBindImageMemory2KHR returnUnmarshal");
VkResult vkBindImageMemory2KHR_VkResult_return = (VkResult)0;
stream->read(&vkBindImageMemory2KHR_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -18259,7 +17421,6 @@ void VkEncoder::vkGetDescriptorSetLayoutSupportKHR(
VkDescriptorSetLayoutSupport* pSupport)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupportKHR encode");
mImpl->log("start vkGetDescriptorSetLayoutSupportKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18297,13 +17458,11 @@ void VkEncoder::vkGetDescriptorSetLayoutSupportKHR(
stream->write((uint64_t*)&cgen_var_1169, 1 * 8);
marshal_VkDescriptorSetLayoutCreateInfo(stream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
marshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
- AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupportKHR readParams");
unmarshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
if (pSupport)
{
transform_fromhost_VkDescriptorSetLayoutSupport(mImpl->resources(), (VkDescriptorSetLayoutSupport*)(pSupport));
}
- AEMU_SCOPED_TRACE("vkGetDescriptorSetLayoutSupportKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -18322,7 +17481,6 @@ void VkEncoder::vkCmdDrawIndirectCountKHR(
uint32_t stride)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountKHR encode");
mImpl->log("start vkCmdDrawIndirectCountKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18377,8 +17535,6 @@ void VkEncoder::vkCmdDrawIndirectCountKHR(
stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountKHR readParams");
- AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -18395,7 +17551,6 @@ void VkEncoder::vkCmdDrawIndexedIndirectCountKHR(
uint32_t stride)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountKHR encode");
mImpl->log("start vkCmdDrawIndexedIndirectCountKHR");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18450,8 +17605,6 @@ void VkEncoder::vkCmdDrawIndexedIndirectCountKHR(
stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountKHR readParams");
- AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountKHR returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -18471,7 +17624,6 @@ VkResult VkEncoder::vkGetSwapchainGrallocUsageANDROID(
int* grallocUsage)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetSwapchainGrallocUsageANDROID encode");
mImpl->log("start vkGetSwapchainGrallocUsageANDROID");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18504,9 +17656,7 @@ VkResult VkEncoder::vkGetSwapchainGrallocUsageANDROID(
stream->write((VkFormat*)&local_format, sizeof(VkFormat));
stream->write((VkImageUsageFlags*)&local_imageUsage, sizeof(VkImageUsageFlags));
stream->write((int*)grallocUsage, sizeof(int));
- AEMU_SCOPED_TRACE("vkGetSwapchainGrallocUsageANDROID readParams");
stream->read((int*)grallocUsage, sizeof(int));
- AEMU_SCOPED_TRACE("vkGetSwapchainGrallocUsageANDROID returnUnmarshal");
VkResult vkGetSwapchainGrallocUsageANDROID_VkResult_return = (VkResult)0;
stream->read(&vkGetSwapchainGrallocUsageANDROID_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -18524,7 +17674,6 @@ VkResult VkEncoder::vkAcquireImageANDROID(
VkFence fence)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkAcquireImageANDROID encode");
mImpl->log("start vkAcquireImageANDROID");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18576,8 +17725,6 @@ VkResult VkEncoder::vkAcquireImageANDROID(
uint64_t cgen_var_1191;
stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_1191, 1);
stream->write((uint64_t*)&cgen_var_1191, 1 * 8);
- AEMU_SCOPED_TRACE("vkAcquireImageANDROID readParams");
- AEMU_SCOPED_TRACE("vkAcquireImageANDROID returnUnmarshal");
VkResult vkAcquireImageANDROID_VkResult_return = (VkResult)0;
stream->read(&vkAcquireImageANDROID_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -18595,7 +17742,6 @@ VkResult VkEncoder::vkQueueSignalReleaseImageANDROID(
int* pNativeFenceFd)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueSignalReleaseImageANDROID encode");
mImpl->log("start vkQueueSignalReleaseImageANDROID");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18664,9 +17810,7 @@ VkResult VkEncoder::vkQueueSignalReleaseImageANDROID(
stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_1199, 1);
stream->write((uint64_t*)&cgen_var_1199, 1 * 8);
stream->write((int*)pNativeFenceFd, sizeof(int));
- AEMU_SCOPED_TRACE("vkQueueSignalReleaseImageANDROID readParams");
stream->read((int*)pNativeFenceFd, sizeof(int));
- AEMU_SCOPED_TRACE("vkQueueSignalReleaseImageANDROID returnUnmarshal");
VkResult vkQueueSignalReleaseImageANDROID_VkResult_return = (VkResult)0;
stream->read(&vkQueueSignalReleaseImageANDROID_VkResult_return, sizeof(VkResult));
stream->flush();
@@ -18686,7 +17830,6 @@ VkResult VkEncoder::vkCreateDebugReportCallbackEXT(
VkDebugReportCallbackEXT* pCallback)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateDebugReportCallbackEXT encode");
mImpl->log("start vkCreateDebugReportCallbackEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18756,13 +17899,11 @@ VkResult VkEncoder::vkCreateDebugReportCallbackEXT(
stream->handleMapping()->mapHandles_VkDebugReportCallbackEXT_u64(pCallback, &cgen_var_1205, 1);
stream->write((uint64_t*)&cgen_var_1205, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateDebugReportCallbackEXT readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_1206;
stream->read((uint64_t*)&cgen_var_1206, 8);
stream->handleMapping()->mapHandles_u64_VkDebugReportCallbackEXT(&cgen_var_1206, (VkDebugReportCallbackEXT*)pCallback, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateDebugReportCallbackEXT returnUnmarshal");
VkResult vkCreateDebugReportCallbackEXT_VkResult_return = (VkResult)0;
stream->read(&vkCreateDebugReportCallbackEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -18778,7 +17919,6 @@ void VkEncoder::vkDestroyDebugReportCallbackEXT(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyDebugReportCallbackEXT encode");
mImpl->log("start vkDestroyDebugReportCallbackEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18835,8 +17975,6 @@ void VkEncoder::vkDestroyDebugReportCallbackEXT(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyDebugReportCallbackEXT readParams");
- AEMU_SCOPED_TRACE("vkDestroyDebugReportCallbackEXT returnUnmarshal");
resources->destroyMapping()->mapHandles_VkDebugReportCallbackEXT((VkDebugReportCallbackEXT*)&callback);
pool->freeAll();
countingStream->clearPool();
@@ -18855,7 +17993,6 @@ void VkEncoder::vkDebugReportMessageEXT(
const char* pMessage)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDebugReportMessageEXT encode");
mImpl->log("start vkDebugReportMessageEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18916,8 +18053,6 @@ void VkEncoder::vkDebugReportMessageEXT(
stream->write((int32_t*)&local_messageCode, sizeof(int32_t));
stream->putString(local_pLayerPrefix);
stream->putString(local_pMessage);
- AEMU_SCOPED_TRACE("vkDebugReportMessageEXT readParams");
- AEMU_SCOPED_TRACE("vkDebugReportMessageEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -18943,7 +18078,6 @@ VkResult VkEncoder::vkDebugMarkerSetObjectTagEXT(
const VkDebugMarkerObjectTagInfoEXT* pTagInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectTagEXT encode");
mImpl->log("start vkDebugMarkerSetObjectTagEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -18979,8 +18113,6 @@ VkResult VkEncoder::vkDebugMarkerSetObjectTagEXT(
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1218, 1);
stream->write((uint64_t*)&cgen_var_1218, 1 * 8);
marshal_VkDebugMarkerObjectTagInfoEXT(stream, (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo));
- AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectTagEXT readParams");
- AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectTagEXT returnUnmarshal");
VkResult vkDebugMarkerSetObjectTagEXT_VkResult_return = (VkResult)0;
stream->read(&vkDebugMarkerSetObjectTagEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -18995,7 +18127,6 @@ VkResult VkEncoder::vkDebugMarkerSetObjectNameEXT(
const VkDebugMarkerObjectNameInfoEXT* pNameInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectNameEXT encode");
mImpl->log("start vkDebugMarkerSetObjectNameEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19031,8 +18162,6 @@ VkResult VkEncoder::vkDebugMarkerSetObjectNameEXT(
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1220, 1);
stream->write((uint64_t*)&cgen_var_1220, 1 * 8);
marshal_VkDebugMarkerObjectNameInfoEXT(stream, (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo));
- AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectNameEXT readParams");
- AEMU_SCOPED_TRACE("vkDebugMarkerSetObjectNameEXT returnUnmarshal");
VkResult vkDebugMarkerSetObjectNameEXT_VkResult_return = (VkResult)0;
stream->read(&vkDebugMarkerSetObjectNameEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -19047,7 +18176,6 @@ void VkEncoder::vkCmdDebugMarkerBeginEXT(
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDebugMarkerBeginEXT encode");
mImpl->log("start vkCmdDebugMarkerBeginEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19083,8 +18211,6 @@ void VkEncoder::vkCmdDebugMarkerBeginEXT(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1222, 1);
stream->write((uint64_t*)&cgen_var_1222, 1 * 8);
marshal_VkDebugMarkerMarkerInfoEXT(stream, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
- AEMU_SCOPED_TRACE("vkCmdDebugMarkerBeginEXT readParams");
- AEMU_SCOPED_TRACE("vkCmdDebugMarkerBeginEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -19095,7 +18221,6 @@ void VkEncoder::vkCmdDebugMarkerEndEXT(
VkCommandBuffer commandBuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDebugMarkerEndEXT encode");
mImpl->log("start vkCmdDebugMarkerEndEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19118,8 +18243,6 @@ void VkEncoder::vkCmdDebugMarkerEndEXT(
uint64_t cgen_var_1224;
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1224, 1);
stream->write((uint64_t*)&cgen_var_1224, 1 * 8);
- AEMU_SCOPED_TRACE("vkCmdDebugMarkerEndEXT readParams");
- AEMU_SCOPED_TRACE("vkCmdDebugMarkerEndEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -19131,7 +18254,6 @@ void VkEncoder::vkCmdDebugMarkerInsertEXT(
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDebugMarkerInsertEXT encode");
mImpl->log("start vkCmdDebugMarkerInsertEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19167,8 +18289,6 @@ void VkEncoder::vkCmdDebugMarkerInsertEXT(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1226, 1);
stream->write((uint64_t*)&cgen_var_1226, 1 * 8);
marshal_VkDebugMarkerMarkerInfoEXT(stream, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
- AEMU_SCOPED_TRACE("vkCmdDebugMarkerInsertEXT readParams");
- AEMU_SCOPED_TRACE("vkCmdDebugMarkerInsertEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -19191,7 +18311,6 @@ void VkEncoder::vkCmdDrawIndirectCountAMD(
uint32_t stride)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountAMD encode");
mImpl->log("start vkCmdDrawIndirectCountAMD");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19246,8 +18365,6 @@ void VkEncoder::vkCmdDrawIndirectCountAMD(
stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountAMD readParams");
- AEMU_SCOPED_TRACE("vkCmdDrawIndirectCountAMD returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -19264,7 +18381,6 @@ void VkEncoder::vkCmdDrawIndexedIndirectCountAMD(
uint32_t stride)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountAMD encode");
mImpl->log("start vkCmdDrawIndexedIndirectCountAMD");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19319,8 +18435,6 @@ void VkEncoder::vkCmdDrawIndexedIndirectCountAMD(
stream->write((VkDeviceSize*)&local_countBufferOffset, sizeof(VkDeviceSize));
stream->write((uint32_t*)&local_maxDrawCount, sizeof(uint32_t));
stream->write((uint32_t*)&local_stride, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountAMD readParams");
- AEMU_SCOPED_TRACE("vkCmdDrawIndexedIndirectCountAMD returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -19346,7 +18460,6 @@ VkResult VkEncoder::vkGetShaderInfoAMD(
void* pInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetShaderInfoAMD encode");
mImpl->log("start vkGetShaderInfoAMD");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19415,7 +18528,6 @@ VkResult VkEncoder::vkGetShaderInfoAMD(
{
stream->write((void*)pInfo, (*(pInfoSize)) * sizeof(uint8_t));
}
- AEMU_SCOPED_TRACE("vkGetShaderInfoAMD readParams");
// WARNING PTR CHECK
size_t* check_pInfoSize;
check_pInfoSize = (size_t*)(uintptr_t)stream->getBe64();
@@ -19438,7 +18550,6 @@ VkResult VkEncoder::vkGetShaderInfoAMD(
}
stream->read((void*)pInfo, (*(pInfoSize)) * sizeof(uint8_t));
}
- AEMU_SCOPED_TRACE("vkGetShaderInfoAMD returnUnmarshal");
VkResult vkGetShaderInfoAMD_VkResult_return = (VkResult)0;
stream->read(&vkGetShaderInfoAMD_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -19465,7 +18576,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalImageFormatPropertiesNV encode");
mImpl->log("start vkGetPhysicalDeviceExternalImageFormatPropertiesNV");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19514,13 +18624,11 @@ VkResult VkEncoder::vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
stream->write((VkImageCreateFlags*)&local_flags, sizeof(VkImageCreateFlags));
stream->write((VkExternalMemoryHandleTypeFlagsNV*)&local_externalHandleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
marshal_VkExternalImageFormatPropertiesNV(stream, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalImageFormatPropertiesNV readParams");
unmarshal_VkExternalImageFormatPropertiesNV(stream, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
if (pExternalImageFormatProperties)
{
transform_fromhost_VkExternalImageFormatPropertiesNV(mImpl->resources(), (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceExternalImageFormatPropertiesNV returnUnmarshal");
VkResult vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -19541,7 +18649,6 @@ VkResult VkEncoder::vkGetMemoryWin32HandleNV(
HANDLE* pHandle)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleNV encode");
mImpl->log("start vkGetMemoryWin32HandleNV");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19579,9 +18686,7 @@ VkResult VkEncoder::vkGetMemoryWin32HandleNV(
stream->write((uint64_t*)&cgen_var_1257, 1 * 8);
stream->write((VkExternalMemoryHandleTypeFlagsNV*)&local_handleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
stream->write((HANDLE*)pHandle, sizeof(HANDLE));
- AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleNV readParams");
stream->read((HANDLE*)pHandle, sizeof(HANDLE));
- AEMU_SCOPED_TRACE("vkGetMemoryWin32HandleNV returnUnmarshal");
VkResult vkGetMemoryWin32HandleNV_VkResult_return = (VkResult)0;
stream->read(&vkGetMemoryWin32HandleNV_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -19604,7 +18709,6 @@ VkResult VkEncoder::vkCreateViSurfaceNN(
VkSurfaceKHR* pSurface)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateViSurfaceNN encode");
mImpl->log("start vkCreateViSurfaceNN");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19674,11 +18778,9 @@ VkResult VkEncoder::vkCreateViSurfaceNN(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_1263, 1);
stream->write((uint64_t*)&cgen_var_1263, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateViSurfaceNN readParams");
uint64_t cgen_var_1264;
stream->read((uint64_t*)&cgen_var_1264, 8);
stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_1264, (VkSurfaceKHR*)pSurface, 1);
- AEMU_SCOPED_TRACE("vkCreateViSurfaceNN returnUnmarshal");
VkResult vkCreateViSurfaceNN_VkResult_return = (VkResult)0;
stream->read(&vkCreateViSurfaceNN_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -19699,7 +18801,6 @@ void VkEncoder::vkCmdBeginConditionalRenderingEXT(
const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdBeginConditionalRenderingEXT encode");
mImpl->log("start vkCmdBeginConditionalRenderingEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19735,8 +18836,6 @@ void VkEncoder::vkCmdBeginConditionalRenderingEXT(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1266, 1);
stream->write((uint64_t*)&cgen_var_1266, 1 * 8);
marshal_VkConditionalRenderingBeginInfoEXT(stream, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin));
- AEMU_SCOPED_TRACE("vkCmdBeginConditionalRenderingEXT readParams");
- AEMU_SCOPED_TRACE("vkCmdBeginConditionalRenderingEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -19747,7 +18846,6 @@ void VkEncoder::vkCmdEndConditionalRenderingEXT(
VkCommandBuffer commandBuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdEndConditionalRenderingEXT encode");
mImpl->log("start vkCmdEndConditionalRenderingEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19770,8 +18868,6 @@ void VkEncoder::vkCmdEndConditionalRenderingEXT(
uint64_t cgen_var_1268;
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1268, 1);
stream->write((uint64_t*)&cgen_var_1268, 1 * 8);
- AEMU_SCOPED_TRACE("vkCmdEndConditionalRenderingEXT readParams");
- AEMU_SCOPED_TRACE("vkCmdEndConditionalRenderingEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -19785,7 +18881,6 @@ void VkEncoder::vkCmdProcessCommandsNVX(
const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdProcessCommandsNVX encode");
mImpl->log("start vkCmdProcessCommandsNVX");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19821,8 +18916,6 @@ void VkEncoder::vkCmdProcessCommandsNVX(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1270, 1);
stream->write((uint64_t*)&cgen_var_1270, 1 * 8);
marshal_VkCmdProcessCommandsInfoNVX(stream, (VkCmdProcessCommandsInfoNVX*)(local_pProcessCommandsInfo));
- AEMU_SCOPED_TRACE("vkCmdProcessCommandsNVX readParams");
- AEMU_SCOPED_TRACE("vkCmdProcessCommandsNVX returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -19834,7 +18927,6 @@ void VkEncoder::vkCmdReserveSpaceForCommandsNVX(
const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdReserveSpaceForCommandsNVX encode");
mImpl->log("start vkCmdReserveSpaceForCommandsNVX");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19870,8 +18962,6 @@ void VkEncoder::vkCmdReserveSpaceForCommandsNVX(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1272, 1);
stream->write((uint64_t*)&cgen_var_1272, 1 * 8);
marshal_VkCmdReserveSpaceForCommandsInfoNVX(stream, (VkCmdReserveSpaceForCommandsInfoNVX*)(local_pReserveSpaceInfo));
- AEMU_SCOPED_TRACE("vkCmdReserveSpaceForCommandsNVX readParams");
- AEMU_SCOPED_TRACE("vkCmdReserveSpaceForCommandsNVX returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -19885,7 +18975,6 @@ VkResult VkEncoder::vkCreateIndirectCommandsLayoutNVX(
VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateIndirectCommandsLayoutNVX encode");
mImpl->log("start vkCreateIndirectCommandsLayoutNVX");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -19955,13 +19044,11 @@ VkResult VkEncoder::vkCreateIndirectCommandsLayoutNVX(
stream->handleMapping()->mapHandles_VkIndirectCommandsLayoutNVX_u64(pIndirectCommandsLayout, &cgen_var_1278, 1);
stream->write((uint64_t*)&cgen_var_1278, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateIndirectCommandsLayoutNVX readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_1279;
stream->read((uint64_t*)&cgen_var_1279, 8);
stream->handleMapping()->mapHandles_u64_VkIndirectCommandsLayoutNVX(&cgen_var_1279, (VkIndirectCommandsLayoutNVX*)pIndirectCommandsLayout, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateIndirectCommandsLayoutNVX returnUnmarshal");
VkResult vkCreateIndirectCommandsLayoutNVX_VkResult_return = (VkResult)0;
stream->read(&vkCreateIndirectCommandsLayoutNVX_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -19977,7 +19064,6 @@ void VkEncoder::vkDestroyIndirectCommandsLayoutNVX(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyIndirectCommandsLayoutNVX encode");
mImpl->log("start vkDestroyIndirectCommandsLayoutNVX");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20034,8 +19120,6 @@ void VkEncoder::vkDestroyIndirectCommandsLayoutNVX(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyIndirectCommandsLayoutNVX readParams");
- AEMU_SCOPED_TRACE("vkDestroyIndirectCommandsLayoutNVX returnUnmarshal");
resources->destroyMapping()->mapHandles_VkIndirectCommandsLayoutNVX((VkIndirectCommandsLayoutNVX*)&indirectCommandsLayout);
pool->freeAll();
countingStream->clearPool();
@@ -20050,7 +19134,6 @@ VkResult VkEncoder::vkCreateObjectTableNVX(
VkObjectTableNVX* pObjectTable)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateObjectTableNVX encode");
mImpl->log("start vkCreateObjectTableNVX");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20120,13 +19203,11 @@ VkResult VkEncoder::vkCreateObjectTableNVX(
stream->handleMapping()->mapHandles_VkObjectTableNVX_u64(pObjectTable, &cgen_var_1291, 1);
stream->write((uint64_t*)&cgen_var_1291, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateObjectTableNVX readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_1292;
stream->read((uint64_t*)&cgen_var_1292, 8);
stream->handleMapping()->mapHandles_u64_VkObjectTableNVX(&cgen_var_1292, (VkObjectTableNVX*)pObjectTable, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateObjectTableNVX returnUnmarshal");
VkResult vkCreateObjectTableNVX_VkResult_return = (VkResult)0;
stream->read(&vkCreateObjectTableNVX_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -20142,7 +19223,6 @@ void VkEncoder::vkDestroyObjectTableNVX(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyObjectTableNVX encode");
mImpl->log("start vkDestroyObjectTableNVX");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20199,8 +19279,6 @@ void VkEncoder::vkDestroyObjectTableNVX(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyObjectTableNVX readParams");
- AEMU_SCOPED_TRACE("vkDestroyObjectTableNVX returnUnmarshal");
resources->destroyMapping()->mapHandles_VkObjectTableNVX((VkObjectTableNVX*)&objectTable);
pool->freeAll();
countingStream->clearPool();
@@ -20216,7 +19294,6 @@ VkResult VkEncoder::vkRegisterObjectsNVX(
const uint32_t* pObjectIndices)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkRegisterObjectsNVX encode");
mImpl->log("start vkRegisterObjectsNVX");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20264,8 +19341,6 @@ VkResult VkEncoder::vkRegisterObjectsNVX(
stream->write((uint32_t*)&local_objectCount, sizeof(uint32_t));
(void)local_ppObjectTableEntries;
stream->write((uint32_t*)local_pObjectIndices, ((objectCount)) * sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkRegisterObjectsNVX readParams");
- AEMU_SCOPED_TRACE("vkRegisterObjectsNVX returnUnmarshal");
VkResult vkRegisterObjectsNVX_VkResult_return = (VkResult)0;
stream->read(&vkRegisterObjectsNVX_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -20283,7 +19358,6 @@ VkResult VkEncoder::vkUnregisterObjectsNVX(
const uint32_t* pObjectIndices)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkUnregisterObjectsNVX encode");
mImpl->log("start vkUnregisterObjectsNVX");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20334,8 +19408,6 @@ VkResult VkEncoder::vkUnregisterObjectsNVX(
stream->write((uint32_t*)&local_objectCount, sizeof(uint32_t));
stream->write((VkObjectEntryTypeNVX*)local_pObjectEntryTypes, ((objectCount)) * sizeof(VkObjectEntryTypeNVX));
stream->write((uint32_t*)local_pObjectIndices, ((objectCount)) * sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkUnregisterObjectsNVX readParams");
- AEMU_SCOPED_TRACE("vkUnregisterObjectsNVX returnUnmarshal");
VkResult vkUnregisterObjectsNVX_VkResult_return = (VkResult)0;
stream->read(&vkUnregisterObjectsNVX_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -20351,7 +19423,6 @@ void VkEncoder::vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
VkDeviceGeneratedCommandsLimitsNVX* pLimits)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX encode");
mImpl->log("start vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20378,7 +19449,6 @@ void VkEncoder::vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
stream->write((uint64_t*)&cgen_var_1308, 1 * 8);
marshal_VkDeviceGeneratedCommandsFeaturesNVX(stream, (VkDeviceGeneratedCommandsFeaturesNVX*)(pFeatures));
marshal_VkDeviceGeneratedCommandsLimitsNVX(stream, (VkDeviceGeneratedCommandsLimitsNVX*)(pLimits));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX readParams");
unmarshal_VkDeviceGeneratedCommandsFeaturesNVX(stream, (VkDeviceGeneratedCommandsFeaturesNVX*)(pFeatures));
if (pFeatures)
{
@@ -20389,7 +19459,6 @@ void VkEncoder::vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
{
transform_fromhost_VkDeviceGeneratedCommandsLimitsNVX(mImpl->resources(), (VkDeviceGeneratedCommandsLimitsNVX*)(pLimits));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -20405,7 +19474,6 @@ void VkEncoder::vkCmdSetViewportWScalingNV(
const VkViewportWScalingNV* pViewportWScalings)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetViewportWScalingNV encode");
mImpl->log("start vkCmdSetViewportWScalingNV");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20461,8 +19529,6 @@ void VkEncoder::vkCmdSetViewportWScalingNV(
{
marshal_VkViewportWScalingNV(stream, (VkViewportWScalingNV*)(local_pViewportWScalings + i));
}
- AEMU_SCOPED_TRACE("vkCmdSetViewportWScalingNV readParams");
- AEMU_SCOPED_TRACE("vkCmdSetViewportWScalingNV returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -20476,7 +19542,6 @@ VkResult VkEncoder::vkReleaseDisplayEXT(
VkDisplayKHR display)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkReleaseDisplayEXT encode");
mImpl->log("start vkReleaseDisplayEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20507,8 +19572,6 @@ VkResult VkEncoder::vkReleaseDisplayEXT(
uint64_t cgen_var_1314;
stream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1314, 1);
stream->write((uint64_t*)&cgen_var_1314, 1 * 8);
- AEMU_SCOPED_TRACE("vkReleaseDisplayEXT readParams");
- AEMU_SCOPED_TRACE("vkReleaseDisplayEXT returnUnmarshal");
VkResult vkReleaseDisplayEXT_VkResult_return = (VkResult)0;
stream->read(&vkReleaseDisplayEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -20526,7 +19589,6 @@ VkResult VkEncoder::vkAcquireXlibDisplayEXT(
VkDisplayKHR display)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkAcquireXlibDisplayEXT encode");
mImpl->log("start vkAcquireXlibDisplayEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20559,9 +19621,7 @@ VkResult VkEncoder::vkAcquireXlibDisplayEXT(
uint64_t cgen_var_1318;
stream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1318, 1);
stream->write((uint64_t*)&cgen_var_1318, 1 * 8);
- AEMU_SCOPED_TRACE("vkAcquireXlibDisplayEXT readParams");
stream->read((Display*)dpy, sizeof(Display));
- AEMU_SCOPED_TRACE("vkAcquireXlibDisplayEXT returnUnmarshal");
VkResult vkAcquireXlibDisplayEXT_VkResult_return = (VkResult)0;
stream->read(&vkAcquireXlibDisplayEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -20578,7 +19638,6 @@ VkResult VkEncoder::vkGetRandROutputDisplayEXT(
VkDisplayKHR* pDisplay)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetRandROutputDisplayEXT encode");
mImpl->log("start vkGetRandROutputDisplayEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20615,12 +19674,10 @@ VkResult VkEncoder::vkGetRandROutputDisplayEXT(
stream->handleMapping()->mapHandles_VkDisplayKHR_u64(pDisplay, &cgen_var_1322, 1);
stream->write((uint64_t*)&cgen_var_1322, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkGetRandROutputDisplayEXT readParams");
stream->read((Display*)dpy, sizeof(Display));
uint64_t cgen_var_1323;
stream->read((uint64_t*)&cgen_var_1323, 8);
stream->handleMapping()->mapHandles_u64_VkDisplayKHR(&cgen_var_1323, (VkDisplayKHR*)pDisplay, 1);
- AEMU_SCOPED_TRACE("vkGetRandROutputDisplayEXT returnUnmarshal");
VkResult vkGetRandROutputDisplayEXT_VkResult_return = (VkResult)0;
stream->read(&vkGetRandROutputDisplayEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -20638,7 +19695,6 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceCapabilities2EXT(
VkSurfaceCapabilities2EXT* pSurfaceCapabilities)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2EXT encode");
mImpl->log("start vkGetPhysicalDeviceSurfaceCapabilities2EXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20671,13 +19727,11 @@ VkResult VkEncoder::vkGetPhysicalDeviceSurfaceCapabilities2EXT(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&local_surface, &cgen_var_1327, 1);
stream->write((uint64_t*)&cgen_var_1327, 1 * 8);
marshal_VkSurfaceCapabilities2EXT(stream, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2EXT readParams");
unmarshal_VkSurfaceCapabilities2EXT(stream, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
if (pSurfaceCapabilities)
{
transform_fromhost_VkSurfaceCapabilities2EXT(mImpl->resources(), (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceSurfaceCapabilities2EXT returnUnmarshal");
VkResult vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return = (VkResult)0;
stream->read(&vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -20695,7 +19749,6 @@ VkResult VkEncoder::vkDisplayPowerControlEXT(
const VkDisplayPowerInfoEXT* pDisplayPowerInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDisplayPowerControlEXT encode");
mImpl->log("start vkDisplayPowerControlEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20739,8 +19792,6 @@ VkResult VkEncoder::vkDisplayPowerControlEXT(
stream->handleMapping()->mapHandles_VkDisplayKHR_u64(&local_display, &cgen_var_1331, 1);
stream->write((uint64_t*)&cgen_var_1331, 1 * 8);
marshal_VkDisplayPowerInfoEXT(stream, (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo));
- AEMU_SCOPED_TRACE("vkDisplayPowerControlEXT readParams");
- AEMU_SCOPED_TRACE("vkDisplayPowerControlEXT returnUnmarshal");
VkResult vkDisplayPowerControlEXT_VkResult_return = (VkResult)0;
stream->read(&vkDisplayPowerControlEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -20757,7 +19808,6 @@ VkResult VkEncoder::vkRegisterDeviceEventEXT(
VkFence* pFence)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkRegisterDeviceEventEXT encode");
mImpl->log("start vkRegisterDeviceEventEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20827,11 +19877,9 @@ VkResult VkEncoder::vkRegisterDeviceEventEXT(
stream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_1337, 1);
stream->write((uint64_t*)&cgen_var_1337, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkRegisterDeviceEventEXT readParams");
uint64_t cgen_var_1338;
stream->read((uint64_t*)&cgen_var_1338, 8);
stream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_1338, (VkFence*)pFence, 1);
- AEMU_SCOPED_TRACE("vkRegisterDeviceEventEXT returnUnmarshal");
VkResult vkRegisterDeviceEventEXT_VkResult_return = (VkResult)0;
stream->read(&vkRegisterDeviceEventEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -20849,7 +19897,6 @@ VkResult VkEncoder::vkRegisterDisplayEventEXT(
VkFence* pFence)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkRegisterDisplayEventEXT encode");
mImpl->log("start vkRegisterDisplayEventEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20927,11 +19974,9 @@ VkResult VkEncoder::vkRegisterDisplayEventEXT(
stream->handleMapping()->mapHandles_VkFence_u64(pFence, &cgen_var_1346, 1);
stream->write((uint64_t*)&cgen_var_1346, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkRegisterDisplayEventEXT readParams");
uint64_t cgen_var_1347;
stream->read((uint64_t*)&cgen_var_1347, 8);
stream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_1347, (VkFence*)pFence, 1);
- AEMU_SCOPED_TRACE("vkRegisterDisplayEventEXT returnUnmarshal");
VkResult vkRegisterDisplayEventEXT_VkResult_return = (VkResult)0;
stream->read(&vkRegisterDisplayEventEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -20948,7 +19993,6 @@ VkResult VkEncoder::vkGetSwapchainCounterEXT(
uint64_t* pCounterValue)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetSwapchainCounterEXT encode");
mImpl->log("start vkGetSwapchainCounterEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -20985,9 +20029,7 @@ VkResult VkEncoder::vkGetSwapchainCounterEXT(
stream->write((uint64_t*)&cgen_var_1351, 1 * 8);
stream->write((VkSurfaceCounterFlagBitsEXT*)&local_counter, sizeof(VkSurfaceCounterFlagBitsEXT));
stream->write((uint64_t*)pCounterValue, sizeof(uint64_t));
- AEMU_SCOPED_TRACE("vkGetSwapchainCounterEXT readParams");
stream->read((uint64_t*)pCounterValue, sizeof(uint64_t));
- AEMU_SCOPED_TRACE("vkGetSwapchainCounterEXT returnUnmarshal");
VkResult vkGetSwapchainCounterEXT_VkResult_return = (VkResult)0;
stream->read(&vkGetSwapchainCounterEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -21005,7 +20047,6 @@ VkResult VkEncoder::vkGetRefreshCycleDurationGOOGLE(
VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetRefreshCycleDurationGOOGLE encode");
mImpl->log("start vkGetRefreshCycleDurationGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21038,13 +20079,11 @@ VkResult VkEncoder::vkGetRefreshCycleDurationGOOGLE(
stream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&local_swapchain, &cgen_var_1355, 1);
stream->write((uint64_t*)&cgen_var_1355, 1 * 8);
marshal_VkRefreshCycleDurationGOOGLE(stream, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
- AEMU_SCOPED_TRACE("vkGetRefreshCycleDurationGOOGLE readParams");
unmarshal_VkRefreshCycleDurationGOOGLE(stream, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
if (pDisplayTimingProperties)
{
transform_fromhost_VkRefreshCycleDurationGOOGLE(mImpl->resources(), (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
}
- AEMU_SCOPED_TRACE("vkGetRefreshCycleDurationGOOGLE returnUnmarshal");
VkResult vkGetRefreshCycleDurationGOOGLE_VkResult_return = (VkResult)0;
stream->read(&vkGetRefreshCycleDurationGOOGLE_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -21061,7 +20100,6 @@ VkResult VkEncoder::vkGetPastPresentationTimingGOOGLE(
VkPastPresentationTimingGOOGLE* pPresentationTimings)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPastPresentationTimingGOOGLE encode");
mImpl->log("start vkGetPastPresentationTimingGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21126,7 +20164,6 @@ VkResult VkEncoder::vkGetPastPresentationTimingGOOGLE(
marshal_VkPastPresentationTimingGOOGLE(stream, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPastPresentationTimingGOOGLE readParams");
// WARNING PTR CHECK
uint32_t* check_pPresentationTimingCount;
check_pPresentationTimingCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -21159,7 +20196,6 @@ VkResult VkEncoder::vkGetPastPresentationTimingGOOGLE(
transform_fromhost_VkPastPresentationTimingGOOGLE(mImpl->resources(), (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
}
}
- AEMU_SCOPED_TRACE("vkGetPastPresentationTimingGOOGLE returnUnmarshal");
VkResult vkGetPastPresentationTimingGOOGLE_VkResult_return = (VkResult)0;
stream->read(&vkGetPastPresentationTimingGOOGLE_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -21188,7 +20224,6 @@ void VkEncoder::vkCmdSetDiscardRectangleEXT(
const VkRect2D* pDiscardRectangles)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetDiscardRectangleEXT encode");
mImpl->log("start vkCmdSetDiscardRectangleEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21244,8 +20279,6 @@ void VkEncoder::vkCmdSetDiscardRectangleEXT(
{
marshal_VkRect2D(stream, (VkRect2D*)(local_pDiscardRectangles + i));
}
- AEMU_SCOPED_TRACE("vkCmdSetDiscardRectangleEXT readParams");
- AEMU_SCOPED_TRACE("vkCmdSetDiscardRectangleEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -21265,7 +20298,6 @@ void VkEncoder::vkSetHdrMetadataEXT(
const VkHdrMetadataEXT* pMetadata)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkSetHdrMetadataEXT encode");
mImpl->log("start vkSetHdrMetadataEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21337,8 +20369,6 @@ void VkEncoder::vkSetHdrMetadataEXT(
{
marshal_VkHdrMetadataEXT(stream, (VkHdrMetadataEXT*)(local_pMetadata + i));
}
- AEMU_SCOPED_TRACE("vkSetHdrMetadataEXT readParams");
- AEMU_SCOPED_TRACE("vkSetHdrMetadataEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -21354,7 +20384,6 @@ VkResult VkEncoder::vkCreateIOSSurfaceMVK(
VkSurfaceKHR* pSurface)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateIOSSurfaceMVK encode");
mImpl->log("start vkCreateIOSSurfaceMVK");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21424,11 +20453,9 @@ VkResult VkEncoder::vkCreateIOSSurfaceMVK(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_1377, 1);
stream->write((uint64_t*)&cgen_var_1377, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateIOSSurfaceMVK readParams");
uint64_t cgen_var_1378;
stream->read((uint64_t*)&cgen_var_1378, 8);
stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_1378, (VkSurfaceKHR*)pSurface, 1);
- AEMU_SCOPED_TRACE("vkCreateIOSSurfaceMVK returnUnmarshal");
VkResult vkCreateIOSSurfaceMVK_VkResult_return = (VkResult)0;
stream->read(&vkCreateIOSSurfaceMVK_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -21447,7 +20474,6 @@ VkResult VkEncoder::vkCreateMacOSSurfaceMVK(
VkSurfaceKHR* pSurface)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateMacOSSurfaceMVK encode");
mImpl->log("start vkCreateMacOSSurfaceMVK");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21517,11 +20543,9 @@ VkResult VkEncoder::vkCreateMacOSSurfaceMVK(
stream->handleMapping()->mapHandles_VkSurfaceKHR_u64(pSurface, &cgen_var_1384, 1);
stream->write((uint64_t*)&cgen_var_1384, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateMacOSSurfaceMVK readParams");
uint64_t cgen_var_1385;
stream->read((uint64_t*)&cgen_var_1385, 8);
stream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_1385, (VkSurfaceKHR*)pSurface, 1);
- AEMU_SCOPED_TRACE("vkCreateMacOSSurfaceMVK returnUnmarshal");
VkResult vkCreateMacOSSurfaceMVK_VkResult_return = (VkResult)0;
stream->read(&vkCreateMacOSSurfaceMVK_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -21542,7 +20566,6 @@ VkResult VkEncoder::vkSetDebugUtilsObjectNameEXT(
const VkDebugUtilsObjectNameInfoEXT* pNameInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectNameEXT encode");
mImpl->log("start vkSetDebugUtilsObjectNameEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21578,8 +20601,6 @@ VkResult VkEncoder::vkSetDebugUtilsObjectNameEXT(
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1387, 1);
stream->write((uint64_t*)&cgen_var_1387, 1 * 8);
marshal_VkDebugUtilsObjectNameInfoEXT(stream, (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo));
- AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectNameEXT readParams");
- AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectNameEXT returnUnmarshal");
VkResult vkSetDebugUtilsObjectNameEXT_VkResult_return = (VkResult)0;
stream->read(&vkSetDebugUtilsObjectNameEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -21594,7 +20615,6 @@ VkResult VkEncoder::vkSetDebugUtilsObjectTagEXT(
const VkDebugUtilsObjectTagInfoEXT* pTagInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectTagEXT encode");
mImpl->log("start vkSetDebugUtilsObjectTagEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21630,8 +20650,6 @@ VkResult VkEncoder::vkSetDebugUtilsObjectTagEXT(
stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1389, 1);
stream->write((uint64_t*)&cgen_var_1389, 1 * 8);
marshal_VkDebugUtilsObjectTagInfoEXT(stream, (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo));
- AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectTagEXT readParams");
- AEMU_SCOPED_TRACE("vkSetDebugUtilsObjectTagEXT returnUnmarshal");
VkResult vkSetDebugUtilsObjectTagEXT_VkResult_return = (VkResult)0;
stream->read(&vkSetDebugUtilsObjectTagEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -21646,7 +20664,6 @@ void VkEncoder::vkQueueBeginDebugUtilsLabelEXT(
const VkDebugUtilsLabelEXT* pLabelInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueBeginDebugUtilsLabelEXT encode");
mImpl->log("start vkQueueBeginDebugUtilsLabelEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21682,8 +20699,6 @@ void VkEncoder::vkQueueBeginDebugUtilsLabelEXT(
stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1391, 1);
stream->write((uint64_t*)&cgen_var_1391, 1 * 8);
marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
- AEMU_SCOPED_TRACE("vkQueueBeginDebugUtilsLabelEXT readParams");
- AEMU_SCOPED_TRACE("vkQueueBeginDebugUtilsLabelEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -21694,7 +20709,6 @@ void VkEncoder::vkQueueEndDebugUtilsLabelEXT(
VkQueue queue)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueEndDebugUtilsLabelEXT encode");
mImpl->log("start vkQueueEndDebugUtilsLabelEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21717,8 +20731,6 @@ void VkEncoder::vkQueueEndDebugUtilsLabelEXT(
uint64_t cgen_var_1393;
stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1393, 1);
stream->write((uint64_t*)&cgen_var_1393, 1 * 8);
- AEMU_SCOPED_TRACE("vkQueueEndDebugUtilsLabelEXT readParams");
- AEMU_SCOPED_TRACE("vkQueueEndDebugUtilsLabelEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -21730,7 +20742,6 @@ void VkEncoder::vkQueueInsertDebugUtilsLabelEXT(
const VkDebugUtilsLabelEXT* pLabelInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueInsertDebugUtilsLabelEXT encode");
mImpl->log("start vkQueueInsertDebugUtilsLabelEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21766,8 +20777,6 @@ void VkEncoder::vkQueueInsertDebugUtilsLabelEXT(
stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1395, 1);
stream->write((uint64_t*)&cgen_var_1395, 1 * 8);
marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
- AEMU_SCOPED_TRACE("vkQueueInsertDebugUtilsLabelEXT readParams");
- AEMU_SCOPED_TRACE("vkQueueInsertDebugUtilsLabelEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -21779,7 +20788,6 @@ void VkEncoder::vkCmdBeginDebugUtilsLabelEXT(
const VkDebugUtilsLabelEXT* pLabelInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdBeginDebugUtilsLabelEXT encode");
mImpl->log("start vkCmdBeginDebugUtilsLabelEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21815,8 +20823,6 @@ void VkEncoder::vkCmdBeginDebugUtilsLabelEXT(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1397, 1);
stream->write((uint64_t*)&cgen_var_1397, 1 * 8);
marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
- AEMU_SCOPED_TRACE("vkCmdBeginDebugUtilsLabelEXT readParams");
- AEMU_SCOPED_TRACE("vkCmdBeginDebugUtilsLabelEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -21827,7 +20833,6 @@ void VkEncoder::vkCmdEndDebugUtilsLabelEXT(
VkCommandBuffer commandBuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdEndDebugUtilsLabelEXT encode");
mImpl->log("start vkCmdEndDebugUtilsLabelEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21850,8 +20855,6 @@ void VkEncoder::vkCmdEndDebugUtilsLabelEXT(
uint64_t cgen_var_1399;
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1399, 1);
stream->write((uint64_t*)&cgen_var_1399, 1 * 8);
- AEMU_SCOPED_TRACE("vkCmdEndDebugUtilsLabelEXT readParams");
- AEMU_SCOPED_TRACE("vkCmdEndDebugUtilsLabelEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -21863,7 +20866,6 @@ void VkEncoder::vkCmdInsertDebugUtilsLabelEXT(
const VkDebugUtilsLabelEXT* pLabelInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdInsertDebugUtilsLabelEXT encode");
mImpl->log("start vkCmdInsertDebugUtilsLabelEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21899,8 +20901,6 @@ void VkEncoder::vkCmdInsertDebugUtilsLabelEXT(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1401, 1);
stream->write((uint64_t*)&cgen_var_1401, 1 * 8);
marshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
- AEMU_SCOPED_TRACE("vkCmdInsertDebugUtilsLabelEXT readParams");
- AEMU_SCOPED_TRACE("vkCmdInsertDebugUtilsLabelEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -21914,7 +20914,6 @@ VkResult VkEncoder::vkCreateDebugUtilsMessengerEXT(
VkDebugUtilsMessengerEXT* pMessenger)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateDebugUtilsMessengerEXT encode");
mImpl->log("start vkCreateDebugUtilsMessengerEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -21984,13 +20983,11 @@ VkResult VkEncoder::vkCreateDebugUtilsMessengerEXT(
stream->handleMapping()->mapHandles_VkDebugUtilsMessengerEXT_u64(pMessenger, &cgen_var_1407, 1);
stream->write((uint64_t*)&cgen_var_1407, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateDebugUtilsMessengerEXT readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_1408;
stream->read((uint64_t*)&cgen_var_1408, 8);
stream->handleMapping()->mapHandles_u64_VkDebugUtilsMessengerEXT(&cgen_var_1408, (VkDebugUtilsMessengerEXT*)pMessenger, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateDebugUtilsMessengerEXT returnUnmarshal");
VkResult vkCreateDebugUtilsMessengerEXT_VkResult_return = (VkResult)0;
stream->read(&vkCreateDebugUtilsMessengerEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -22006,7 +21003,6 @@ void VkEncoder::vkDestroyDebugUtilsMessengerEXT(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyDebugUtilsMessengerEXT encode");
mImpl->log("start vkDestroyDebugUtilsMessengerEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22063,8 +21059,6 @@ void VkEncoder::vkDestroyDebugUtilsMessengerEXT(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyDebugUtilsMessengerEXT readParams");
- AEMU_SCOPED_TRACE("vkDestroyDebugUtilsMessengerEXT returnUnmarshal");
resources->destroyMapping()->mapHandles_VkDebugUtilsMessengerEXT((VkDebugUtilsMessengerEXT*)&messenger);
pool->freeAll();
countingStream->clearPool();
@@ -22079,7 +21073,6 @@ void VkEncoder::vkSubmitDebugUtilsMessageEXT(
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkSubmitDebugUtilsMessageEXT encode");
mImpl->log("start vkSubmitDebugUtilsMessageEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22123,8 +21116,6 @@ void VkEncoder::vkSubmitDebugUtilsMessageEXT(
stream->write((VkDebugUtilsMessageSeverityFlagBitsEXT*)&local_messageSeverity, sizeof(VkDebugUtilsMessageSeverityFlagBitsEXT));
stream->write((VkDebugUtilsMessageTypeFlagsEXT*)&local_messageTypes, sizeof(VkDebugUtilsMessageTypeFlagsEXT));
marshal_VkDebugUtilsMessengerCallbackDataEXT(stream, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData));
- AEMU_SCOPED_TRACE("vkSubmitDebugUtilsMessageEXT readParams");
- AEMU_SCOPED_TRACE("vkSubmitDebugUtilsMessageEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -22139,7 +21130,6 @@ VkResult VkEncoder::vkGetAndroidHardwareBufferPropertiesANDROID(
VkAndroidHardwareBufferPropertiesANDROID* pProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetAndroidHardwareBufferPropertiesANDROID encode");
mImpl->log("start vkGetAndroidHardwareBufferPropertiesANDROID");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22172,13 +21162,11 @@ VkResult VkEncoder::vkGetAndroidHardwareBufferPropertiesANDROID(
stream->write((uint64_t*)&cgen_var_1418, 1 * 8);
stream->write((AHardwareBuffer*)local_buffer, sizeof(AHardwareBuffer));
marshal_VkAndroidHardwareBufferPropertiesANDROID(stream, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
- AEMU_SCOPED_TRACE("vkGetAndroidHardwareBufferPropertiesANDROID readParams");
unmarshal_VkAndroidHardwareBufferPropertiesANDROID(stream, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
if (pProperties)
{
transform_fromhost_VkAndroidHardwareBufferPropertiesANDROID(mImpl->resources(), (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
}
- AEMU_SCOPED_TRACE("vkGetAndroidHardwareBufferPropertiesANDROID returnUnmarshal");
VkResult vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = (VkResult)0;
stream->read(&vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -22194,7 +21182,6 @@ VkResult VkEncoder::vkGetMemoryAndroidHardwareBufferANDROID(
AHardwareBuffer** pBuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetMemoryAndroidHardwareBufferANDROID encode");
mImpl->log("start vkGetMemoryAndroidHardwareBufferANDROID");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22232,9 +21219,7 @@ VkResult VkEncoder::vkGetMemoryAndroidHardwareBufferANDROID(
stream->write((uint64_t*)&cgen_var_1420, 1 * 8);
marshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(stream, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo));
stream->write((AHardwareBuffer**)pBuffer, sizeof(AHardwareBuffer*));
- AEMU_SCOPED_TRACE("vkGetMemoryAndroidHardwareBufferANDROID readParams");
stream->read((AHardwareBuffer**)pBuffer, sizeof(AHardwareBuffer*));
- AEMU_SCOPED_TRACE("vkGetMemoryAndroidHardwareBufferANDROID returnUnmarshal");
VkResult vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return = (VkResult)0;
stream->read(&vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -22261,7 +21246,6 @@ void VkEncoder::vkCmdSetSampleLocationsEXT(
const VkSampleLocationsInfoEXT* pSampleLocationsInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetSampleLocationsEXT encode");
mImpl->log("start vkCmdSetSampleLocationsEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22297,8 +21281,6 @@ void VkEncoder::vkCmdSetSampleLocationsEXT(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1422, 1);
stream->write((uint64_t*)&cgen_var_1422, 1 * 8);
marshal_VkSampleLocationsInfoEXT(stream, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo));
- AEMU_SCOPED_TRACE("vkCmdSetSampleLocationsEXT readParams");
- AEMU_SCOPED_TRACE("vkCmdSetSampleLocationsEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -22311,7 +21293,6 @@ void VkEncoder::vkGetPhysicalDeviceMultisamplePropertiesEXT(
VkMultisamplePropertiesEXT* pMultisampleProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMultisamplePropertiesEXT encode");
mImpl->log("start vkGetPhysicalDeviceMultisamplePropertiesEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22340,13 +21321,11 @@ void VkEncoder::vkGetPhysicalDeviceMultisamplePropertiesEXT(
stream->write((uint64_t*)&cgen_var_1424, 1 * 8);
stream->write((VkSampleCountFlagBits*)&local_samples, sizeof(VkSampleCountFlagBits));
marshal_VkMultisamplePropertiesEXT(stream, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMultisamplePropertiesEXT readParams");
unmarshal_VkMultisamplePropertiesEXT(stream, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
if (pMultisampleProperties)
{
transform_fromhost_VkMultisamplePropertiesEXT(mImpl->resources(), (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
}
- AEMU_SCOPED_TRACE("vkGetPhysicalDeviceMultisamplePropertiesEXT returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -22372,7 +21351,6 @@ VkResult VkEncoder::vkCreateValidationCacheEXT(
VkValidationCacheEXT* pValidationCache)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateValidationCacheEXT encode");
mImpl->log("start vkCreateValidationCacheEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22442,13 +21420,11 @@ VkResult VkEncoder::vkCreateValidationCacheEXT(
stream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(pValidationCache, &cgen_var_1430, 1);
stream->write((uint64_t*)&cgen_var_1430, 8);
stream->setHandleMapping(resources->unwrapMapping());
- AEMU_SCOPED_TRACE("vkCreateValidationCacheEXT readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_1431;
stream->read((uint64_t*)&cgen_var_1431, 8);
stream->handleMapping()->mapHandles_u64_VkValidationCacheEXT(&cgen_var_1431, (VkValidationCacheEXT*)pValidationCache, 1);
stream->unsetHandleMapping();
- AEMU_SCOPED_TRACE("vkCreateValidationCacheEXT returnUnmarshal");
VkResult vkCreateValidationCacheEXT_VkResult_return = (VkResult)0;
stream->read(&vkCreateValidationCacheEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -22464,7 +21440,6 @@ void VkEncoder::vkDestroyValidationCacheEXT(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkDestroyValidationCacheEXT encode");
mImpl->log("start vkDestroyValidationCacheEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22521,8 +21496,6 @@ void VkEncoder::vkDestroyValidationCacheEXT(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkDestroyValidationCacheEXT readParams");
- AEMU_SCOPED_TRACE("vkDestroyValidationCacheEXT returnUnmarshal");
resources->destroyMapping()->mapHandles_VkValidationCacheEXT((VkValidationCacheEXT*)&validationCache);
pool->freeAll();
countingStream->clearPool();
@@ -22537,7 +21510,6 @@ VkResult VkEncoder::vkMergeValidationCachesEXT(
const VkValidationCacheEXT* pSrcCaches)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkMergeValidationCachesEXT encode");
mImpl->log("start vkMergeValidationCachesEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22592,8 +21564,6 @@ VkResult VkEncoder::vkMergeValidationCachesEXT(
stream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(local_pSrcCaches, cgen_var_1443, ((srcCacheCount)));
stream->write((uint64_t*)cgen_var_1443, ((srcCacheCount)) * 8);
}
- AEMU_SCOPED_TRACE("vkMergeValidationCachesEXT readParams");
- AEMU_SCOPED_TRACE("vkMergeValidationCachesEXT returnUnmarshal");
VkResult vkMergeValidationCachesEXT_VkResult_return = (VkResult)0;
stream->read(&vkMergeValidationCachesEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -22610,7 +21580,6 @@ VkResult VkEncoder::vkGetValidationCacheDataEXT(
void* pData)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetValidationCacheDataEXT encode");
mImpl->log("start vkGetValidationCacheDataEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22671,7 +21640,6 @@ VkResult VkEncoder::vkGetValidationCacheDataEXT(
{
stream->write((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
}
- AEMU_SCOPED_TRACE("vkGetValidationCacheDataEXT readParams");
// WARNING PTR CHECK
size_t* check_pDataSize;
check_pDataSize = (size_t*)(uintptr_t)stream->getBe64();
@@ -22694,7 +21662,6 @@ VkResult VkEncoder::vkGetValidationCacheDataEXT(
}
stream->read((void*)pData, (*(pDataSize)) * sizeof(uint8_t));
}
- AEMU_SCOPED_TRACE("vkGetValidationCacheDataEXT returnUnmarshal");
VkResult vkGetValidationCacheDataEXT_VkResult_return = (VkResult)0;
stream->read(&vkGetValidationCacheDataEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -22719,7 +21686,6 @@ VkResult VkEncoder::vkGetMemoryHostPointerPropertiesEXT(
VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetMemoryHostPointerPropertiesEXT encode");
mImpl->log("start vkGetMemoryHostPointerPropertiesEXT");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22768,13 +21734,11 @@ VkResult VkEncoder::vkGetMemoryHostPointerPropertiesEXT(
stream->write((void*)local_pHostPointer, sizeof(uint8_t));
}
marshal_VkMemoryHostPointerPropertiesEXT(stream, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
- AEMU_SCOPED_TRACE("vkGetMemoryHostPointerPropertiesEXT readParams");
unmarshal_VkMemoryHostPointerPropertiesEXT(stream, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
if (pMemoryHostPointerProperties)
{
transform_fromhost_VkMemoryHostPointerPropertiesEXT(mImpl->resources(), (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
}
- AEMU_SCOPED_TRACE("vkGetMemoryHostPointerPropertiesEXT returnUnmarshal");
VkResult vkGetMemoryHostPointerPropertiesEXT_VkResult_return = (VkResult)0;
stream->read(&vkGetMemoryHostPointerPropertiesEXT_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -22794,7 +21758,6 @@ void VkEncoder::vkCmdWriteBufferMarkerAMD(
uint32_t marker)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdWriteBufferMarkerAMD encode");
mImpl->log("start vkCmdWriteBufferMarkerAMD");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22837,8 +21800,6 @@ void VkEncoder::vkCmdWriteBufferMarkerAMD(
stream->write((uint64_t*)&cgen_var_1464, 1 * 8);
stream->write((VkDeviceSize*)&local_dstOffset, sizeof(VkDeviceSize));
stream->write((uint32_t*)&local_marker, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCmdWriteBufferMarkerAMD readParams");
- AEMU_SCOPED_TRACE("vkCmdWriteBufferMarkerAMD returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -22858,7 +21819,6 @@ void VkEncoder::vkCmdSetCheckpointNV(
const void* pCheckpointMarker)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCmdSetCheckpointNV encode");
mImpl->log("start vkCmdSetCheckpointNV");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22901,8 +21861,6 @@ void VkEncoder::vkCmdSetCheckpointNV(
{
stream->write((void*)local_pCheckpointMarker, sizeof(uint8_t));
}
- AEMU_SCOPED_TRACE("vkCmdSetCheckpointNV readParams");
- AEMU_SCOPED_TRACE("vkCmdSetCheckpointNV returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -22915,7 +21873,6 @@ void VkEncoder::vkGetQueueCheckpointDataNV(
VkCheckpointDataNV* pCheckpointData)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetQueueCheckpointDataNV encode");
mImpl->log("start vkGetQueueCheckpointDataNV");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -22972,7 +21929,6 @@ void VkEncoder::vkGetQueueCheckpointDataNV(
marshal_VkCheckpointDataNV(stream, (VkCheckpointDataNV*)(pCheckpointData + i));
}
}
- AEMU_SCOPED_TRACE("vkGetQueueCheckpointDataNV readParams");
// WARNING PTR CHECK
uint32_t* check_pCheckpointDataCount;
check_pCheckpointDataCount = (uint32_t*)(uintptr_t)stream->getBe64();
@@ -23005,7 +21961,6 @@ void VkEncoder::vkGetQueueCheckpointDataNV(
transform_fromhost_VkCheckpointDataNV(mImpl->resources(), (VkCheckpointDataNV*)(pCheckpointData + i));
}
}
- AEMU_SCOPED_TRACE("vkGetQueueCheckpointDataNV returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -23020,7 +21975,6 @@ VkResult VkEncoder::vkMapMemoryIntoAddressSpaceGOOGLE(
uint64_t* pAddress)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkMapMemoryIntoAddressSpaceGOOGLE encode");
mImpl->log("start vkMapMemoryIntoAddressSpaceGOOGLE");
mImpl->resources()->on_vkMapMemoryIntoAddressSpaceGOOGLE_pre(this, VK_SUCCESS, device, memory, pAddress);
auto stream = mImpl->stream();
@@ -23067,7 +22021,6 @@ VkResult VkEncoder::vkMapMemoryIntoAddressSpaceGOOGLE(
{
stream->write((uint64_t*)pAddress, sizeof(uint64_t));
}
- AEMU_SCOPED_TRACE("vkMapMemoryIntoAddressSpaceGOOGLE readParams");
// WARNING PTR CHECK
uint64_t* check_pAddress;
check_pAddress = (uint64_t*)(uintptr_t)stream->getBe64();
@@ -23079,7 +22032,6 @@ VkResult VkEncoder::vkMapMemoryIntoAddressSpaceGOOGLE(
}
stream->read((uint64_t*)pAddress, sizeof(uint64_t));
}
- AEMU_SCOPED_TRACE("vkMapMemoryIntoAddressSpaceGOOGLE returnUnmarshal");
VkResult vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return = (VkResult)0;
stream->read(&vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return, sizeof(VkResult));
mImpl->resources()->on_vkMapMemoryIntoAddressSpaceGOOGLE(this, vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return, device, memory, pAddress);
@@ -23098,7 +22050,6 @@ VkResult VkEncoder::vkRegisterImageColorBufferGOOGLE(
uint32_t colorBuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE encode");
mImpl->log("start vkRegisterImageColorBufferGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -23133,8 +22084,6 @@ VkResult VkEncoder::vkRegisterImageColorBufferGOOGLE(
stream->handleMapping()->mapHandles_VkImage_u64(&local_image, &cgen_var_1487, 1);
stream->write((uint64_t*)&cgen_var_1487, 1 * 8);
stream->write((uint32_t*)&local_colorBuffer, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE returnUnmarshal");
VkResult vkRegisterImageColorBufferGOOGLE_VkResult_return = (VkResult)0;
stream->read(&vkRegisterImageColorBufferGOOGLE_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -23150,7 +22099,6 @@ VkResult VkEncoder::vkRegisterBufferColorBufferGOOGLE(
uint32_t colorBuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE encode");
mImpl->log("start vkRegisterBufferColorBufferGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -23185,8 +22133,6 @@ VkResult VkEncoder::vkRegisterBufferColorBufferGOOGLE(
stream->handleMapping()->mapHandles_VkBuffer_u64(&local_buffer, &cgen_var_1491, 1);
stream->write((uint64_t*)&cgen_var_1491, 1 * 8);
stream->write((uint32_t*)&local_colorBuffer, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE returnUnmarshal");
VkResult vkRegisterBufferColorBufferGOOGLE_VkResult_return = (VkResult)0;
stream->read(&vkRegisterBufferColorBufferGOOGLE_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -23213,7 +22159,6 @@ void VkEncoder::vkUpdateDescriptorSetWithTemplateSizedGOOGLE(
const VkBufferView* pBufferViews)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateSizedGOOGLE encode");
mImpl->log("start vkUpdateDescriptorSetWithTemplateSizedGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -23430,8 +22375,6 @@ void VkEncoder::vkUpdateDescriptorSetWithTemplateSizedGOOGLE(
stream->write((uint64_t*)cgen_var_1511, ((bufferViewCount)) * 8);
}
}
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateSizedGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkUpdateDescriptorSetWithTemplateSizedGOOGLE returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -23445,7 +22388,6 @@ void VkEncoder::vkBeginCommandBufferAsyncGOOGLE(
const VkCommandBufferBeginInfo* pBeginInfo)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkBeginCommandBufferAsyncGOOGLE encode");
mImpl->log("start vkBeginCommandBufferAsyncGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -23481,8 +22423,6 @@ void VkEncoder::vkBeginCommandBufferAsyncGOOGLE(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1513, 1);
stream->write((uint64_t*)&cgen_var_1513, 1 * 8);
marshal_VkCommandBufferBeginInfo(stream, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
- AEMU_SCOPED_TRACE("vkBeginCommandBufferAsyncGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkBeginCommandBufferAsyncGOOGLE returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -23493,7 +22433,6 @@ void VkEncoder::vkEndCommandBufferAsyncGOOGLE(
VkCommandBuffer commandBuffer)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkEndCommandBufferAsyncGOOGLE encode");
mImpl->log("start vkEndCommandBufferAsyncGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -23516,8 +22455,6 @@ void VkEncoder::vkEndCommandBufferAsyncGOOGLE(
uint64_t cgen_var_1515;
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1515, 1);
stream->write((uint64_t*)&cgen_var_1515, 1 * 8);
- AEMU_SCOPED_TRACE("vkEndCommandBufferAsyncGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkEndCommandBufferAsyncGOOGLE returnUnmarshal");
stream->flush();
pool->freeAll();
countingStream->clearPool();
@@ -23530,7 +22467,6 @@ void VkEncoder::vkResetCommandBufferAsyncGOOGLE(
VkCommandBufferResetFlags flags)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkResetCommandBufferAsyncGOOGLE encode");
mImpl->log("start vkResetCommandBufferAsyncGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -23557,8 +22493,6 @@ void VkEncoder::vkResetCommandBufferAsyncGOOGLE(
stream->handleMapping()->mapHandles_VkCommandBuffer_u64(&local_commandBuffer, &cgen_var_1517, 1);
stream->write((uint64_t*)&cgen_var_1517, 1 * 8);
stream->write((VkCommandBufferResetFlags*)&local_flags, sizeof(VkCommandBufferResetFlags));
- AEMU_SCOPED_TRACE("vkResetCommandBufferAsyncGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkResetCommandBufferAsyncGOOGLE returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -23571,7 +22505,6 @@ void VkEncoder::vkCommandBufferHostSyncGOOGLE(
uint32_t sequenceNumber)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCommandBufferHostSyncGOOGLE encode");
mImpl->log("start vkCommandBufferHostSyncGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -23602,8 +22535,6 @@ void VkEncoder::vkCommandBufferHostSyncGOOGLE(
stream->write((uint64_t*)&cgen_var_1519, 1 * 8);
stream->write((uint32_t*)&local_needHostSync, sizeof(uint32_t));
stream->write((uint32_t*)&local_sequenceNumber, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkCommandBufferHostSyncGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkCommandBufferHostSyncGOOGLE returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -23620,7 +22551,6 @@ VkResult VkEncoder::vkCreateImageWithRequirementsGOOGLE(
VkMemoryRequirements* pMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateImageWithRequirementsGOOGLE encode");
mImpl->log("start vkCreateImageWithRequirementsGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -23693,7 +22623,6 @@ VkResult VkEncoder::vkCreateImageWithRequirementsGOOGLE(
stream->write((uint64_t*)&cgen_var_1525, 8);
stream->setHandleMapping(resources->unwrapMapping());
marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
- AEMU_SCOPED_TRACE("vkCreateImageWithRequirementsGOOGLE readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_1526;
stream->read((uint64_t*)&cgen_var_1526, 8);
@@ -23704,7 +22633,6 @@ VkResult VkEncoder::vkCreateImageWithRequirementsGOOGLE(
{
transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
}
- AEMU_SCOPED_TRACE("vkCreateImageWithRequirementsGOOGLE returnUnmarshal");
VkResult vkCreateImageWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
stream->read(&vkCreateImageWithRequirementsGOOGLE_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -23722,7 +22650,6 @@ VkResult VkEncoder::vkCreateBufferWithRequirementsGOOGLE(
VkMemoryRequirements* pMemoryRequirements)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkCreateBufferWithRequirementsGOOGLE encode");
mImpl->log("start vkCreateBufferWithRequirementsGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -23794,7 +22721,6 @@ VkResult VkEncoder::vkCreateBufferWithRequirementsGOOGLE(
stream->write((uint64_t*)&cgen_var_1532, 8);
stream->setHandleMapping(resources->unwrapMapping());
marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
- AEMU_SCOPED_TRACE("vkCreateBufferWithRequirementsGOOGLE readParams");
stream->setHandleMapping(resources->createMapping());
uint64_t cgen_var_1533;
stream->read((uint64_t*)&cgen_var_1533, 8);
@@ -23805,7 +22731,6 @@ VkResult VkEncoder::vkCreateBufferWithRequirementsGOOGLE(
{
transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
}
- AEMU_SCOPED_TRACE("vkCreateBufferWithRequirementsGOOGLE returnUnmarshal");
VkResult vkCreateBufferWithRequirementsGOOGLE_VkResult_return = (VkResult)0;
stream->read(&vkCreateBufferWithRequirementsGOOGLE_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -23825,7 +22750,6 @@ VkResult VkEncoder::vkGetMemoryHostAddressInfoGOOGLE(
uint64_t* pHostmemId)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE encode");
mImpl->log("start vkGetMemoryHostAddressInfoGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -23899,7 +22823,6 @@ VkResult VkEncoder::vkGetMemoryHostAddressInfoGOOGLE(
{
stream->write((uint64_t*)pHostmemId, sizeof(uint64_t));
}
- AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE readParams");
// WARNING PTR CHECK
uint64_t* check_pAddress;
check_pAddress = (uint64_t*)(uintptr_t)stream->getBe64();
@@ -23933,7 +22856,6 @@ VkResult VkEncoder::vkGetMemoryHostAddressInfoGOOGLE(
}
stream->read((uint64_t*)pHostmemId, sizeof(uint64_t));
}
- AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE returnUnmarshal");
VkResult vkGetMemoryHostAddressInfoGOOGLE_VkResult_return = (VkResult)0;
stream->read(&vkGetMemoryHostAddressInfoGOOGLE_VkResult_return, sizeof(VkResult));
pool->freeAll();
@@ -23951,7 +22873,6 @@ VkResult VkEncoder::vkFreeMemorySyncGOOGLE(
const VkAllocationCallbacks* pAllocator)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkFreeMemorySyncGOOGLE encode");
mImpl->log("start vkFreeMemorySyncGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -24005,8 +22926,6 @@ VkResult VkEncoder::vkFreeMemorySyncGOOGLE(
{
marshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator));
}
- AEMU_SCOPED_TRACE("vkFreeMemorySyncGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkFreeMemorySyncGOOGLE returnUnmarshal");
VkResult vkFreeMemorySyncGOOGLE_VkResult_return = (VkResult)0;
stream->read(&vkFreeMemorySyncGOOGLE_VkResult_return, sizeof(VkResult));
resources->destroyMapping()->mapHandles_VkDeviceMemory((VkDeviceMemory*)&memory);
@@ -24025,7 +22944,6 @@ void VkEncoder::vkQueueHostSyncGOOGLE(
uint32_t sequenceNumber)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueHostSyncGOOGLE encode");
mImpl->log("start vkQueueHostSyncGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -24056,8 +22974,6 @@ void VkEncoder::vkQueueHostSyncGOOGLE(
stream->write((uint64_t*)&cgen_var_1554, 1 * 8);
stream->write((uint32_t*)&local_needHostSync, sizeof(uint32_t));
stream->write((uint32_t*)&local_sequenceNumber, sizeof(uint32_t));
- AEMU_SCOPED_TRACE("vkQueueHostSyncGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkQueueHostSyncGOOGLE returnUnmarshal");
pool->freeAll();
countingStream->clearPool();
stream->clearPool();
@@ -24071,7 +22987,6 @@ void VkEncoder::vkQueueSubmitAsyncGOOGLE(
VkFence fence)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueSubmitAsyncGOOGLE encode");
mImpl->log("start vkQueueSubmitAsyncGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -24131,8 +23046,6 @@ void VkEncoder::vkQueueSubmitAsyncGOOGLE(
uint64_t cgen_var_1558;
stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_1558, 1);
stream->write((uint64_t*)&cgen_var_1558, 1 * 8);
- AEMU_SCOPED_TRACE("vkQueueSubmitAsyncGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkQueueSubmitAsyncGOOGLE returnUnmarshal");
stream->flush();
pool->freeAll();
countingStream->clearPool();
@@ -24144,7 +23057,6 @@ void VkEncoder::vkQueueWaitIdleAsyncGOOGLE(
VkQueue queue)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueWaitIdleAsyncGOOGLE encode");
mImpl->log("start vkQueueWaitIdleAsyncGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -24167,8 +23079,6 @@ void VkEncoder::vkQueueWaitIdleAsyncGOOGLE(
uint64_t cgen_var_1560;
stream->handleMapping()->mapHandles_VkQueue_u64(&local_queue, &cgen_var_1560, 1);
stream->write((uint64_t*)&cgen_var_1560, 1 * 8);
- AEMU_SCOPED_TRACE("vkQueueWaitIdleAsyncGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkQueueWaitIdleAsyncGOOGLE returnUnmarshal");
stream->flush();
pool->freeAll();
countingStream->clearPool();
@@ -24183,7 +23093,6 @@ void VkEncoder::vkQueueBindSparseAsyncGOOGLE(
VkFence fence)
{
EncoderAutoLock encoderLock(this);
- AEMU_SCOPED_TRACE("vkQueueBindSparseAsyncGOOGLE encode");
mImpl->log("start vkQueueBindSparseAsyncGOOGLE");
auto stream = mImpl->stream();
auto countingStream = mImpl->countingStream();
@@ -24243,8 +23152,6 @@ void VkEncoder::vkQueueBindSparseAsyncGOOGLE(
uint64_t cgen_var_1564;
stream->handleMapping()->mapHandles_VkFence_u64(&local_fence, &cgen_var_1564, 1);
stream->write((uint64_t*)&cgen_var_1564, 1 * 8);
- AEMU_SCOPED_TRACE("vkQueueBindSparseAsyncGOOGLE readParams");
- AEMU_SCOPED_TRACE("vkQueueBindSparseAsyncGOOGLE returnUnmarshal");
stream->flush();
pool->freeAll();
countingStream->clearPool();
@@ -24253,5 +23160,52 @@ void VkEncoder::vkQueueBindSparseAsyncGOOGLE(
}
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+void VkEncoder::vkGetLinearImageLayoutGOOGLE(
+ VkDevice device,
+ VkFormat format,
+ VkDeviceSize* pOffset,
+ VkDeviceSize* pRowPitchAlignment)
+{
+ EncoderAutoLock encoderLock(this);
+ mImpl->log("start vkGetLinearImageLayoutGOOGLE");
+ auto stream = mImpl->stream();
+ auto countingStream = mImpl->countingStream();
+ auto resources = mImpl->resources();
+ auto pool = mImpl->pool();
+ stream->setHandleMapping(resources->unwrapMapping());
+ VkDevice local_device;
+ VkFormat local_format;
+ local_device = device;
+ local_format = format;
+ countingStream->rewind();
+ {
+ uint64_t cgen_var_1565;
+ countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1565, 1);
+ countingStream->write((uint64_t*)&cgen_var_1565, 1 * 8);
+ countingStream->write((VkFormat*)&local_format, sizeof(VkFormat));
+ countingStream->write((VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
+ countingStream->write((VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
+ }
+ uint32_t packetSize_vkGetLinearImageLayoutGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
+ countingStream->rewind();
+ uint32_t opcode_vkGetLinearImageLayoutGOOGLE = OP_vkGetLinearImageLayoutGOOGLE;
+ stream->write(&opcode_vkGetLinearImageLayoutGOOGLE, sizeof(uint32_t));
+ stream->write(&packetSize_vkGetLinearImageLayoutGOOGLE, sizeof(uint32_t));
+ uint64_t cgen_var_1566;
+ stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1566, 1);
+ stream->write((uint64_t*)&cgen_var_1566, 1 * 8);
+ stream->write((VkFormat*)&local_format, sizeof(VkFormat));
+ stream->write((VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
+ stream->write((VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
+ stream->read((VkDeviceSize*)pOffset, sizeof(VkDeviceSize));
+ stream->read((VkDeviceSize*)pRowPitchAlignment, sizeof(VkDeviceSize));
+ pool->freeAll();
+ countingStream->clearPool();
+ stream->clearPool();
+ mImpl->log("finish vkGetLinearImageLayoutGOOGLE");;
+}
+
+#endif
} // namespace goldfish_vk
diff --git a/system/vulkan_enc/VkEncoder.cpp.inl b/system/vulkan_enc/VkEncoder.cpp.inl
new file mode 100644
index 00000000..5e1c5f39
--- /dev/null
+++ b/system/vulkan_enc/VkEncoder.cpp.inl
@@ -0,0 +1,124 @@
+
+class VkEncoder::Impl {
+public:
+ Impl(IOStream* stream) : m_stream(stream), m_logEncodes(false) {
+ m_stream.incStreamRef();
+ const char* emuVkLogEncodesPropName = "qemu.vk.log";
+ char encodeProp[PROPERTY_VALUE_MAX];
+ if (property_get(emuVkLogEncodesPropName, encodeProp, nullptr) > 0) {
+ m_logEncodes = atoi(encodeProp) > 0;
+ }
+ }
+
+ ~Impl() {
+ m_stream.decStreamRef();
+ }
+
+ VulkanCountingStream* countingStream() { return &m_countingStream; }
+ VulkanStreamGuest* stream() { return &m_stream; }
+ Pool* pool() { return &m_pool; }
+ ResourceTracker* resources() { return ResourceTracker::get(); }
+ Validation* validation() { return &m_validation; }
+
+ void log(const char* text) {
+ if (!m_logEncodes) return;
+ ALOGD("encoder log: %s", text);
+ }
+
+ void flush() {
+ lock();
+ m_stream.flush();
+ unlock();
+ }
+
+ // can be recursive
+ void lock() {
+ if (this == sAcquiredEncoderThreadLocal) {
+ ++sAcquiredEncoderThreadLockLevels;
+ return; // recursive
+ }
+ while (mLock.test_and_set(std::memory_order_acquire));
+ sAcquiredEncoderThreadLocal = this;
+ sAcquiredEncoderThreadLockLevels = 1;
+ }
+
+ void unlock() {
+ if (this != sAcquiredEncoderThreadLocal) {
+ // error, trying to unlock without having locked first
+ return;
+ }
+
+ --sAcquiredEncoderThreadLockLevels;
+ if (0 == sAcquiredEncoderThreadLockLevels) {
+ mLock.clear(std::memory_order_release);
+ sAcquiredEncoderThreadLocal = nullptr;
+ }
+ }
+
+ void incRef() {
+ __atomic_add_fetch(&m_refCount, 1, __ATOMIC_SEQ_CST);
+ }
+
+ bool decRef() {
+ if (0 == __atomic_sub_fetch(&m_refCount, 1, __ATOMIC_SEQ_CST)) {
+ return true;
+ }
+ return false;
+ }
+
+private:
+ VulkanCountingStream m_countingStream;
+ VulkanStreamGuest m_stream;
+ Pool m_pool { 8, 4096, 64 };
+
+ Validation m_validation;
+ bool m_logEncodes;
+ std::atomic_flag mLock = ATOMIC_FLAG_INIT;
+ static thread_local Impl* sAcquiredEncoderThreadLocal;
+ static thread_local uint32_t sAcquiredEncoderThreadLockLevels;
+ uint32_t m_refCount = 1;
+};
+
+VkEncoder::~VkEncoder() { }
+
+// static
+thread_local VkEncoder::Impl* VkEncoder::Impl::sAcquiredEncoderThreadLocal = nullptr;
+thread_local uint32_t VkEncoder::Impl::sAcquiredEncoderThreadLockLevels = 0;
+
+struct EncoderAutoLock {
+ EncoderAutoLock(VkEncoder* enc) : mEnc(enc) {
+ mEnc->lock();
+ }
+ ~EncoderAutoLock() {
+ mEnc->unlock();
+ }
+ VkEncoder* mEnc;
+};
+
+VkEncoder::VkEncoder(IOStream *stream) :
+ mImpl(new VkEncoder::Impl(stream)) { }
+
+void VkEncoder::flush() {
+ mImpl->flush();
+}
+
+void VkEncoder::lock() {
+ mImpl->lock();
+}
+
+void VkEncoder::unlock() {
+ mImpl->unlock();
+}
+
+void VkEncoder::incRef() {
+ mImpl->incRef();
+}
+
+bool VkEncoder::decRef() {
+ if (mImpl->decRef()) {
+ delete this;
+ return true;
+ }
+ return false;
+}
+
diff --git a/system/vulkan_enc/VkEncoder.h b/system/vulkan_enc/VkEncoder.h
index bde9ab8a..d2638238 100644
--- a/system/vulkan_enc/VkEncoder.h
+++ b/system/vulkan_enc/VkEncoder.h
@@ -40,9 +40,7 @@ public:
VkEncoder(IOStream* stream);
~VkEncoder();
- void flush();
- void lock();
- void unlock();
+#include "VkEncoder.h.inl"
#ifdef VK_VERSION_1_0
VkResult vkCreateInstance(
const VkInstanceCreateInfo* pCreateInfo,
@@ -1838,6 +1836,13 @@ public:
const VkBindSparseInfo* pBindInfo,
VkFence fence);
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+ void vkGetLinearImageLayoutGOOGLE(
+ VkDevice device,
+ VkFormat format,
+ VkDeviceSize* pOffset,
+ VkDeviceSize* pRowPitchAlignment);
+#endif
private:
class Impl;
diff --git a/system/vulkan_enc/VkEncoder.h.inl b/system/vulkan_enc/VkEncoder.h.inl
new file mode 100644
index 00000000..d4155966
--- /dev/null
+++ b/system/vulkan_enc/VkEncoder.h.inl
@@ -0,0 +1,5 @@
+ void flush();
+ void lock();
+ void unlock();
+ void incRef();
+ bool decRef();
diff --git a/system/vulkan_enc/VulkanStreamGuest.cpp b/system/vulkan_enc/VulkanStreamGuest.cpp
index 43f3706c..32993b6d 100644
--- a/system/vulkan_enc/VulkanStreamGuest.cpp
+++ b/system/vulkan_enc/VulkanStreamGuest.cpp
@@ -84,6 +84,14 @@ public:
return mFeatureBits;
}
+ void incStreamRef() {
+ mStream->incRef();
+ }
+
+ bool decStreamRef() {
+ return mStream->decRef();
+ }
+
private:
size_t oustandingWriteBuffer() const {
return mWritePos;
@@ -190,6 +198,14 @@ uint32_t VulkanStreamGuest::getFeatureBits() const {
return mImpl->getFeatureBits();
}
+void VulkanStreamGuest::incStreamRef() {
+ mImpl->incStreamRef();
+}
+
+bool VulkanStreamGuest::decStreamRef() {
+ return mImpl->decStreamRef();
+}
+
VulkanCountingStream::VulkanCountingStream() : VulkanStreamGuest(nullptr) { }
VulkanCountingStream::~VulkanCountingStream() = default;
diff --git a/system/vulkan_enc/VulkanStreamGuest.h b/system/vulkan_enc/VulkanStreamGuest.h
index d70b9fbb..e8425e15 100644
--- a/system/vulkan_enc/VulkanStreamGuest.h
+++ b/system/vulkan_enc/VulkanStreamGuest.h
@@ -56,6 +56,9 @@ public:
uint32_t getFeatureBits() const;
+ void incStreamRef();
+ bool decStreamRef();
+
private:
class Impl;
std::unique_ptr<Impl> mImpl;
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
index 4f59d219..512554f8 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
@@ -6426,6 +6426,8 @@ void deepcopy_VkImportPhysicalAddressGOOGLE(
#endif
#ifdef VK_GOOGLE_async_queue_submit
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#endif
void deepcopy_extension_struct(
Pool* pool,
const void* structExtension,
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
index 243240a4..8cca9b1c 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
@@ -2046,5 +2046,7 @@ void deepcopy_VkImportPhysicalAddressGOOGLE(
#endif
#ifdef VK_GOOGLE_async_queue_submit
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#endif
} // namespace goldfish_vk
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
index 1bc69fa1..ee84c212 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
@@ -292,6 +292,8 @@ namespace goldfish_vk {
#endif
#ifdef VK_GOOGLE_async_queue_submit
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#endif
uint32_t goldfish_vk_struct_type(
const void* structExtension)
{
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.h b/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
index 9d91cdc4..e549de9a 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
@@ -313,5 +313,7 @@ size_t goldfish_vk_extension_struct_size_with_stream_features(
#endif
#ifdef VK_GOOGLE_async_queue_submit
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#endif
} // namespace goldfish_vk
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
index 2e22fb0c..ff9a0697 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
@@ -4782,6 +4782,8 @@ void handlemap_VkImportPhysicalAddressGOOGLE(
#endif
#ifdef VK_GOOGLE_async_queue_submit
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#endif
void handlemap_extension_struct(
VulkanHandleMapping* handlemap,
void* structExtension_out)
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.h b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
index 79eeaf66..88fca6c6 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.h
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
@@ -1697,5 +1697,7 @@ void handlemap_VkImportPhysicalAddressGOOGLE(
#endif
#ifdef VK_GOOGLE_async_queue_submit
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#endif
} // namespace goldfish_vk
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
index f857a2a8..15fa96f9 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
@@ -10370,6 +10370,8 @@ void unmarshal_VkImportPhysicalAddressGOOGLE(
#endif
#ifdef VK_GOOGLE_async_queue_submit
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#endif
void marshal_extension_struct(
VulkanStreamGuest* vkStream,
const void* structExtension)
@@ -13241,6 +13243,12 @@ const char* api_opcode_to_string(
return "OP_vkQueueBindSparseAsyncGOOGLE";
}
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+ case OP_vkGetLinearImageLayoutGOOGLE:
+ {
+ return "OP_vkGetLinearImageLayoutGOOGLE";
+ }
+#endif
default:
{
return "OP_UNKNOWN_API_CALL";
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.h b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
index df07272c..d8cb1b0b 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.h
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
@@ -3424,6 +3424,9 @@ void unmarshal_VkImportPhysicalAddressGOOGLE(
#define OP_vkQueueWaitIdleAsyncGOOGLE 20331
#define OP_vkQueueBindSparseAsyncGOOGLE 20332
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#define OP_vkGetLinearImageLayoutGOOGLE 20333
+#endif
const char* api_opcode_to_string(
const uint32_t opcode);
diff --git a/system/vulkan_enc/goldfish_vk_private_defs.h b/system/vulkan_enc/goldfish_vk_private_defs.h
index dc4b7c64..b844cdde 100644
--- a/system/vulkan_enc/goldfish_vk_private_defs.h
+++ b/system/vulkan_enc/goldfish_vk_private_defs.h
@@ -282,6 +282,13 @@ enum AHardwareBuffer_Format {
* OpenGL ES: GL_STENCIL_INDEX8
*/
AHARDWAREBUFFER_FORMAT_S8_UINT = 0x35,
+ /**
+ * YUV 420 888 format.
+ * Must have an even width and height. Can be accessed in OpenGL
+ * shaders through an external sampler. Does not support mip-maps
+ * cube-maps or multi-layered textures.
+ */
+ AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420 = 0x23,
};
/**
* Buffer usage flags, specifying how the buffer will be accessed.
@@ -618,6 +625,10 @@ typedef void (VKAPI_PTR *PFN_vkQueueWaitIdleAsyncGOOGLE)(VkQueue queue);
typedef void (VKAPI_PTR *PFN_vkQueueBindSparseAsyncGOOGLE)(
VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
+#define VK_GOOGLE_linear_image_layout 1
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetLinearImageLayoutGOOGLE)(VkDevice device, VkFormat format, VkDeviceSize* pOffset, VkDeviceSize* pRowPitchAlignment);
+
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.cpp b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
index 6fc3e46c..b829c49f 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
@@ -9003,6 +9003,8 @@ void transform_fromhost_VkImportPhysicalAddressGOOGLE(
#endif
#ifdef VK_GOOGLE_async_queue_submit
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#endif
void transform_tohost_extension_struct(
ResourceTracker* resourceTracker,
void* structExtension_out)
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.h b/system/vulkan_enc/goldfish_vk_transform_guest.h
index b9699583..b29e205f 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.h
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.h
@@ -3093,5 +3093,7 @@ void transform_fromhost_VkImportPhysicalAddressGOOGLE(
#endif
#ifdef VK_GOOGLE_async_queue_submit
#endif
+#ifdef VK_GOOGLE_linear_image_layout
+#endif
} // namespace goldfish_vk
diff --git a/system/vulkan_enc/vk_format_info.h b/system/vulkan_enc/vk_format_info.h
index dd9c99bc..d80d9c34 100644
--- a/system/vulkan_enc/vk_format_info.h
+++ b/system/vulkan_enc/vk_format_info.h
@@ -29,6 +29,11 @@
#include <stdbool.h>
#ifdef VK_USE_PLATFORM_ANDROID_KHR
#include <system/graphics.h>
+#else
+/* See system/graphics.h. */
+enum {
+ HAL_PIXEL_FORMAT_YV12 = 842094169,
+};
#endif
#include <vulkan/vulkan.h>
#include <vndk/hardware_buffer.h>
@@ -36,6 +41,11 @@
/* See i915_private_android_types.h in minigbm. */
#define HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL 0x100
+// TODO(b/167698976): We should not use OMX_COLOR_FormatYUV420Planar
+// but we seem to miss a format translation somewhere.
+
+#define OMX_COLOR_FormatYUV420Planar 0x13
+
static inline VkFormat
vk_format_from_android(unsigned android_format)
{
@@ -54,11 +64,12 @@ vk_format_from_android(unsigned android_format)
return VK_FORMAT_A2B10G10R10_UNORM_PACK32;
case HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL:
return VK_FORMAT_G8_B8R8_2PLANE_420_UNORM;
+ case AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420:
+ return VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM;
#ifdef VK_USE_PLATFORM_ANDROID_KHR
case HAL_PIXEL_FORMAT_YV12:
- // YUV converter will convert this format to R8G8B8A8
- // TODO: should we use R8G8B8A8 for other YUV format as well?
- return VK_FORMAT_R8G8B8A8_UNORM;
+ case OMX_COLOR_FormatYUV420Planar:
+ return VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM;
case AHARDWAREBUFFER_FORMAT_BLOB:
#endif
default:
@@ -82,6 +93,8 @@ android_format_from_vk(VkFormat vk_format)
return AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM;
case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
return HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL;
+ case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
+ return HAL_PIXEL_FORMAT_YV12;
default:
return AHARDWAREBUFFER_FORMAT_BLOB;
}
@@ -92,6 +105,8 @@ android_format_is_yuv(unsigned android_format)
{
switch (android_format) {
case HAL_PIXEL_FORMAT_NV12_Y_TILED_INTEL:
+ case OMX_COLOR_FormatYUV420Planar:
+ case HAL_PIXEL_FORMAT_YV12:
return true;
default:
diff --git a/system/vulkan_enc/vk_struct_id.h b/system/vulkan_enc/vk_struct_id.h
index b720edf6..0aaf7a9a 100644
--- a/system/vulkan_enc/vk_struct_id.h
+++ b/system/vulkan_enc/vk_struct_id.h
@@ -52,5 +52,6 @@ REGISTER_VK_STRUCT_ID(VkSamplerYcbcrConversionInfo, VK_STRUCTURE_TYPE_SAMPLER_YC
REGISTER_VK_STRUCT_ID(VkFenceCreateInfo, VK_STRUCTURE_TYPE_FENCE_CREATE_INFO);
REGISTER_VK_STRUCT_ID(VkExportFenceCreateInfo, VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO);
REGISTER_VK_STRUCT_ID(VkImportBufferGOOGLE, VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE);
+REGISTER_VK_STRUCT_ID(VkExternalImageFormatProperties, VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES);
#undef REGISTER_VK_STRUCT_ID