Module: wine Branch: master Commit: 775812ab11263dac6d1e20bd022ba7dbee33dd57 URL: https://gitlab.winehq.org/wine/wine/-/commit/775812ab11263dac6d1e20bd022ba7d...
Author: Zebediah Figura zfigura@codeweavers.com Date: Sun Mar 20 20:21:59 2022 -0500
d3d11: Report support for shader stencil export if available.
---
dlls/d3d11/device.c | 11 ++++++++++- dlls/wined3d/adapter_gl.c | 1 + dlls/wined3d/adapter_vk.c | 1 + dlls/wined3d/directx.c | 1 + dlls/wined3d/wined3d_private.h | 1 + include/wine/wined3d.h | 1 + 6 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c index fa100ec075e..061fd57fe09 100644 --- a/dlls/d3d11/device.c +++ b/dlls/d3d11/device.c @@ -4171,7 +4171,16 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CheckFeatureSupport(ID3D11Device2 return E_INVALIDARG; }
- options->PSSpecifiedStencilRefSupported = FALSE; + wined3d_mutex_lock(); + hr = wined3d_device_get_device_caps(device->wined3d_device, &wined3d_caps); + wined3d_mutex_unlock(); + if (FAILED(hr)) + { + WARN("Failed to get device caps, hr %#lx.\n", hr); + return hr; + } + + options->PSSpecifiedStencilRefSupported = wined3d_caps.stencil_export; options->TypedUAVLoadAdditionalFormats = FALSE; options->ROVsSupported = FALSE; options->ConservativeRasterizationTier = D3D11_CONSERVATIVE_RASTERIZATION_NOT_SUPPORTED; diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c index 34cbeea9c4b..7ae3143a891 100644 --- a/dlls/wined3d/adapter_gl.c +++ b/dlls/wined3d/adapter_gl.c @@ -5196,6 +5196,7 @@ static void wined3d_adapter_gl_init_d3d_info(struct wined3d_adapter_gl *adapter_ d3d_info->shader_output_interpolation = !!(shader_caps.wined3d_caps & WINED3D_SHADER_CAP_OUTPUT_INTERPOLATION); d3d_info->frag_coord_correction = !!gl_info->supported[ARB_FRAGMENT_COORD_CONVENTIONS]; d3d_info->viewport_array_index_any_shader = !!gl_info->supported[ARB_SHADER_VIEWPORT_LAYER_ARRAY]; + d3d_info->stencil_export = !!gl_info->supported[ARB_SHADER_STENCIL_EXPORT]; d3d_info->texture_npot = !!gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO]; d3d_info->texture_npot_conditional = gl_info->supported[WINED3D_GL_NORMALIZED_TEXRECT] || gl_info->supported[ARB_TEXTURE_RECTANGLE]; diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c index a7ee18bfc49..1216a84e990 100644 --- a/dlls/wined3d/adapter_vk.c +++ b/dlls/wined3d/adapter_vk.c @@ -2306,6 +2306,7 @@ static void wined3d_adapter_vk_init_d3d_info(struct wined3d_adapter_vk *adapter_ d3d_info->shader_double_precision = !!(shader_caps.wined3d_caps & WINED3D_SHADER_CAP_DOUBLE_PRECISION); d3d_info->shader_output_interpolation = !!(shader_caps.wined3d_caps & WINED3D_SHADER_CAP_OUTPUT_INTERPOLATION); d3d_info->viewport_array_index_any_shader = false; /* VK_EXT_shader_viewport_index_layer */ + d3d_info->stencil_export = vk_info->supported[WINED3D_VK_EXT_SHADER_STENCIL_EXPORT]; d3d_info->texture_npot = true; d3d_info->texture_npot_conditional = true; d3d_info->normalized_texrect = false; diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 11d829c2756..50990e4cd0e 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -2709,6 +2709,7 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d_adapter *adapter,
caps->shader_double_precision = d3d_info->shader_double_precision; caps->viewport_array_index_any_shader = d3d_info->viewport_array_index_any_shader; + caps->stencil_export = d3d_info->stencil_export;
caps->max_feature_level = d3d_info->feature_level;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 6d1cd837ac4..549a2aa7a7a 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -221,6 +221,7 @@ struct wined3d_d3d_info uint32_t shader_output_interpolation : 1; uint32_t frag_coord_correction : 1; uint32_t viewport_array_index_any_shader : 1; + uint32_t stencil_export : 1; uint32_t texture_npot : 1; uint32_t texture_npot_conditional : 1; uint32_t normalized_texrect : 1; diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index fcbe094e30b..492065711f3 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2000,6 +2000,7 @@ struct wined3d_caps
BOOL shader_double_precision; BOOL viewport_array_index_any_shader; + BOOL stencil_export;
enum wined3d_feature_level max_feature_level; };