mali maloon gpu 处理 unity pso 生成问题

This commit is contained in:
StarBeats 2025-03-14 17:42:21 +08:00
parent d4ab16e09e
commit 432f558e78
5 changed files with 200 additions and 12 deletions

View File

@ -1,31 +1,31 @@
[
{
"directory": "g:\\TJURP\\NativeRenderPlugin",
"arguments": ["C:\\Users\\xinyt\\AppData\\Local\\OpenHarmony\\Sdk\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-fPIC", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderAPI.cpp.o", "RenderAPI.cpp"],
"arguments": ["D:\\tj\\2022.3.48t2\\Editor\\Data\\PlaybackEngines\\OpenHarmonyPlayer\\SDK\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-fPIE", "-fPIC", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderAPI.cpp.o", "RenderAPI.cpp"],
"file": "RenderAPI.cpp"
},
{
"directory": "g:\\TJURP\\NativeRenderPlugin",
"arguments": ["C:\\Users\\xinyt\\AppData\\Local\\OpenHarmony\\Sdk\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-fPIC", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderAPI_D3D11.cpp.o", "RenderAPI_D3D11.cpp"],
"arguments": ["D:\\tj\\2022.3.48t2\\Editor\\Data\\PlaybackEngines\\OpenHarmonyPlayer\\SDK\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-fPIE", "-fPIC", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderAPI_D3D11.cpp.o", "RenderAPI_D3D11.cpp"],
"file": "RenderAPI_D3D11.cpp"
},
{
"directory": "g:\\TJURP\\NativeRenderPlugin",
"arguments": ["C:\\Users\\xinyt\\AppData\\Local\\OpenHarmony\\Sdk\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-fPIC", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderAPI_D3D12.cpp.o", "RenderAPI_D3D12.cpp"],
"arguments": ["D:\\tj\\2022.3.48t2\\Editor\\Data\\PlaybackEngines\\OpenHarmonyPlayer\\SDK\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-fPIE", "-fPIC", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderAPI_D3D12.cpp.o", "RenderAPI_D3D12.cpp"],
"file": "RenderAPI_D3D12.cpp"
},
{
"directory": "g:\\TJURP\\NativeRenderPlugin",
"arguments": ["C:\\Users\\xinyt\\AppData\\Local\\OpenHarmony\\Sdk\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-fPIC", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderAPI_OpenGLCoreES.cpp.o", "RenderAPI_OpenGLCoreES.cpp"],
"arguments": ["D:\\tj\\2022.3.48t2\\Editor\\Data\\PlaybackEngines\\OpenHarmonyPlayer\\SDK\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-fPIE", "-fPIC", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderAPI_OpenGLCoreES.cpp.o", "RenderAPI_OpenGLCoreES.cpp"],
"file": "RenderAPI_OpenGLCoreES.cpp"
},
{
"directory": "g:\\TJURP\\NativeRenderPlugin",
"arguments": ["C:\\Users\\xinyt\\AppData\\Local\\OpenHarmony\\Sdk\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-fPIC", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderAPI_Vulkan.cpp.o", "RenderAPI_Vulkan.cpp"],
"arguments": ["D:\\tj\\2022.3.48t2\\Editor\\Data\\PlaybackEngines\\OpenHarmonyPlayer\\SDK\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-fPIE", "-fPIC", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderAPI_Vulkan.cpp.o", "RenderAPI_Vulkan.cpp"],
"file": "RenderAPI_Vulkan.cpp"
},
{
"directory": "g:\\TJURP\\NativeRenderPlugin",
"arguments": ["C:\\Users\\xinyt\\AppData\\Local\\OpenHarmony\\Sdk\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-fPIC", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderingPlugin.cpp.o", "RenderingPlugin.cpp"],
"arguments": ["D:\\tj\\2022.3.48t2\\Editor\\Data\\PlaybackEngines\\OpenHarmonyPlayer\\SDK\\12\\native\\llvm\\bin\\clang.exe", "-c", "-Qunused-arguments", "-D__MUSL__", "--target=aarch64-linux-ohos", "--sysroot=C:/Users/xinyt/AppData/Local/OpenHarmony/Sdk/12/native/sysroot", "-std=c++20", "-Igl3w", "-IUnity", "-DSUPPORT_OPENGL_UNIFIED=1", "-DSUPPORT_OPENGL_ES=1", "-DOHOS=1", "-IC:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\hms\\native\\sysroot\\usr\\include", "-DMYCLANG", "-DOHOS_STL=c++_shared", "-fPIE", "-fPIC", "-o", "build\\.objs\\GfxPluginNativeRender\\harmonyos\\aarch64\\debug\\RenderingPlugin.cpp.o", "RenderingPlugin.cpp"],
"file": "RenderingPlugin.cpp"
}]

View File

@ -74,7 +74,8 @@
"xlocmon": "cpp",
"xlocnum": "cpp",
"xloctime": "cpp",
"xtr1common": "cpp"
"xtr1common": "cpp",
"string_view": "cpp"
},
"workbench.colorCustomizations": {
"editor.lineHighlightBackground": "#1073cf2d",

View File

@ -99,6 +99,7 @@ public:
virtual void disableXESS1() {}
virtual bool getInputResolution(uint32_t outw, uint32_t outh, int quality, uint32_t& width, uint32_t& height) { return false; }
virtual void SetVKPSOHook(bool enable, int blen_state_index) {}
protected:
virtual void initSupportFeature() = 0;

View File

@ -6,6 +6,7 @@
#include <string>
#include <map>
#include <vector>
#include <set>
#include <math.h>
#include <algorithm>
@ -45,6 +46,8 @@
apply(vkGetPhysicalDeviceProperties2); \
apply(vkEnumerateDeviceExtensionProperties); \
apply(vkGetPhysicalDeviceProperties2KHR); \
apply(vkCreateRenderPass); \
apply(vkCreateRenderPass2KHR); \
apply(vkDestroyPipelineLayout);
#define VULKAN_DEFINE_API_FUNCPTR(func) static PFN_##func func
@ -84,7 +87,8 @@ static VkExtent2D vrs_argment_size_table[] = {
static VkExtent2D vrs_fragment_size = vrs_argment_size_table[0];
static bool vrs_enable;
static int curVrsIndex = 0;
static int cur_vrs_Index = 0;
static bool blend_state_hook_enable;
static void LoadVulkanAPI(PFN_vkGetInstanceProcAddr getInstanceProcAddr, VkInstance instance)
{
@ -164,7 +168,7 @@ static VKAPI_ATTR void VKAPI_CALL Hook_vkCmdBindDescriptorSets(VkCommandBuffer c
{
if (vrs_enable)
{
VkExtent2D fragment_size = vrs_argment_size_table[curVrsIndex];
VkExtent2D fragment_size = vrs_argment_size_table[cur_vrs_Index];
VkFragmentShadingRateCombinerOpKHR combiner_ops[2];
// If shading rate from attachment is enabled, we set the combiner, so that the values from the attachment are used
@ -182,7 +186,7 @@ static VKAPI_ATTR void VKAPI_CALL Hook_vkCmdBindPipeline(VkCommandBuffer command
{
// if (vrs_enable)
//{
// VkExtent2D fragment_size = vrs_argment_size_table[curVrsIndex];
// VkExtent2D fragment_size = vrs_argment_size_table[cur_vrs_Index];
// VkFragmentShadingRateCombinerOpKHR combiner_ops[2];
// // If shading rate from attachment is enabled, we set the combiner, so that the values from the attachment are used
@ -197,11 +201,178 @@ static VKAPI_ATTR void VKAPI_CALL Hook_vkCmdBindPipeline(VkCommandBuffer command
vkCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
}
// static VKAPI_ATTR VkResult VKAPI_CALL Hook_vkCreateRenderPass(
// VkDevice device,
// const VkRenderPassCreateInfo* pCreateInfo,
// const VkAllocationCallbacks* pAllocator,
// VkRenderPass* pRenderPass
// )
// {
// auto ret = vkCreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
// char buf[80];
// sprintf(buf, "vkCreateRenderPass---1: %p \n", *pRenderPass);
// unityLog(buf);
// return ret;
// }
static std::set<void*> mrt_renderpasses;
static std::set<void*> created_pipeline_shader_module;
static VKAPI_ATTR VkResult VKAPI_CALL Hook_vkCreateRenderPass2KHR(
VkDevice device,
const VkRenderPassCreateInfo2* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkRenderPass* pRenderPass
)
{
//if (blend_state_hook_enable)
//{
// unityLog("Hook_vkCreateRenderPass called.");
// if (pCreateInfo->attachmentCount == 2)
// {
// const_cast<VkRenderPassCreateInfo2*>(pCreateInfo)->attachmentCount = 3;
// VkAttachmentDescription2 color_attachments[] = {
// pCreateInfo->pAttachments[0],
// pCreateInfo->pAttachments[0],
// pCreateInfo->pAttachments[1],
// };
// const_cast<VkRenderPassCreateInfo2*>(pCreateInfo)->pAttachments = color_attachments;
// const_cast<VkSubpassDescription2*>(pCreateInfo->pSubpasses)->colorAttachmentCount = 2;
// VkAttachmentReference2 color_attachment_refs[] = {
// pCreateInfo->pSubpasses->pColorAttachments[0],
// pCreateInfo->pSubpasses->pColorAttachments[0],
// };
// color_attachment_refs[1].attachment = 1;
// const_cast<VkSubpassDescription2*>(pCreateInfo->pSubpasses)->pColorAttachments = color_attachment_refs;
// }
//}
auto ret = vkCreateRenderPass2KHR(device, pCreateInfo, pAllocator, pRenderPass);
if(const_cast<VkRenderPassCreateInfo2*>(pCreateInfo)->attachmentCount > 2)
{
mrt_renderpasses.insert(*pRenderPass);
}
return ret;
}
static VKAPI_ATTR VkResult VKAPI_CALL Hook_vkCreateGraphicsPipelines(
VkDevice device,
VkPipelineCache pipelineCache,
uint32_t createInfoCount,
const VkGraphicsPipelineCreateInfo* pCreateInfos,
const VkAllocationCallbacks* pAllocator,
VkPipeline* pPipelines)
{
if (blend_state_hook_enable)
{
//unityLog("Hook_vkCreateGraphicsPipelines called.");
////VkPipelineColorBlendAttachmentState colorblend_attachment_state{};
////colorblend_attachment_state.colorWriteMask = VK_COLOR_COMPONENT_A_BIT | VK_COLOR_COMPONENT_R_BIT |
//// VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT;
////colorblend_attachment_state.blendEnable = VK_TRUE;
////colorblend_attachment_state.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;
////colorblend_attachment_state.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
////colorblend_attachment_state.colorBlendOp = VK_BLEND_OP_ADD;
////colorblend_attachment_state.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;
////colorblend_attachment_state.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
////colorblend_attachment_state.alphaBlendOp = VK_BLEND_OP_ADD;
//VkPipelineColorBlendAttachmentState colorblend_attachment_states[] =
//{
// const_cast<VkPipelineColorBlendStateCreateInfo*>(pCreateInfos->pColorBlendState)->pAttachments[0],
// const_cast<VkPipelineColorBlendStateCreateInfo*>(pCreateInfos->pColorBlendState)->pAttachments[0],
// //colorblend_attachment_state
//};
//const_cast<VkPipelineColorBlendStateCreateInfo*>(pCreateInfos->pColorBlendState)->attachmentCount = 2;
//const_cast<VkPipelineColorBlendStateCreateInfo*>(pCreateInfos->pColorBlendState)->pAttachments = colorblend_attachment_states;
//// const_cast<VkPipelineDepthStencilStateCreateInfo*>(pCreateInfos->pDepthStencilState)->depthCompareOp = VK_COMPARE_OP_GREATER_OR_EQUAL;
//// const_cast<VkPipelineInputAssemblyStateCreateInfo*>(pCreateInfos->pInputAssemblyState)->topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
//// const_cast<VkPipelineRasterizationStateCreateInfo*>(pCreateInfos->pRasterizationState)->frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE;
//std::array<VkVertexInputAttributeDescription, 5> attribute_descriptions{};
//std::array<VkVertexInputBindingDescription, 2> bind_descs{};
//bind_descs[0].binding = 0;
//bind_descs[0].stride = 56;
//bind_descs[0].inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
//bind_descs[1].binding = 1;
//bind_descs[1].stride = 0;
//bind_descs[1].inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
//if (pCreateInfos->pVertexInputState->vertexBindingDescriptionCount == 2 && pCreateInfos->pVertexInputState->pVertexBindingDescriptions[0].stride == 64)
//{
// const_cast<VkPipelineVertexInputStateCreateInfo*>(pCreateInfos->pVertexInputState)->vertexBindingDescriptionCount = bind_descs.size();
// const_cast<VkPipelineVertexInputStateCreateInfo*>(pCreateInfos->pVertexInputState)->pVertexBindingDescriptions = bind_descs.data();
// attribute_descriptions[0].binding = 0;
// attribute_descriptions[0].location = 0;
// attribute_descriptions[0].format = VK_FORMAT_R32G32B32_SFLOAT;
// attribute_descriptions[0].offset = 0;
// attribute_descriptions[1].binding = 0;
// attribute_descriptions[1].location = 1;
// attribute_descriptions[1].format = VK_FORMAT_R32G32B32_SFLOAT;
// attribute_descriptions[1].offset = 12;
// attribute_descriptions[2].binding = 1;
// attribute_descriptions[2].location = 2;
// attribute_descriptions[2].format = VK_FORMAT_R8G8B8A8_UNORM;
// attribute_descriptions[2].offset = 4;
// attribute_descriptions[3].binding = 0;
// attribute_descriptions[3].location = 3;
// attribute_descriptions[3].format = VK_FORMAT_R32G32_SFLOAT;
// attribute_descriptions[3].offset = 40;
// attribute_descriptions[4].binding = 0;
// attribute_descriptions[4].location = 4;
// attribute_descriptions[4].format = VK_FORMAT_R32G32_SFLOAT;
// attribute_descriptions[4].offset = 48;
// const_cast<VkPipelineVertexInputStateCreateInfo*>(pCreateInfos->pVertexInputState)->vertexAttributeDescriptionCount = attribute_descriptions.size();
// const_cast<VkPipelineVertexInputStateCreateInfo*>(pCreateInfos->pVertexInputState)->pVertexAttributeDescriptions = attribute_descriptions.data();;
//}
//if (pCreateInfos->pVertexInputState->vertexBindingDescriptionCount == 2 && pCreateInfos->pVertexInputState->pVertexBindingDescriptions[0].stride == 56)
//{
// char buf[80];
// sprintf(buf, "vkCreateGraphicsPipelines---: %p : %p\n", pCreateInfos->pStages[1].module, pCreateInfos->renderPass);
// unityLog(buf);
// unityLog("vkCreateGraphicsPipelines Attr.");
//}
VkResult ret;
auto shader_module = pCreateInfos->pStages[1].module;
if(!created_pipeline_shader_module.contains(shader_module))
{
created_pipeline_shader_module.insert(shader_module);
for (const auto i : mrt_renderpasses)
{
const_cast<VkGraphicsPipelineCreateInfo*>(pCreateInfos)->renderPass = static_cast<VkRenderPass>(i);
char buf[80];
sprintf(buf, "vkCreateGraphicsPipelines---: %p : %p\n", pCreateInfos->pStages[1].module, pCreateInfos->renderPass);
unityLog(buf);
ret = vkCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
}
}
return ret;
}
return vkCreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines);
}
static int FindMemoryTypeIndex(VkPhysicalDeviceMemoryProperties const &physicalDeviceMemoryProperties, VkMemoryRequirements const &memoryRequirements, VkMemoryPropertyFlags memoryPropertyFlags)
{
uint32_t memoryTypeBits = memoryRequirements.memoryTypeBits;
// Search memtypes to find first curVrsIndex with those properties
// Search memtypes to find first cur_vrs_Index with those properties
for (uint32_t memoryTypeIndex = 0; memoryTypeIndex < VK_MAX_MEMORY_TYPES; ++memoryTypeIndex)
{
if ((memoryTypeBits & 1) == 1)
@ -228,6 +399,8 @@ static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL Hook_vkGetInstanceProcAddr(VkIns
INTERCEPT(vkCreateDevice);
INTERCEPT(vkCmdBindPipeline);
INTERCEPT(vkCmdBindDescriptorSets);
INTERCEPT(vkCreateGraphicsPipelines);
INTERCEPT(vkCreateRenderPass2KHR);
#undef INTERCEPT
return (PFN_vkVoidFunction)vkGetInstanceProcAddr(device, funcName);
@ -279,6 +452,7 @@ public:
virtual void postFGExtrapolation() override;
virtual void disableFGExtrapolation() override;
virtual void SetVKPSOHook(bool enable, int blen_state_index) override;
private:
typedef std::vector<VulkanBuffer> VulkanBuffers;
typedef std::map<unsigned long long, VulkanBuffers> DeleteQueue;
@ -513,7 +687,7 @@ void RenderAPI_Vulkan::initSupportFeature()
void RenderAPI_Vulkan::enableVRS(void* data)
{
int vrs_enum = *(int*) data;
curVrsIndex = vrs_enum;
cur_vrs_Index = vrs_enum;
vrs_fragment_size = vrs_argment_size_table[vrs_enum];
vrs_enable = true;
}
@ -552,4 +726,9 @@ void RenderAPI_Vulkan::postFGExtrapolation()
void RenderAPI_Vulkan::disableFGExtrapolation()
{
}
void RenderAPI_Vulkan::SetVKPSOHook(bool enable, int blen_state_index)
{
blend_state_hook_enable = enable;
}
#endif // #if SUPPORT_VULKAN

View File

@ -207,6 +207,13 @@ extern "C" UNITY_INTERFACE_EXPORT bool GetInputResolution(uint32_t outw, uint32_
return s_current_api->getInputResolution(outw, outh, quality, width, height);
}
extern "C" UNITY_INTERFACE_EXPORT void SetVKPSOHook(bool enable, int blend_state_index)
{
s_current_api->SetVKPSOHook(enable, blend_state_index);
}
// --------------------------------------------------------------------------
// DX12 plugin specific
// --------------------------------------------------------------------------