diff --git a/renderdoc/driver/vulkan/LoaderAndTools/layers/vk_layer_extension_utils.cpp b/renderdoc/driver/vulkan/LoaderAndTools/layers/vk_layer_extension_utils.cpp new file mode 100644 index 000000000..9e85a5b66 --- /dev/null +++ b/renderdoc/driver/vulkan/LoaderAndTools/layers/vk_layer_extension_utils.cpp @@ -0,0 +1,89 @@ +/* + * Vulkan + * + * Copyright (C) 2015 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Authors: + * Courtney Goeltzenleuchter + */ + +#include "string.h" +#include "vk_layer_extension_utils.h" + +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) + +/* + * This file contains utility functions for layers + */ + +VkResult util_GetExtensionProperties( + const uint32_t count, + const VkExtensionProperties *layer_extensions, + uint32_t* pCount, + VkExtensionProperties* pProperties) +{ + uint32_t copy_size; + + if (pCount == NULL) { + return VK_ERROR_INVALID_POINTER; + } + + if (pProperties == NULL || layer_extensions == NULL) { + *pCount = count; + return VK_SUCCESS; + } + + copy_size = *pCount < count ? *pCount : count; + memcpy(pProperties, layer_extensions, copy_size * sizeof(VkExtensionProperties)); + *pCount = copy_size; + if (copy_size < count) { + return VK_INCOMPLETE; + } + + return VK_SUCCESS; +} + +VkResult util_GetLayerProperties( + const uint32_t count, + const VkLayerProperties *layer_properties, + uint32_t* pCount, + VkLayerProperties* pProperties) +{ + uint32_t copy_size; + + if (pCount == NULL) { + return VK_ERROR_INVALID_POINTER; + } + + if (pProperties == NULL || layer_properties == NULL) { + *pCount = count; + return VK_SUCCESS; + } + + copy_size = *pCount < count ? *pCount : count; + memcpy(pProperties, layer_properties, copy_size * sizeof(VkLayerProperties)); + *pCount = copy_size; + if (copy_size < count) { + return VK_INCOMPLETE; + } + + return VK_SUCCESS; +} diff --git a/renderdoc/driver/vulkan/LoaderAndTools/layers/vk_layer_table.cpp b/renderdoc/driver/vulkan/LoaderAndTools/layers/vk_layer_table.cpp index 5dca1c750..6b3a30cea 100644 --- a/renderdoc/driver/vulkan/LoaderAndTools/layers/vk_layer_table.cpp +++ b/renderdoc/driver/vulkan/LoaderAndTools/layers/vk_layer_table.cpp @@ -23,7 +23,7 @@ */ #include #include -#include "vk_dispatch_table_helper.h" +#include "../build/layers/vk_dispatch_table_helper.h" #include "vk_layer.h" #include "vk_layer_table.h" static device_table_map tableMap; diff --git a/renderdoc/driver/vulkan/LoaderAndTools/loader/vk_loader_platform.h b/renderdoc/driver/vulkan/LoaderAndTools/loader/vk_loader_platform.h index 4e586075c..5f74a04b2 100644 --- a/renderdoc/driver/vulkan/LoaderAndTools/loader/vk_loader_platform.h +++ b/renderdoc/driver/vulkan/LoaderAndTools/loader/vk_loader_platform.h @@ -173,7 +173,7 @@ static inline void *loader_aligned_alloc(size_t alignment, size_t size) { return #include #include #include -#include +//#include #include #ifdef __cplusplus #include @@ -213,7 +213,7 @@ static bool loader_platform_file_exists(const char *path) static bool loader_platform_is_path_absolute(const char *path) { - return !PathIsRelative(path); + return !PathIsRelativeA(path); } // WIN32 runtime doesn't have dirname(). @@ -267,12 +267,12 @@ static char *loader_platform_basename(char *pathname) typedef HMODULE loader_platform_dl_handle; static loader_platform_dl_handle loader_platform_open_library(const char* libPath) { - return LoadLibrary(libPath); + return LoadLibraryA(libPath); } static char * loader_platform_open_library_error(const char* libPath) { static char errorMsg[120]; - snprintf(errorMsg, 119, "Failed to open dynamic library \"%s\"", libPath); + _snprintf_s(errorMsg, 119, "Failed to open dynamic library \"%s\"", libPath); return errorMsg; } static void loader_platform_close_library(loader_platform_dl_handle library) @@ -289,7 +289,7 @@ static void * loader_platform_get_proc_address(loader_platform_dl_handle library static char * loader_platform_get_proc_address_error(const char *name) { static char errorMsg[120]; - snprintf(errorMsg, 119, "Failed to find function \"%s\" in dynamic library", name); + _snprintf_s(errorMsg, 119, "Failed to find function \"%s\" in dynamic library", name); return errorMsg; } diff --git a/renderdoc/driver/vulkan/rdtrace.cpp b/renderdoc/driver/vulkan/rdtrace.cpp index 02dda6adf..0ad69615e 100644 --- a/renderdoc/driver/vulkan/rdtrace.cpp +++ b/renderdoc/driver/vulkan/rdtrace.cpp @@ -24,14 +24,14 @@ #include #include #include -#include "vk_loader_platform.h" -#include "vk_dispatch_table_helper.h" +#include "LoaderAndTools/loader/vk_loader_platform.h" +#include "LoaderAndTools/build/layers/vk_dispatch_table_helper.h" #include "vk_layer.h" -#include "vk_layer_table.h" -#include "vk_layer_extension_utils.h" +#include "LoaderAndTools/layers/vk_layer_table.h" +#include "LoaderAndTools/layers/vk_layer_extension_utils.h" // The following is #included again to catch certain OS-specific functions // being used: -#include "vk_loader_platform.h" +#include "LoaderAndTools/loader/vk_loader_platform.h" // Renderdoc Includes @@ -51,6 +51,11 @@ #undef far #endif +#ifdef WIN32 +#undef VK_LAYER_EXPORT +#define VK_LAYER_EXPORT extern "C" __declspec(dllexport) +#endif + // Renderdoc State WrappedVulkan *shadowVulkan = NULL; @@ -110,6 +115,11 @@ VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalLayerProperties( pCount, pProperties); } +#ifdef WIN32 +#undef VK_LAYER_EXPORT +#define VK_LAYER_EXPORT +#endif + // Renderdoc Intercepts #define HookDefine0(ret, function) \ @@ -184,6 +194,11 @@ DefineHooks(); #undef HookInit #define HookInit(function) if (!strcmp(pName, STRINGIZE(function))) return (PFN_vkVoidFunction) function; +#ifdef WIN32 +#undef VK_LAYER_EXPORT +#define VK_LAYER_EXPORT extern "C" __declspec(dllexport) +#endif + // proc addr routines VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* pName) diff --git a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj index dcc48fca7..9868a95a5 100644 --- a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj +++ b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj @@ -19,12 +19,17 @@ + + + true - + + true + diff --git a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters index 70f73030c..bbf844441 100644 --- a/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters +++ b/renderdoc/driver/vulkan/renderdoc_vulkan.vcxproj.filters @@ -11,6 +11,13 @@ + + + ext + + + ext + @@ -22,4 +29,9 @@ + + + {170618b5-5523-497e-a798-4cad26474162} + + \ No newline at end of file diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 25fa00713..5638c1007 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -39,8 +39,8 @@ // layer includes #include "vk_layer.h" -#include "vk_layer_table.h" -#include "vk_layer_extension_utils.h" +#include "LoaderAndTools/layers/vk_layer_table.h" +#include "LoaderAndTools/layers/vk_layer_extension_utils.h" using std::vector; using std::list; diff --git a/renderdoc/driver/vulkan/vk_hookset.h b/renderdoc/driver/vulkan/vk_hookset.h index 54a37d099..d18a59509 100644 --- a/renderdoc/driver/vulkan/vk_hookset.h +++ b/renderdoc/driver/vulkan/vk_hookset.h @@ -33,5 +33,6 @@ struct VulkanFunctions { - HookInitVulkan() + HookInitVulkanInstance(); + HookInitVulkanDevice(); }; diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index c14f15249..f7ea2bfbf 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -25,7 +25,7 @@ #include "vk_replay.h" #include "vk_core.h" #include "vk_resources.h" -#include "vk_layer_table.h" +#include "LoaderAndTools/layers/vk_layer_table.h" #include "serialise/string_utils.h" diff --git a/renderdoc/serialise/serialiser.h b/renderdoc/serialise/serialiser.h index 7525f5c65..1f46f34e8 100644 --- a/renderdoc/serialise/serialiser.h +++ b/renderdoc/serialise/serialiser.h @@ -44,19 +44,19 @@ using std::string; // template helpers template -struct is_pointer +struct renderdoc_is_pointer { enum {value = false}; }; template -struct is_pointer +struct renderdoc_is_pointer { enum {value = true}; }; template -struct is_pointer +struct renderdoc_is_pointer { enum {value = true}; }; @@ -72,7 +72,7 @@ struct ToStr template static string Get(const T &el) { - return ToStrHelper::value, T>::Get(el); + return ToStrHelper::value, T>::Get(el); } };