DRI_CONF_SECTION_DEBUG
DRI_CONF_DZN_CLAIM_WIDE_LINES(false)
DRI_CONF_DZN_ENABLE_8BIT_LOADS_STORES(false)
+ /* Default-disabled because the CTS doesn't check subgroupQuadOperationsInAllStages
+ * and tries to do quad ops in VS/GS which is unsupported. */
+ DRI_CONF_DZN_ENABLE_SUBGROUP_OPS_IN_VTX_PIPELINE(false)
DRI_CONF_SECTION_END
};
VkPhysicalDeviceProperties2 *pProperties)
{
VK_FROM_HANDLE(dzn_physical_device, pdevice, physicalDevice);
+ struct dzn_instance *instance = container_of(pdevice->vk.instance, struct dzn_instance, vk);
(void)dzn_physical_device_get_d3d12_dev(pdevice);
VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT |
VK_SUBGROUP_FEATURE_QUAD_BIT |
VK_SUBGROUP_FEATURE_ARITHMETIC_BIT,
- /* Note: The CTS doesn't seem to respect the subgroupQuadOperationsInAllStages bit, and it
- * seems more useful to support quad ops in FS/CS than subgroup ops at all in VS/GS. */
- .subgroupSupportedStages = VK_SHADER_STAGE_FRAGMENT_BIT | VK_SHADER_STAGE_COMPUTE_BIT,
+ .subgroupSupportedStages = VK_SHADER_STAGE_FRAGMENT_BIT | VK_SHADER_STAGE_COMPUTE_BIT |
+ (driQueryOptionb(&instance->dri_options, "dzn_enable_subgroup_ops_in_vtx_pipeline") ?
+ (VK_SHADER_STAGE_GEOMETRY_BIT | VK_SHADER_STAGE_VERTEX_BIT) : 0),
.subgroupQuadOperationsInAllStages = false,
.subgroupSize = pdevice->options1.WaveOps ? pdevice->options1.WaveLaneCountMin : 1,
};
<device driver="dzn">
<application name="DOOMEternal" executable="DOOMEternalx64vk.exe">
<option name="dzn_enable_8bit_loads_stores" value="true" />
+ <option name="dzn_enable_subgroup_ops_in_vtx_pipeline" value="true" />
<option name="dzn_claim_wide_lines" value="true" />
</application>
<application name="No Man's Sky" executable="NMS.exe">
#define DRI_CONF_DZN_ENABLE_8BIT_LOADS_STORES(def) \
DRI_CONF_OPT_B(dzn_enable_8bit_loads_stores, def, "Enable VK_KHR_8bit_loads_stores")
+#define DRI_CONF_DZN_ENABLE_SUBGROUP_OPS_IN_VTX_PIPELINE(def) \
+ DRI_CONF_OPT_B(dzn_enable_subgroup_ops_in_vtx_pipeline, def, "Enable subgroup ops in pre-rasterizer stages (VS/GS)")
+
#endif