Check for multiview geometry feature

* This means the triangle size overlay will not be available.
This commit is contained in:
baldurk
2026-01-30 15:58:45 +00:00
parent c991d66b83
commit a5d5e4d7fe
4 changed files with 26 additions and 8 deletions
+2
View File
@@ -580,6 +580,7 @@ private:
bool m_DynVertexInput = false;
bool m_DynAttachmentLoop = false;
bool m_MultiView = false;
bool m_MultiViewGeometryShaders = false;
bool m_MeshQueries = false;
bool m_MeshShaders = false;
bool m_TaskShaders = false;
@@ -1571,6 +1572,7 @@ public:
bool Maintenance6() const { return m_Maintenance6; }
bool Maintenance9() const { return m_Maintenance9; }
bool DescriptorBuffers() const { return m_DescriptorBuffers; }
bool MultiViewGeometryShaders() const { return m_MultiViewGeometryShaders; }
bool MultiviewPerViewViewports() const { return m_MultiviewPerViewViewports; }
VulkanRenderState &GetRenderState() { return m_RenderState; }
void SetActionCB(VulkanActionCallback *cb) { m_ActionCallback = cb; }
+1 -1
View File
@@ -3324,7 +3324,7 @@ ResourceId VulkanReplay::RenderOverlay(ResourceId texid, FloatVector clearCol, D
}
else if(overlay == DebugOverlay::TriangleSizePass || overlay == DebugOverlay::TriangleSizeDraw)
{
if(!state.rastDiscardEnable)
if(!state.rastDiscardEnable && (multiviewMask == 0 || m_pDriver->MultiViewGeometryShaders()))
{
VulkanRenderState prevstate = state;
@@ -2387,6 +2387,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
CHECK_PHYS_EXT_FEATURE(shaderDrawParameters);
m_MultiView |= ext->multiview != VK_FALSE;
if(avail.multiviewGeometryShader)
ext->multiviewGeometryShader = true;
else
RDCWARN(
"multiviewGeometryShader = false, triangle size overlay with multiview unavailable");
m_MultiViewGeometryShaders |= ext->multiviewGeometryShader != VK_FALSE;
}
END_PHYS_EXT_CHECK();
+15 -7
View File
@@ -122,6 +122,9 @@ void main()
}
)EOSHADER";
bool geometryTest = false;
void Prepare(int argc, char **argv)
{
features.geometryShader = VK_TRUE;
@@ -137,6 +140,8 @@ void main()
if(!multiview.multiview)
Avail = "Multiview feature 'multiview' not available";
geometryTest = multiview.multiviewGeometryShader == VK_TRUE;
devInfoNext = &multiview;
}
@@ -233,13 +238,16 @@ void main()
testPipes.push_back(createGraphicsPipeline(pipeCreateInfo));
testNames.push_back("Fragment: viewIndex");
pipeCreateInfo.stages = {
CompileShaderModule(VKDefaultVertex, ShaderLang::glsl, ShaderStage::vert, "main"),
CompileShaderModule(VKDefaultPixel, ShaderLang::glsl, ShaderStage::frag, "main"),
CompileShaderModule(multiViewGeom, ShaderLang::glsl, ShaderStage::geom, "main"),
};
testPipes.push_back(createGraphicsPipeline(pipeCreateInfo));
testNames.push_back("Geometry: viewIndex");
if(geometryTest)
{
pipeCreateInfo.stages = {
CompileShaderModule(VKDefaultVertex, ShaderLang::glsl, ShaderStage::vert, "main"),
CompileShaderModule(VKDefaultPixel, ShaderLang::glsl, ShaderStage::frag, "main"),
CompileShaderModule(multiViewGeom, ShaderLang::glsl, ShaderStage::geom, "main"),
};
testPipes.push_back(createGraphicsPipeline(pipeCreateInfo));
testNames.push_back("Geometry: viewIndex");
}
pipeCreateInfo.stages = {
CompileShaderModule(VKDefaultVertex, ShaderLang::glsl, ShaderStage::vert, "main"),