1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-15 07:29:17 +01:00

[dxvk] Replace VK_EXT_shader_viewport_index_layer with core features

And enable them optionally in the backend, since we use this for meta
operations.
This commit is contained in:
Philip Rebohle 2022-07-14 20:03:53 +02:00
parent afdaba6caf
commit d657a526ae
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
6 changed files with 12 additions and 9 deletions

View File

@ -1712,10 +1712,12 @@ namespace dxvk {
if (FeatureSupportDataSize != sizeof(D3D11_FEATURE_DATA_D3D11_OPTIONS3)) if (FeatureSupportDataSize != sizeof(D3D11_FEATURE_DATA_D3D11_OPTIONS3))
return E_INVALIDARG; return E_INVALIDARG;
const auto& extensions = m_dxvkDevice->extensions(); const auto& features = m_dxvkDevice->features();
auto info = static_cast<D3D11_FEATURE_DATA_D3D11_OPTIONS3*>(pFeatureSupportData); auto info = static_cast<D3D11_FEATURE_DATA_D3D11_OPTIONS3*>(pFeatureSupportData);
info->VPAndRTArrayIndexFromAnyShaderFeedingRasterizer = extensions.extShaderViewportIndexLayer; info->VPAndRTArrayIndexFromAnyShaderFeedingRasterizer =
features.vk12.shaderOutputViewportIndex &&
features.vk12.shaderOutputLayer;
} return S_OK; } return S_OK;
case D3D11_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT: { case D3D11_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT: {
@ -2023,7 +2025,8 @@ namespace dxvk {
return E_INVALIDARG; return E_INVALIDARG;
if (shader->flags().test(DxvkShaderFlag::ExportsViewportIndexLayerFromVertexStage) if (shader->flags().test(DxvkShaderFlag::ExportsViewportIndexLayerFromVertexStage)
&& !m_dxvkDevice->extensions().extShaderViewportIndexLayer) && (!m_dxvkDevice->features().vk12.shaderOutputViewportIndex
|| !m_dxvkDevice->features().vk12.shaderOutputLayer))
return E_INVALIDARG; return E_INVALIDARG;
*pShaderModule = std::move(commonShader); *pShaderModule = std::move(commonShader);

View File

@ -283,7 +283,7 @@ namespace dxvk {
DxvkDeviceFeatures enabledFeatures) { DxvkDeviceFeatures enabledFeatures) {
DxvkDeviceExtensions devExtensions; DxvkDeviceExtensions devExtensions;
std::array<DxvkExt*, 31> devExtensionList = {{ std::array<DxvkExt*, 30> devExtensionList = {{
&devExtensions.amdMemoryOverallocationBehaviour, &devExtensions.amdMemoryOverallocationBehaviour,
&devExtensions.amdShaderFragmentMask, &devExtensions.amdShaderFragmentMask,
&devExtensions.ext4444Formats, &devExtensions.ext4444Formats,
@ -301,7 +301,6 @@ namespace dxvk {
&devExtensions.extShaderDemoteToHelperInvocation, &devExtensions.extShaderDemoteToHelperInvocation,
&devExtensions.extShaderModuleIdentifier, &devExtensions.extShaderModuleIdentifier,
&devExtensions.extShaderStencilExport, &devExtensions.extShaderStencilExport,
&devExtensions.extShaderViewportIndexLayer,
&devExtensions.extTransformFeedback, &devExtensions.extTransformFeedback,
&devExtensions.extVertexAttributeDivisor, &devExtensions.extVertexAttributeDivisor,
&devExtensions.khrCreateRenderPass2, &devExtensions.khrCreateRenderPass2,
@ -347,6 +346,8 @@ namespace dxvk {
// Enable additional device features if supported // Enable additional device features if supported
enabledFeatures.vk12.drawIndirectCount = m_deviceFeatures.vk12.drawIndirectCount; enabledFeatures.vk12.drawIndirectCount = m_deviceFeatures.vk12.drawIndirectCount;
enabledFeatures.vk12.hostQueryReset = VK_TRUE; enabledFeatures.vk12.hostQueryReset = VK_TRUE;
enabledFeatures.vk12.shaderOutputViewportIndex = m_deviceFeatures.vk12.shaderOutputViewportIndex;
enabledFeatures.vk12.shaderOutputLayer = m_deviceFeatures.vk12.shaderOutputLayer;
enabledFeatures.extExtendedDynamicState.extendedDynamicState = VK_TRUE; enabledFeatures.extExtendedDynamicState.extendedDynamicState = VK_TRUE;

View File

@ -293,7 +293,6 @@ namespace dxvk {
DxvkExt extShaderDemoteToHelperInvocation = { VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extShaderDemoteToHelperInvocation = { VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extShaderModuleIdentifier = { VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extShaderModuleIdentifier = { VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extShaderStencilExport = { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extShaderStencilExport = { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extShaderViewportIndexLayer = { VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extTransformFeedback = { VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extTransformFeedback = { VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extVertexAttributeDivisor = { VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extVertexAttributeDivisor = { VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrCreateRenderPass2 = { VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, DxvkExtMode::Required }; DxvkExt khrCreateRenderPass2 = { VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, DxvkExtMode::Required };

View File

@ -133,7 +133,7 @@ namespace dxvk {
m_shaderFrag1D(createShaderModule(dxvk_blit_frag_1d)), m_shaderFrag1D(createShaderModule(dxvk_blit_frag_1d)),
m_shaderFrag2D(createShaderModule(dxvk_blit_frag_2d)), m_shaderFrag2D(createShaderModule(dxvk_blit_frag_2d)),
m_shaderFrag3D(createShaderModule(dxvk_blit_frag_3d)) { m_shaderFrag3D(createShaderModule(dxvk_blit_frag_3d)) {
if (device->extensions().extShaderViewportIndexLayer) { if (device->features().vk12.shaderOutputLayer) {
m_shaderVert = createShaderModule(dxvk_fullscreen_layer_vert); m_shaderVert = createShaderModule(dxvk_fullscreen_layer_vert);
} else { } else {
m_shaderVert = createShaderModule(dxvk_fullscreen_vert); m_shaderVert = createShaderModule(dxvk_fullscreen_vert);

View File

@ -89,7 +89,7 @@ namespace dxvk {
createShaderModule(dxvk_copy_depth_1d), createShaderModule(dxvk_copy_depth_1d),
createShaderModule(dxvk_copy_depth_2d), createShaderModule(dxvk_copy_depth_2d),
createShaderModule(dxvk_copy_depth_ms) } { createShaderModule(dxvk_copy_depth_ms) } {
if (device->extensions().extShaderViewportIndexLayer) { if (device->features().vk12.shaderOutputLayer) {
m_shaderVert = createShaderModule(dxvk_fullscreen_layer_vert); m_shaderVert = createShaderModule(dxvk_fullscreen_layer_vert);
} else { } else {
m_shaderVert = createShaderModule(dxvk_fullscreen_vert); m_shaderVert = createShaderModule(dxvk_fullscreen_vert);

View File

@ -64,7 +64,7 @@ namespace dxvk {
if (device->extensions().extShaderStencilExport) if (device->extensions().extShaderStencilExport)
m_shaderFragDS = createShaderModule(dxvk_resolve_frag_ds); m_shaderFragDS = createShaderModule(dxvk_resolve_frag_ds);
if (device->extensions().extShaderViewportIndexLayer) { if (device->features().vk12.shaderOutputLayer) {
m_shaderVert = createShaderModule(dxvk_fullscreen_layer_vert); m_shaderVert = createShaderModule(dxvk_fullscreen_layer_vert);
} else { } else {
m_shaderVert = createShaderModule(dxvk_fullscreen_vert); m_shaderVert = createShaderModule(dxvk_fullscreen_vert);