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:
parent
afdaba6caf
commit
d657a526ae
@ -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);
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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 };
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user