mali maloon gpu 处理 unity pso 生成问题
This commit is contained in:
parent
d4ab16e09e
commit
432f558e78
12
NativeRenderPlugin/.vscode/compile_commands.json
vendored
12
NativeRenderPlugin/.vscode/compile_commands.json
vendored
@ -1,31 +1,31 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"directory": "g:\\TJURP\\NativeRenderPlugin",
|
"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"
|
"file": "RenderAPI.cpp"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"directory": "g:\\TJURP\\NativeRenderPlugin",
|
"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"
|
"file": "RenderAPI_D3D11.cpp"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"directory": "g:\\TJURP\\NativeRenderPlugin",
|
"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"
|
"file": "RenderAPI_D3D12.cpp"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"directory": "g:\\TJURP\\NativeRenderPlugin",
|
"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"
|
"file": "RenderAPI_OpenGLCoreES.cpp"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"directory": "g:\\TJURP\\NativeRenderPlugin",
|
"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"
|
"file": "RenderAPI_Vulkan.cpp"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"directory": "g:\\TJURP\\NativeRenderPlugin",
|
"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"
|
"file": "RenderingPlugin.cpp"
|
||||||
}]
|
}]
|
||||||
|
|||||||
3
NativeRenderPlugin/.vscode/settings.json
vendored
3
NativeRenderPlugin/.vscode/settings.json
vendored
@ -74,7 +74,8 @@
|
|||||||
"xlocmon": "cpp",
|
"xlocmon": "cpp",
|
||||||
"xlocnum": "cpp",
|
"xlocnum": "cpp",
|
||||||
"xloctime": "cpp",
|
"xloctime": "cpp",
|
||||||
"xtr1common": "cpp"
|
"xtr1common": "cpp",
|
||||||
|
"string_view": "cpp"
|
||||||
},
|
},
|
||||||
"workbench.colorCustomizations": {
|
"workbench.colorCustomizations": {
|
||||||
"editor.lineHighlightBackground": "#1073cf2d",
|
"editor.lineHighlightBackground": "#1073cf2d",
|
||||||
|
|||||||
@ -99,6 +99,7 @@ public:
|
|||||||
virtual void disableXESS1() {}
|
virtual void disableXESS1() {}
|
||||||
|
|
||||||
virtual bool getInputResolution(uint32_t outw, uint32_t outh, int quality, uint32_t& width, uint32_t& height) { return false; }
|
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:
|
protected:
|
||||||
virtual void initSupportFeature() = 0;
|
virtual void initSupportFeature() = 0;
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <set>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
@ -45,6 +46,8 @@
|
|||||||
apply(vkGetPhysicalDeviceProperties2); \
|
apply(vkGetPhysicalDeviceProperties2); \
|
||||||
apply(vkEnumerateDeviceExtensionProperties); \
|
apply(vkEnumerateDeviceExtensionProperties); \
|
||||||
apply(vkGetPhysicalDeviceProperties2KHR); \
|
apply(vkGetPhysicalDeviceProperties2KHR); \
|
||||||
|
apply(vkCreateRenderPass); \
|
||||||
|
apply(vkCreateRenderPass2KHR); \
|
||||||
apply(vkDestroyPipelineLayout);
|
apply(vkDestroyPipelineLayout);
|
||||||
|
|
||||||
#define VULKAN_DEFINE_API_FUNCPTR(func) static PFN_##func func
|
#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 VkExtent2D vrs_fragment_size = vrs_argment_size_table[0];
|
||||||
static bool vrs_enable;
|
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)
|
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)
|
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];
|
VkFragmentShadingRateCombinerOpKHR combiner_ops[2];
|
||||||
// If shading rate from attachment is enabled, we set the combiner, so that the values from the attachment are used
|
// 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)
|
// 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];
|
// VkFragmentShadingRateCombinerOpKHR combiner_ops[2];
|
||||||
// // If shading rate from attachment is enabled, we set the combiner, so that the values from the attachment are used
|
// // 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);
|
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)
|
static int FindMemoryTypeIndex(VkPhysicalDeviceMemoryProperties const &physicalDeviceMemoryProperties, VkMemoryRequirements const &memoryRequirements, VkMemoryPropertyFlags memoryPropertyFlags)
|
||||||
{
|
{
|
||||||
uint32_t memoryTypeBits = memoryRequirements.memoryTypeBits;
|
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)
|
for (uint32_t memoryTypeIndex = 0; memoryTypeIndex < VK_MAX_MEMORY_TYPES; ++memoryTypeIndex)
|
||||||
{
|
{
|
||||||
if ((memoryTypeBits & 1) == 1)
|
if ((memoryTypeBits & 1) == 1)
|
||||||
@ -228,6 +399,8 @@ static VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL Hook_vkGetInstanceProcAddr(VkIns
|
|||||||
INTERCEPT(vkCreateDevice);
|
INTERCEPT(vkCreateDevice);
|
||||||
INTERCEPT(vkCmdBindPipeline);
|
INTERCEPT(vkCmdBindPipeline);
|
||||||
INTERCEPT(vkCmdBindDescriptorSets);
|
INTERCEPT(vkCmdBindDescriptorSets);
|
||||||
|
INTERCEPT(vkCreateGraphicsPipelines);
|
||||||
|
INTERCEPT(vkCreateRenderPass2KHR);
|
||||||
#undef INTERCEPT
|
#undef INTERCEPT
|
||||||
|
|
||||||
return (PFN_vkVoidFunction)vkGetInstanceProcAddr(device, funcName);
|
return (PFN_vkVoidFunction)vkGetInstanceProcAddr(device, funcName);
|
||||||
@ -279,6 +452,7 @@ public:
|
|||||||
virtual void postFGExtrapolation() override;
|
virtual void postFGExtrapolation() override;
|
||||||
virtual void disableFGExtrapolation() override;
|
virtual void disableFGExtrapolation() override;
|
||||||
|
|
||||||
|
virtual void SetVKPSOHook(bool enable, int blen_state_index) override;
|
||||||
private:
|
private:
|
||||||
typedef std::vector<VulkanBuffer> VulkanBuffers;
|
typedef std::vector<VulkanBuffer> VulkanBuffers;
|
||||||
typedef std::map<unsigned long long, VulkanBuffers> DeleteQueue;
|
typedef std::map<unsigned long long, VulkanBuffers> DeleteQueue;
|
||||||
@ -513,7 +687,7 @@ void RenderAPI_Vulkan::initSupportFeature()
|
|||||||
void RenderAPI_Vulkan::enableVRS(void* data)
|
void RenderAPI_Vulkan::enableVRS(void* data)
|
||||||
{
|
{
|
||||||
int vrs_enum = *(int*) data;
|
int vrs_enum = *(int*) data;
|
||||||
curVrsIndex = vrs_enum;
|
cur_vrs_Index = vrs_enum;
|
||||||
vrs_fragment_size = vrs_argment_size_table[vrs_enum];
|
vrs_fragment_size = vrs_argment_size_table[vrs_enum];
|
||||||
vrs_enable = true;
|
vrs_enable = true;
|
||||||
}
|
}
|
||||||
@ -552,4 +726,9 @@ void RenderAPI_Vulkan::postFGExtrapolation()
|
|||||||
void RenderAPI_Vulkan::disableFGExtrapolation()
|
void RenderAPI_Vulkan::disableFGExtrapolation()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RenderAPI_Vulkan::SetVKPSOHook(bool enable, int blen_state_index)
|
||||||
|
{
|
||||||
|
blend_state_hook_enable = enable;
|
||||||
|
}
|
||||||
#endif // #if SUPPORT_VULKAN
|
#endif // #if SUPPORT_VULKAN
|
||||||
|
|||||||
@ -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);
|
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
|
// DX12 plugin specific
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user