From 20b2f0e7b814de3c73b0897aa78a136e906a2f5b Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Sun, 28 Apr 2024 07:09:58 -0400 Subject: [PATCH] Add support for more shader structures as seen in Dawntrail Benchmark Not sure what these are yet, but stops the renderer from complaining. --- renderer/include/gamerenderer.h | 1 + renderer/include/shaderstructs.h | 13 ++++++++++++- renderer/src/gamerenderer.cpp | 18 ++++++++++++++++-- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/renderer/include/gamerenderer.h b/renderer/include/gamerenderer.h index bbb1fb2..fbe3942 100644 --- a/renderer/include/gamerenderer.h +++ b/renderer/include/gamerenderer.h @@ -92,6 +92,7 @@ private: Buffer g_MaterialParameterDynamic; Buffer g_DecalColor; Buffer g_AmbientParam; + Buffer g_ShaderTypeParameter; Buffer m_planeVertexBuffer; diff --git a/renderer/include/shaderstructs.h b/renderer/include/shaderstructs.h index 070c5fa..ec8a0ba 100644 --- a/renderer/include/shaderstructs.h +++ b/renderer/include/shaderstructs.h @@ -16,10 +16,14 @@ struct CameraParameter { glm::vec4 m_LookAtVector; }; -struct JointMatrixArray { +struct JointMatrixArrayARR { glm::mat3x4 g_JointMatrixArray[64]; }; +struct JointMatrixArrayDawntrail { + glm::mat3x4 g_JointMatrixArray[768]; +}; + struct CameraLight { glm::vec4 m_DiffuseSpecular; glm::vec4 m_Rim; @@ -95,4 +99,11 @@ struct MaterialParameterDynamic { struct AmbientParameters { glm::vec4 g_AmbientParam[6]; + // As seen in Dawntrail characterlegacy.shpk + glm::vec4 g_AdditionalAmbientParam[4]; +}; + +// Dawntrail, unknown purpose +struct ShaderTypeParameter { + glm::vec4 m[2044]; }; \ No newline at end of file diff --git a/renderer/src/gamerenderer.cpp b/renderer/src/gamerenderer.cpp index 3746919..f76aad8 100644 --- a/renderer/src/gamerenderer.cpp +++ b/renderer/src/gamerenderer.cpp @@ -180,8 +180,20 @@ GameRenderer::GameRenderer(Device &device, GameData *data) for (int i = 0; i < 6; i++) { ambientParameters.g_AmbientParam[i] = glm::vec4(1.0f); } + for (int i = 0; i < 4; i++) { + ambientParameters.g_AdditionalAmbientParam[i] = glm::vec4(1.0f); + } - m_device.copyToBuffer(g_AmbientParam, &ambientParameters, sizeof(glm::vec4)); + m_device.copyToBuffer(g_AmbientParam, &ambientParameters, sizeof(AmbientParameters)); + } + + // shader type parameter + if (m_dawntrailMode) { + g_ShaderTypeParameter = m_device.createBuffer(sizeof(ShaderTypeParameter), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT); + + ShaderTypeParameter shaderTypeParameter{}; + + m_device.copyToBuffer(g_ShaderTypeParameter, &g_ShaderTypeParameter, sizeof(ShaderTypeParameter)); } VkSamplerCreateInfo samplerInfo = {}; @@ -1192,7 +1204,7 @@ GameRenderer::createDescriptorFor(const DrawObject *object, const CachedPipeline auto info = &imageInfo.emplace_back(); descriptorWrite.pImageInfo = info; - if (binding.stageFlags == VK_SHADER_STAGE_FRAGMENT_BIT && p < pipeline.pixelShader.num_resource_parameters) { + if (binding.stageFlags == VK_SHADER_STAGE_FRAGMENT_BIT && p + 1 < pipeline.pixelShader.num_resource_parameters) { auto name = pipeline.pixelShader.resource_parameters[p].name; qInfo() << "Requesting image" << name << "at" << j; if (strcmp(name, "g_SamplerGBuffer") == 0) { @@ -1280,6 +1292,8 @@ GameRenderer::createDescriptorFor(const DrawObject *object, const CachedPipeline useUniformBuffer(g_DecalColor); } else if (strcmp(name, "g_AmbientParam") == 0) { useUniformBuffer(g_AmbientParam); + } else if (strcmp(name, "g_ShaderTypeParameter") == 0) { + useUniformBuffer(g_ShaderTypeParameter); } else { qInfo() << "Unknown resource:" << name; info->buffer = m_dummyBuffer.buffer;