mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-25 07:05:48 +00:00
Don't compile multiview vulkan shaders if multiview is not enabled
This commit is contained in:
@@ -477,6 +477,7 @@ private:
|
||||
bool m_DynColorWrite = false;
|
||||
bool m_DynVertexInput = false;
|
||||
bool m_DynAttachmentLoop = false;
|
||||
bool m_MultiView = false;
|
||||
bool m_MeshQueries = false;
|
||||
bool m_MeshShaders = false;
|
||||
bool m_TaskShaders = false;
|
||||
@@ -1368,6 +1369,7 @@ public:
|
||||
bool DynamicColorWrite() const { return m_DynColorWrite; }
|
||||
bool DynamicVertexInput() const { return m_DynVertexInput; }
|
||||
bool DynamicAttachmentLoop() const { return m_DynAttachmentLoop; }
|
||||
bool MultiView() const { return m_MultiView; }
|
||||
bool MeshQueries() const { return m_MeshQueries; }
|
||||
bool TaskShaders() const { return m_TaskShaders; }
|
||||
bool MeshShaders() const { return m_MeshShaders; }
|
||||
|
||||
@@ -36,6 +36,7 @@ enum class FeatureCheck
|
||||
FormatlessWrite = 0x8,
|
||||
SampleShading = 0x10,
|
||||
Geometry = 0x20,
|
||||
MultiView = 0x40,
|
||||
};
|
||||
|
||||
BITMASK_OPERATORS(FeatureCheck);
|
||||
@@ -90,13 +91,15 @@ static const BuiltinShaderConfig builtinShaders[] = {
|
||||
rdcspv::ShaderStage::Fragment, FeatureCheck::FragmentStores),
|
||||
BuiltinShaderConfig(BuiltinShader::QuadResolveMultiviewFS,
|
||||
EmbeddedResource(glsl_quadresolve_frag), rdcspv::ShaderStage::Fragment,
|
||||
FeatureCheck::FragmentStores, BuiltinShaderFlags::Multiview),
|
||||
FeatureCheck::FragmentStores | FeatureCheck::MultiView,
|
||||
BuiltinShaderFlags::Multiview),
|
||||
BuiltinShaderConfig(BuiltinShader::QuadWriteFS, EmbeddedResource(glsl_quadwrite_frag),
|
||||
rdcspv::ShaderStage::Fragment),
|
||||
BuiltinShaderConfig(BuiltinShader::QuadWriteMultiviewFS, EmbeddedResource(glsl_quadwrite_frag),
|
||||
rdcspv::ShaderStage::Fragment,
|
||||
FeatureCheck::FragmentStores | FeatureCheck::NonMetalBackend,
|
||||
BuiltinShaderFlags::Multiview),
|
||||
BuiltinShaderConfig(
|
||||
BuiltinShader::QuadWriteMultiviewFS, EmbeddedResource(glsl_quadwrite_frag),
|
||||
rdcspv::ShaderStage::Fragment,
|
||||
FeatureCheck::FragmentStores | FeatureCheck::NonMetalBackend | FeatureCheck::MultiView,
|
||||
BuiltinShaderFlags::Multiview),
|
||||
BuiltinShaderConfig(BuiltinShader::TrisizeGS, EmbeddedResource(glsl_trisize_geom),
|
||||
rdcspv::ShaderStage::Geometry),
|
||||
BuiltinShaderConfig(BuiltinShader::TrisizeFS, EmbeddedResource(glsl_trisize_frag),
|
||||
@@ -148,8 +151,8 @@ static const BuiltinShaderConfig builtinShaders[] = {
|
||||
RDCCOMPILE_ASSERT(ARRAY_COUNT(builtinShaders) == arraydim<BuiltinShader>(),
|
||||
"Missing built-in shader config");
|
||||
|
||||
static bool PassesChecks(const BuiltinShaderConfig &config, const VkDriverInfo &driverVersion,
|
||||
const VkPhysicalDeviceFeatures &features)
|
||||
static bool PassesChecks(const BuiltinShaderConfig &config, const WrappedVulkan *driver,
|
||||
const VkDriverInfo &driverVersion, const VkPhysicalDeviceFeatures &features)
|
||||
{
|
||||
if(config.checks & FeatureCheck::ShaderMSAAStorage)
|
||||
{
|
||||
@@ -198,6 +201,14 @@ static bool PassesChecks(const BuiltinShaderConfig &config, const VkDriverInfo &
|
||||
}
|
||||
}
|
||||
|
||||
if(config.checks & FeatureCheck::MultiView)
|
||||
{
|
||||
if(!driver->MultiView())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(config.stage == rdcspv::ShaderStage::Geometry && !features.geometryShader)
|
||||
return false;
|
||||
|
||||
@@ -262,8 +273,8 @@ VulkanShaderCache::VulkanShaderCache(WrappedVulkan *driver)
|
||||
rdcspv::CompilationSettings compileSettings;
|
||||
compileSettings.lang = rdcspv::InputLanguage::VulkanGLSL;
|
||||
|
||||
m_Buffer2MSSupported =
|
||||
PassesChecks(builtinShaders[(size_t)BuiltinShader::Buffer2MSCS], driverVersion, availFeatures);
|
||||
m_Buffer2MSSupported = PassesChecks(builtinShaders[(size_t)BuiltinShader::Buffer2MSCS], driver,
|
||||
driverVersion, availFeatures);
|
||||
|
||||
for(auto i : indices<BuiltinShader>())
|
||||
{
|
||||
@@ -271,7 +282,7 @@ VulkanShaderCache::VulkanShaderCache(WrappedVulkan *driver)
|
||||
|
||||
RDCASSERT(config.builtin == (BuiltinShader)i);
|
||||
|
||||
bool passesChecks = PassesChecks(config, driverVersion, enabledFeatures);
|
||||
bool passesChecks = PassesChecks(config, driver, driverVersion, enabledFeatures);
|
||||
|
||||
if(!passesChecks)
|
||||
continue;
|
||||
|
||||
@@ -2344,6 +2344,8 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
CHECK_PHYS_EXT_FEATURE(protectedMemory);
|
||||
CHECK_PHYS_EXT_FEATURE(samplerYcbcrConversion);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderDrawParameters);
|
||||
|
||||
m_MultiView |= ext->multiview != VK_FALSE;
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
|
||||
@@ -2487,6 +2489,8 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
CHECK_PHYS_EXT_FEATURE(multiview);
|
||||
CHECK_PHYS_EXT_FEATURE(multiviewGeometryShader);
|
||||
CHECK_PHYS_EXT_FEATURE(multiviewTessellationShader);
|
||||
|
||||
m_MultiView |= ext->multiview != VK_FALSE;
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user