diff --git a/res/shaders/MeshletBasePass.slang b/res/shaders/MeshletBasePass.slang index 66c18d1..7f280e9 100644 --- a/res/shaders/MeshletBasePass.slang +++ b/res/shaders/MeshletBasePass.slang @@ -48,7 +48,7 @@ void taskMain( { uint m = mesh.meshletOffset + i; MeshletDescription meshlet = pScene.meshletInfos[m]; - if(meshlet.boundingBox.insideFrustum(localToClip, viewFrustum)) + //if(meshlet.boundingBox.insideFrustum(localToClip, viewFrustum)) { uint index; InterlockedAdd(head, 1, index); diff --git a/res/shaders/lib/AABB.slang b/res/shaders/lib/AABB.slang index e9ee46d..0567ef1 100644 --- a/res/shaders/lib/AABB.slang +++ b/res/shaders/lib/AABB.slang @@ -20,13 +20,11 @@ struct AABB for(int i = 0; i < 8; ++i) { float3 adjusted = corners[i].xyz / corners[i].w; - if(adjusted.z > 0) + if(frustum.pointInside(adjusted)) { - if(frustum.pointInside(adjusted)) - { - return true; - } + return true; } + } return false; } diff --git a/res/shaders/lib/Common.slang b/res/shaders/lib/Common.slang index de10e1d..c1c6f5e 100644 --- a/res/shaders/lib/Common.slang +++ b/res/shaders/lib/Common.slang @@ -38,7 +38,7 @@ struct Plane float d; bool pointInside(float3 point) { - return dot(n, point) - d > 0.0f; + return dot(n, point) - d < 0.0f; } }; @@ -49,7 +49,7 @@ struct Frustum { for(int p = 0; p < 4; ++p) { - if(!sides[p].pointInside(point)) + if(sides[p].pointInside(point)) { return false; } diff --git a/src/Engine/Actor/StaticMeshActor.h b/src/Engine/Actor/StaticMeshActor.h index 66853f6..101441f 100644 --- a/src/Engine/Actor/StaticMeshActor.h +++ b/src/Engine/Actor/StaticMeshActor.h @@ -13,4 +13,5 @@ public: const Component::Mesh& getMesh() const; private: }; +DEFINE_REF(StaticMeshActor) } // namespace Seele diff --git a/src/Engine/Graphics/RenderPass/BasePass.cpp b/src/Engine/Graphics/RenderPass/BasePass.cpp index eef64ad..fa355f0 100644 --- a/src/Engine/Graphics/RenderPass/BasePass.cpp +++ b/src/Engine/Graphics/RenderPass/BasePass.cpp @@ -103,7 +103,7 @@ void BasePass::render() permutation.setMaterial(materialData.material->getName()); Gfx::PermutationId id(permutation); - Gfx::PRenderCommand command = graphics->createRenderCommand("DepthRender"); + Gfx::PRenderCommand command = graphics->createRenderCommand("BaseRender"); command->setViewport(viewport); Gfx::OPipelineLayout layout = graphics->createPipelineLayout(basePassLayout); layout->addDescriptorLayout(INDEX_MATERIAL, materialData.material->getDescriptorLayout()); diff --git a/src/Engine/Graphics/Vulkan/Graphics.cpp b/src/Engine/Graphics/Vulkan/Graphics.cpp index 89a1d11..5b125b7 100644 --- a/src/Engine/Graphics/Vulkan/Graphics.cpp +++ b/src/Engine/Graphics/Vulkan/Graphics.cpp @@ -484,7 +484,7 @@ void Graphics::pickPhysicalDevice() { if (std::strcmp(VK_EXT_MESH_SHADER_EXTENSION_NAME, extensionProps[i].extensionName) == 0) { - //meshShadingEnabled = true; + meshShadingEnabled = true; break; } } diff --git a/src/Engine/Graphics/Vulkan/PipelineCache.cpp b/src/Engine/Graphics/Vulkan/PipelineCache.cpp index a252bf2..96dc90d 100644 --- a/src/Engine/Graphics/Vulkan/PipelineCache.cpp +++ b/src/Engine/Graphics/Vulkan/PipelineCache.cpp @@ -94,9 +94,12 @@ PGraphicsPipeline PipelineCache::createPipeline(Gfx::LegacyPipelineCreateInfo gf PVertexShader vertexShader = gfxInfo.vertexShader.cast(); stageInfos[stageCount++] = { .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, + .pNext = nullptr, + .flags = 0, .stage = VK_SHADER_STAGE_VERTEX_BIT, .module = vertexShader->getModuleHandle(), .pName = vertexShader->getEntryPointName(), + .pSpecializationInfo = nullptr, }; if (gfxInfo.fragmentShader != nullptr) @@ -105,9 +108,12 @@ PGraphicsPipeline PipelineCache::createPipeline(Gfx::LegacyPipelineCreateInfo gf stageInfos[stageCount++] = { .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, + .pNext = nullptr, + .flags = 0, .stage = VK_SHADER_STAGE_FRAGMENT_BIT, .module = fragment->getModuleHandle(), .pName = fragment->getEntryPointName(), + .pSpecializationInfo = nullptr, }; } hash = CRC::Calculate(stageInfos, sizeof(stageInfos), CRC::CRC_32(), hash); @@ -124,7 +130,9 @@ PGraphicsPipeline PipelineCache::createPipeline(Gfx::LegacyPipelineCreateInfo gf .pNext = nullptr, .flags = 0, .viewportCount = 1, + .pViewports = nullptr, .scissorCount = 1, + .pScissors = nullptr, }; hash = CRC::Calculate(&viewportInfo, sizeof(viewportInfo), CRC::CRC_32(), hash); VkPipelineRasterizationStateCreateInfo rasterizationState = { @@ -198,6 +206,7 @@ PGraphicsPipeline PipelineCache::createPipeline(Gfx::LegacyPipelineCreateInfo gf .pAttachments = blendAttachments.data(), }; std::memcpy(blendState.blendConstants, gfxInfo.colorBlend.blendConstants.data(), sizeof(blendState.blendConstants)); + hash = CRC::Calculate(&blendState, sizeof(blendState), CRC::CRC_32(), hash); uint32 numDynamicEnabled = 0; StaticArray dynamicEnabled; @@ -208,6 +217,7 @@ PGraphicsPipeline PipelineCache::createPipeline(Gfx::LegacyPipelineCreateInfo gf VkPipelineDynamicStateCreateInfo dynamicState = { .sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, .pNext = nullptr, + .flags = 0, .dynamicStateCount = (uint32)dynamicEnabled.size(), .pDynamicStates = dynamicEnabled.data(), }; diff --git a/src/Engine/Graphics/Vulkan/PipelineCache.h b/src/Engine/Graphics/Vulkan/PipelineCache.h index e6bbfc0..2f2b3e9 100644 --- a/src/Engine/Graphics/Vulkan/PipelineCache.h +++ b/src/Engine/Graphics/Vulkan/PipelineCache.h @@ -14,7 +14,7 @@ public: PGraphicsPipeline createPipeline(Gfx::MeshPipelineCreateInfo createInfo); PComputePipeline createPipeline(Gfx::ComputePipelineCreateInfo createInfo); private: - Map graphicsPipelines; + std::map graphicsPipelines; Map computePipelines; std::mutex cacheLock; VkPipelineCache cache;