[vulkan] Express validation in terms of VkEventHandler

bug: 111137294

Also takes codegen changes for VkEncoder to call VkEventHandler
for validation.

Change-Id: Iafb78e2cf51ec1932491095c6d8853cd31a3a2b9
diff --git a/system/vulkan_enc/Validation.cpp b/system/vulkan_enc/Validation.cpp
index 8feed81..7653f76 100644
--- a/system/vulkan_enc/Validation.cpp
+++ b/system/vulkan_enc/Validation.cpp
@@ -35,7 +35,9 @@
     return offset + size <= mem->mappedSize;
 }
 
-VkResult validate_vkFlushMappedMemoryRanges(
+VkResult Validation::on_vkFlushMappedMemoryRanges(
+    void*,
+    VkResult,
     VkDevice,
     uint32_t memoryRangeCount,
     const VkMappedMemoryRange* pMemoryRanges) {
@@ -49,7 +51,9 @@
     return VK_SUCCESS;
 }
 
-VkResult validate_vkInvalidateMappedMemoryRanges(
+VkResult Validation::on_vkInvalidateMappedMemoryRanges(
+    void*,
+    VkResult,
     VkDevice,
     uint32_t memoryRangeCount,
     const VkMappedMemoryRange* pMemoryRanges) {
diff --git a/system/vulkan_enc/Validation.h b/system/vulkan_enc/Validation.h
index 2200e35..30af8b4 100644
--- a/system/vulkan_enc/Validation.h
+++ b/system/vulkan_enc/Validation.h
@@ -15,16 +15,24 @@
 
 #include <vulkan/vulkan.h>
 
+#include "VkEventHandler.h"
+
 namespace goldfish_vk {
 
-VkResult validate_vkFlushMappedMemoryRanges(
-    VkDevice device,
-    uint32_t memoryRangeCount,
-    const VkMappedMemoryRange* pMemoryRanges);
-
-VkResult validate_vkInvalidateMappedMemoryRanges(
-    VkDevice device,
-    uint32_t memoryRangeCount,
-    const VkMappedMemoryRange* pMemoryRanges);
+class Validation : public VkEventHandler {
+public:
+    VkResult on_vkFlushMappedMemoryRanges(
+        void* context,
+        VkResult input_result,
+        VkDevice device,
+        uint32_t memoryRangeCount,
+        const VkMappedMemoryRange* pMemoryRanges) override;
+    VkResult on_vkInvalidateMappedMemoryRanges(
+        void* context,
+        VkResult input_result,
+        VkDevice device,
+        uint32_t memoryRangeCount,
+        const VkMappedMemoryRange* pMemoryRanges) override;
+};
 
 } // namespace goldfish_vk
\ No newline at end of file
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 51976f9..87745f4 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -57,10 +57,13 @@
     VulkanStream* stream() { return &m_stream; }
     Pool* pool() { return &m_pool; }
     ResourceTracker* resources() { return ResourceTracker::get(); }
+    Validation* validation() { return &m_validation; }
 private:
     VulkanCountingStream m_countingStream;
     VulkanStream m_stream;
     Pool m_pool { 8, 4096, 64 };
+
+    Validation m_validation;
 };
 
 VkEncoder::VkEncoder(IOStream *stream) :
@@ -1410,7 +1413,7 @@
     uint32_t memoryRangeCount,
     const VkMappedMemoryRange* pMemoryRanges)
 {
-    VALIDATE_RET(VkResult, VK_SUCCESS, validate_vkFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges));
+    VALIDATE_RET(VkResult, VK_SUCCESS, mImpl->validation()->on_vkFlushMappedMemoryRanges(this, VK_SUCCESS, device, memoryRangeCount, pMemoryRanges));
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();
@@ -1501,7 +1504,7 @@
     uint32_t memoryRangeCount,
     const VkMappedMemoryRange* pMemoryRanges)
 {
-    VALIDATE_RET(VkResult, VK_SUCCESS, validate_vkInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges));
+    VALIDATE_RET(VkResult, VK_SUCCESS, mImpl->validation()->on_vkInvalidateMappedMemoryRanges(this, VK_SUCCESS, device, memoryRangeCount, pMemoryRanges));
     auto stream = mImpl->stream();
     auto countingStream = mImpl->countingStream();
     auto resources = mImpl->resources();