mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-13 19:29:14 +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))
|
||||
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);
|
||||
info->VPAndRTArrayIndexFromAnyShaderFeedingRasterizer = extensions.extShaderViewportIndexLayer;
|
||||
info->VPAndRTArrayIndexFromAnyShaderFeedingRasterizer =
|
||||
features.vk12.shaderOutputViewportIndex &&
|
||||
features.vk12.shaderOutputLayer;
|
||||
} return S_OK;
|
||||
|
||||
case D3D11_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT: {
|
||||
@ -2023,7 +2025,8 @@ namespace dxvk {
|
||||
return E_INVALIDARG;
|
||||
|
||||
if (shader->flags().test(DxvkShaderFlag::ExportsViewportIndexLayerFromVertexStage)
|
||||
&& !m_dxvkDevice->extensions().extShaderViewportIndexLayer)
|
||||
&& (!m_dxvkDevice->features().vk12.shaderOutputViewportIndex
|
||||
|| !m_dxvkDevice->features().vk12.shaderOutputLayer))
|
||||
return E_INVALIDARG;
|
||||
|
||||
*pShaderModule = std::move(commonShader);
|
||||
|
@ -283,7 +283,7 @@ namespace dxvk {
|
||||
DxvkDeviceFeatures enabledFeatures) {
|
||||
DxvkDeviceExtensions devExtensions;
|
||||
|
||||
std::array<DxvkExt*, 31> devExtensionList = {{
|
||||
std::array<DxvkExt*, 30> devExtensionList = {{
|
||||
&devExtensions.amdMemoryOverallocationBehaviour,
|
||||
&devExtensions.amdShaderFragmentMask,
|
||||
&devExtensions.ext4444Formats,
|
||||
@ -301,7 +301,6 @@ namespace dxvk {
|
||||
&devExtensions.extShaderDemoteToHelperInvocation,
|
||||
&devExtensions.extShaderModuleIdentifier,
|
||||
&devExtensions.extShaderStencilExport,
|
||||
&devExtensions.extShaderViewportIndexLayer,
|
||||
&devExtensions.extTransformFeedback,
|
||||
&devExtensions.extVertexAttributeDivisor,
|
||||
&devExtensions.khrCreateRenderPass2,
|
||||
@ -347,6 +346,8 @@ namespace dxvk {
|
||||
// Enable additional device features if supported
|
||||
enabledFeatures.vk12.drawIndirectCount = m_deviceFeatures.vk12.drawIndirectCount;
|
||||
enabledFeatures.vk12.hostQueryReset = VK_TRUE;
|
||||
enabledFeatures.vk12.shaderOutputViewportIndex = m_deviceFeatures.vk12.shaderOutputViewportIndex;
|
||||
enabledFeatures.vk12.shaderOutputLayer = m_deviceFeatures.vk12.shaderOutputLayer;
|
||||
|
||||
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 extShaderModuleIdentifier = { VK_EXT_SHADER_MODULE_IDENTIFIER_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 extVertexAttributeDivisor = { VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||
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_shaderFrag2D(createShaderModule(dxvk_blit_frag_2d)),
|
||||
m_shaderFrag3D(createShaderModule(dxvk_blit_frag_3d)) {
|
||||
if (device->extensions().extShaderViewportIndexLayer) {
|
||||
if (device->features().vk12.shaderOutputLayer) {
|
||||
m_shaderVert = createShaderModule(dxvk_fullscreen_layer_vert);
|
||||
} else {
|
||||
m_shaderVert = createShaderModule(dxvk_fullscreen_vert);
|
||||
|
@ -89,7 +89,7 @@ namespace dxvk {
|
||||
createShaderModule(dxvk_copy_depth_1d),
|
||||
createShaderModule(dxvk_copy_depth_2d),
|
||||
createShaderModule(dxvk_copy_depth_ms) } {
|
||||
if (device->extensions().extShaderViewportIndexLayer) {
|
||||
if (device->features().vk12.shaderOutputLayer) {
|
||||
m_shaderVert = createShaderModule(dxvk_fullscreen_layer_vert);
|
||||
} else {
|
||||
m_shaderVert = createShaderModule(dxvk_fullscreen_vert);
|
||||
|
@ -64,7 +64,7 @@ namespace dxvk {
|
||||
if (device->extensions().extShaderStencilExport)
|
||||
m_shaderFragDS = createShaderModule(dxvk_resolve_frag_ds);
|
||||
|
||||
if (device->extensions().extShaderViewportIndexLayer) {
|
||||
if (device->features().vk12.shaderOutputLayer) {
|
||||
m_shaderVert = createShaderModule(dxvk_fullscreen_layer_vert);
|
||||
} else {
|
||||
m_shaderVert = createShaderModule(dxvk_fullscreen_vert);
|
||||
|
Loading…
x
Reference in New Issue
Block a user