winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
January 2019
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
499 discussions
Start a n
N
ew thread
Józef Kucia : vkd3d: Implement D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS.
by Alexandre Julliard
25 Jan '19
25 Jan '19
Module: vkd3d Branch: master Commit: 9370929ac16b4f65d35b044fae00b467ce9254c4 URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=9370929ac16b4f65d35b044…
Author: Józef Kucia <jkucia(a)codeweavers.com> Date: Fri Jan 25 13:23:32 2019 +0100 vkd3d: Implement D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS. Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- include/vkd3d_d3d12.idl | 14 +++++++++ libs/vkd3d/device.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++ libs/vkd3d/resource.c | 18 ++++++++--- libs/vkd3d/vkd3d_private.h | 1 + 4 files changed, 104 insertions(+), 4 deletions(-) diff --git a/include/vkd3d_d3d12.idl b/include/vkd3d_d3d12.idl index 754bba3..8b2e70f 100644 --- a/include/vkd3d_d3d12.idl +++ b/include/vkd3d_d3d12.idl @@ -269,6 +269,20 @@ typedef struct D3D12_FEATURE_DATA_FORMAT_SUPPORT D3D12_FORMAT_SUPPORT2 Support2; } D3D12_FEATURE_DATA_FORMAT_SUPPORT; +typedef enum D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS +{ + D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE = 0x00000000, + D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_TILED_RESOURCE = 0x00000001, +} D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS; + +typedef struct D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS +{ + DXGI_FORMAT Format; + UINT SampleCount; + D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags; + UINT NumQualityLevels; +} D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS; + typedef enum D3D12_HEAP_TYPE { D3D12_HEAP_TYPE_DEFAULT = 1, diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 709c61f..64c8391 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -1687,6 +1687,68 @@ static void vkd3d_restrict_format_support_for_feature_level(D3D12_FEATURE_DATA_F } } +static HRESULT d3d12_device_check_multisample_quality_levels(struct d3d12_device *device, + D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS *data) +{ + const struct vkd3d_vk_device_procs *vk_procs = &device->vk_procs; + VkImageFormatProperties vk_properties; + const struct vkd3d_format *format; + VkSampleCountFlagBits vk_samples; + VkImageUsageFlags vk_usage = 0; + VkResult vr; + + TRACE("Format %#x, sample count %u, flags %#x.\n", data->Format, data->SampleCount, data->Flags); + + data->NumQualityLevels = 0; + + if (!(vk_samples = vk_samples_from_sample_count(data->SampleCount))) + WARN("Invalid sample count %u.\n", data->SampleCount); + if (!data->SampleCount) + return E_FAIL; + + if (data->SampleCount == 1) + { + data->NumQualityLevels = 1; + goto done; + } + + if (data->Format == DXGI_FORMAT_UNKNOWN) + goto done; + + if (!(format = vkd3d_get_format(data->Format, false))) + { + FIXME("Unhandled format %#x.\n", data->Format); + return E_INVALIDARG; + } + if (data->Flags) + FIXME("Ignoring flags %#x.\n", data->Flags); + + if (format->vk_aspect_mask & VK_IMAGE_ASPECT_COLOR_BIT) + vk_usage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + else + vk_usage |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT; + + vr = VK_CALL(vkGetPhysicalDeviceImageFormatProperties(device->vk_physical_device, + format->vk_format, VK_IMAGE_TYPE_2D, VK_IMAGE_TILING_OPTIMAL, vk_usage, 0, &vk_properties)); + if (vr == VK_ERROR_FORMAT_NOT_SUPPORTED) + { + WARN("Format %#x is not supported.\n", format->dxgi_format); + goto done; + } + if (vr < 0) + { + ERR("Failed to get image format properties, vr %d.\n", vr); + return hresult_from_vk_result(vr); + } + + if (vk_properties.sampleCounts & vk_samples) + data->NumQualityLevels = 1; + +done: + TRACE("Returning %u quality levels.\n", data->NumQualityLevels); + return S_OK; +} + static HRESULT STDMETHODCALLTYPE d3d12_device_CheckFeatureSupport(ID3D12Device *iface, D3D12_FEATURE feature, void *feature_data, UINT feature_data_size) { @@ -1840,6 +1902,19 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CheckFeatureSupport(ID3D12Device * return S_OK; } + case D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS: + { + D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS *data = feature_data; + + if (feature_data_size != sizeof(*data)) + { + WARN("Invalid size %u.\n", feature_data_size); + return E_INVALIDARG; + } + + return d3d12_device_check_multisample_quality_levels(device, data); + } + case D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT: { D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT *data = feature_data; diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index 016d050..75a5201 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -437,9 +437,9 @@ static VkImageType vk_image_type_from_d3d12_resource_dimension(D3D12_RESOURCE_DI } } -VkSampleCountFlagBits vk_samples_from_dxgi_sample_desc(const DXGI_SAMPLE_DESC *desc) +VkSampleCountFlagBits vk_samples_from_sample_count(unsigned int sample_count) { - switch (desc->Count) + switch (sample_count) { case 1: return VK_SAMPLE_COUNT_1_BIT; @@ -456,11 +456,21 @@ VkSampleCountFlagBits vk_samples_from_dxgi_sample_desc(const DXGI_SAMPLE_DESC *d case 64: return VK_SAMPLE_COUNT_64_BIT; default: - FIXME("Unhandled sample count %u.\n", desc->Count); - return VK_SAMPLE_COUNT_1_BIT; + return 0; } } +VkSampleCountFlagBits vk_samples_from_dxgi_sample_desc(const DXGI_SAMPLE_DESC *desc) +{ + VkSampleCountFlagBits vk_samples; + + if ((vk_samples = vk_samples_from_sample_count(desc->Count))) + return vk_samples; + + FIXME("Unhandled sample count %u.\n", desc->Count); + return VK_SAMPLE_COUNT_1_BIT; +} + HRESULT vkd3d_create_buffer(struct d3d12_device *device, const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags, const D3D12_RESOURCE_DESC *desc, VkBuffer *vk_buffer) diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 6b35dc0..73825bb 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -974,6 +974,7 @@ static inline unsigned int d3d12_resource_desc_get_sub_resource_count(const D3D1 VkCompareOp vk_compare_op_from_d3d12(D3D12_COMPARISON_FUNC op) DECLSPEC_HIDDEN; VkSampleCountFlagBits vk_samples_from_dxgi_sample_desc(const DXGI_SAMPLE_DESC *desc) DECLSPEC_HIDDEN; +VkSampleCountFlagBits vk_samples_from_sample_count(unsigned int sample_count) DECLSPEC_HIDDEN; bool is_valid_feature_level(D3D_FEATURE_LEVEL feature_level) DECLSPEC_HIDDEN; bool check_feature_level_support(D3D_FEATURE_LEVEL feature_level) DECLSPEC_HIDDEN;
1
0
0
0
Józef Kucia : vkd3d: Return hardcoded GPU virtual address support.
by Alexandre Julliard
25 Jan '19
25 Jan '19
Module: vkd3d Branch: master Commit: 766361f9c3dd4d56e05da4cc8eb44eff2f466ea6 URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=766361f9c3dd4d56e05da4c…
Author: Józef Kucia <jkucia(a)codeweavers.com> Date: Fri Jan 25 13:23:31 2019 +0100 vkd3d: Return hardcoded GPU virtual address support. The hardcoded value makes a real app happy and it is close to values returned by various Windows drivers (AMD, Intel, Nvidia). In the long term, we might try to derive the values from maxResourceSize and/or sparseAddressSpaceSize. Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- include/vkd3d_d3d12.idl | 6 ++++++ libs/vkd3d/device.c | 16 ++++++++++++++++ tests/d3d12.c | 19 +++++++++++++++---- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/include/vkd3d_d3d12.idl b/include/vkd3d_d3d12.idl index c025dbe..754bba3 100644 --- a/include/vkd3d_d3d12.idl +++ b/include/vkd3d_d3d12.idl @@ -1535,6 +1535,12 @@ typedef struct D3D12_FEATURE_DATA_ROOT_SIGNATURE D3D_ROOT_SIGNATURE_VERSION HighestVersion; } D3D12_FEATURE_DATA_ROOT_SIGNATURE; +typedef struct D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT +{ + UINT MaxGPUVirtualAddressBitsPerResource; + UINT MaxGPUVirtualAddressBitsPerProcess; +} D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT; + typedef enum D3D_SHADER_MODEL { D3D_SHADER_MODEL_5_1 = 0x51, diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 93af06c..709c61f 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -1840,6 +1840,22 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CheckFeatureSupport(ID3D12Device * return S_OK; } + case D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT: + { + D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT *data = feature_data; + + if (feature_data_size != sizeof(*data)) + { + WARN("Invalid size %u.\n", feature_data_size); + return E_INVALIDARG; + } + + FIXME("Returning 40 GPU virtual address bits.\n"); + data->MaxGPUVirtualAddressBitsPerResource = 40; + data->MaxGPUVirtualAddressBitsPerProcess = 40; + return S_OK; + } + case D3D12_FEATURE_SHADER_MODEL: { D3D12_FEATURE_DATA_SHADER_MODEL *data = feature_data; diff --git a/tests/d3d12.c b/tests/d3d12.c index 26a2162..4af52a5 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -962,6 +962,7 @@ static void test_node_count(void) static void test_check_feature_support(void) { + D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT gpu_virtual_address; D3D12_FEATURE_DATA_FEATURE_LEVELS feature_levels; D3D_FEATURE_LEVEL max_supported_feature_level; D3D12_FEATURE_DATA_ARCHITECTURE architecture; @@ -1038,7 +1039,7 @@ static void test_check_feature_support(void) feature_levels.MaxSupportedFeatureLevel = 0; hr = ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_FEATURE_LEVELS, &feature_levels, sizeof(feature_levels)); - ok(SUCCEEDED(hr), "Failed to check feature support, hr %#x.\n", hr); + ok(hr == S_OK, "Failed to check feature support, hr %#x.\n", hr); trace("Max supported feature level %#x.\n", feature_levels.MaxSupportedFeatureLevel); max_supported_feature_level = feature_levels.MaxSupportedFeatureLevel; @@ -1047,7 +1048,7 @@ static void test_check_feature_support(void) feature_levels.MaxSupportedFeatureLevel = 0; hr = ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_FEATURE_LEVELS, &feature_levels, sizeof(feature_levels)); - ok(SUCCEEDED(hr), "Failed to check feature support, hr %#x.\n", hr); + ok(hr == S_OK, "Failed to check feature support, hr %#x.\n", hr); ok(feature_levels.MaxSupportedFeatureLevel == max_supported_feature_level, "Got unexpected feature level %#x, expected %#x.\n", feature_levels.MaxSupportedFeatureLevel, max_supported_feature_level); @@ -1065,7 +1066,7 @@ static void test_check_feature_support(void) feature_levels.MaxSupportedFeatureLevel = 0; hr = ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_FEATURE_LEVELS, &feature_levels, sizeof(feature_levels)); - ok(SUCCEEDED(hr), "Failed to check feature support, hr %#x.\n", hr); + ok(hr == S_OK, "Failed to check feature support, hr %#x.\n", hr); ok(feature_levels.MaxSupportedFeatureLevel == D3D_FEATURE_LEVEL_9_3, "Got unexpected max feature level %#x.\n", feature_levels.MaxSupportedFeatureLevel); @@ -1074,10 +1075,20 @@ static void test_check_feature_support(void) feature_levels.MaxSupportedFeatureLevel = 0; hr = ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_FEATURE_LEVELS, &feature_levels, sizeof(feature_levels)); - ok(SUCCEEDED(hr), "Failed to check feature support, hr %#x.\n", hr); + ok(hr == S_OK, "Failed to check feature support, hr %#x.\n", hr); ok(feature_levels.MaxSupportedFeatureLevel == 0x3000, "Got unexpected max feature level %#x.\n", feature_levels.MaxSupportedFeatureLevel); + /* GPU virtual address */ + memset(&gpu_virtual_address, 0, sizeof(gpu_virtual_address)); + hr = ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT, + &gpu_virtual_address, sizeof(gpu_virtual_address)); + ok(hr == S_OK, "Failed to check GPU virtual address support, hr %#x.\n", hr); + trace("GPU virtual address bits per resource: %u.\n", + gpu_virtual_address.MaxGPUVirtualAddressBitsPerResource); + trace("GPU virtual address bits per process: %u.\n", + gpu_virtual_address.MaxGPUVirtualAddressBitsPerProcess); + refcount = ID3D12Device_Release(device); ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount); }
1
0
0
0
Józef Kucia : vkd3d-shader: Use proper vkd3d_spirv_builtin for PS fragment coordinates.
by Alexandre Julliard
25 Jan '19
25 Jan '19
Module: vkd3d Branch: master Commit: bcd91910e4b89f88065b914a4cf4a00785dfbbdc URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=bcd91910e4b89f88065b914…
Author: Józef Kucia <jkucia(a)codeweavers.com> Date: Fri Jan 25 13:23:30 2019 +0100 vkd3d-shader: Use proper vkd3d_spirv_builtin for PS fragment coordinates. Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- libs/vkd3d-shader/spirv.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index 1140f50..d0cbf56 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -2977,10 +2977,6 @@ static void vkd3d_dxbc_compiler_decorate_builtin(struct vkd3d_dxbc_compiler *com switch (builtin) { - case SpvBuiltInPosition: - if (compiler->shader_type == VKD3D_SHADER_TYPE_PIXEL) - builtin = SpvBuiltInFragCoord; - break; case SpvBuiltInFragDepth: vkd3d_dxbc_compiler_emit_execution_mode(compiler, SpvExecutionModeDepthReplacing, NULL, 0); break; @@ -3110,6 +3106,10 @@ vkd3d_system_value_builtins[] = {VKD3D_SIV_CLIP_DISTANCE, {VKD3D_TYPE_FLOAT, 1, SpvBuiltInClipDistance, NULL, true}}, {VKD3D_SIV_CULL_DISTANCE, {VKD3D_TYPE_FLOAT, 1, SpvBuiltInCullDistance, NULL, true}}, }; +static const struct vkd3d_spirv_builtin vkd3d_pixel_shader_position_builtin = +{ + VKD3D_TYPE_FLOAT, 4, SpvBuiltInFragCoord, +}; static const struct { enum vkd3d_shader_register_type reg_type; @@ -3160,6 +3160,10 @@ static const struct vkd3d_spirv_builtin *get_spirv_builtin_for_sysval( if (!sysval) return NULL; + /* In pixel shaders, SV_Position is mapped to SpvBuiltInFragCoord. */ + if (sysval == VKD3D_SIV_POSITION && compiler->shader_type == VKD3D_SHADER_TYPE_PIXEL) + return &vkd3d_pixel_shader_position_builtin; + target = vkd3d_dxbc_compiler_get_target(compiler); for (i = 0; i < ARRAY_SIZE(vkd3d_system_value_builtins); ++i) {
1
0
0
0
Józef Kucia : vkd3d-shader: Add more general support for SPIR-V aggregates.
by Alexandre Julliard
25 Jan '19
25 Jan '19
Module: vkd3d Branch: master Commit: 495d4b94740ff9424236e59b66723db3068f0dc5 URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=495d4b94740ff9424236e59…
Author: Józef Kucia <jkucia(a)codeweavers.com> Date: Fri Jan 25 13:23:29 2019 +0100 vkd3d-shader: Add more general support for SPIR-V aggregates. Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- libs/vkd3d-shader/spirv.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index ae0490e..1140f50 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -1718,6 +1718,7 @@ struct vkd3d_symbol_register_data enum vkd3d_component_type component_type; unsigned int write_mask; unsigned int structure_stride; + bool is_aggregate; /* An aggregate, i.e. a structure or an array. */ }; struct vkd3d_symbol_resource_data @@ -2414,6 +2415,7 @@ struct vkd3d_shader_register_info unsigned int write_mask; uint32_t member_idx; unsigned int structure_stride; + bool is_aggregate; }; static bool vkd3d_dxbc_compiler_get_register_info(const struct vkd3d_dxbc_compiler *compiler, @@ -2432,6 +2434,8 @@ static bool vkd3d_dxbc_compiler_get_register_info(const struct vkd3d_dxbc_compil register_info->component_type = VKD3D_TYPE_FLOAT; register_info->write_mask = VKD3DSP_WRITEMASK_ALL; register_info->member_idx = 0; + register_info->structure_stride = 0; + register_info->is_aggregate = false; return true; } @@ -2450,6 +2454,7 @@ static bool vkd3d_dxbc_compiler_get_register_info(const struct vkd3d_dxbc_compil register_info->write_mask = symbol->info.reg.write_mask; register_info->structure_stride = symbol->info.reg.structure_stride; register_info->member_idx = symbol->info.reg.member_idx; + register_info->is_aggregate = symbol->info.reg.is_aggregate; return true; } @@ -2476,8 +2481,11 @@ static void vkd3d_dxbc_compiler_emit_dereference_register(struct vkd3d_dxbc_comp { indexes[index_count++] = vkd3d_dxbc_compiler_emit_register_addressing(compiler, ®->idx[1]); } - else if (reg->type == VKD3DSPR_COVERAGE || reg->type == VKD3DSPR_SAMPLEMASK) + else if (register_info->is_aggregate) { + if (reg->idx[0].rel_addr || reg->idx[1].rel_addr) + FIXME("Relative addressing not implemented.\n"); + indexes[index_count++] = vkd3d_dxbc_compiler_get_constant_uint(compiler, register_info->member_idx); } else @@ -3390,6 +3398,7 @@ static uint32_t vkd3d_dxbc_compiler_emit_input(struct vkd3d_dxbc_compiler *compi reg_symbol.info.reg.component_type = use_private_var ? VKD3D_TYPE_FLOAT : component_type; reg_symbol.info.reg.write_mask = use_private_var ? vkd3d_write_mask_from_component_count(component_count) : signature_element->mask & 0xff; + reg_symbol.info.reg.is_aggregate = false; vkd3d_dxbc_compiler_put_symbol(compiler, ®_symbol); vkd3d_dxbc_compiler_emit_register_debug_name(builder, var_id, reg); @@ -3467,6 +3476,7 @@ static void vkd3d_dxbc_compiler_emit_input_register(struct vkd3d_dxbc_compiler * reg_symbol.info.reg.member_idx = 0; reg_symbol.info.reg.component_type = builtin->component_type; reg_symbol.info.reg.write_mask = vkd3d_write_mask_from_component_count(builtin->component_count); + reg_symbol.info.reg.is_aggregate = builtin->is_spirv_array; vkd3d_dxbc_compiler_put_symbol(compiler, ®_symbol); vkd3d_dxbc_compiler_emit_register_debug_name(builder, input_id, reg); } @@ -3616,6 +3626,7 @@ static void vkd3d_dxbc_compiler_emit_output_register(struct vkd3d_dxbc_compiler reg_symbol.info.reg.member_idx = 0; reg_symbol.info.reg.component_type = builtin->component_type; reg_symbol.info.reg.write_mask = vkd3d_write_mask_from_component_count(builtin->component_count); + reg_symbol.info.reg.is_aggregate = builtin->is_spirv_array; vkd3d_dxbc_compiler_put_symbol(compiler, ®_symbol); vkd3d_dxbc_compiler_emit_register_debug_name(builder, output_id, reg); } @@ -3722,6 +3733,7 @@ static void vkd3d_dxbc_compiler_emit_output(struct vkd3d_dxbc_compiler *compiler reg_symbol.info.reg.storage_class = storage_class; reg_symbol.info.reg.component_type = use_private_variable ? VKD3D_TYPE_FLOAT : component_type; reg_symbol.info.reg.write_mask = VKD3DSP_WRITEMASK_ALL; + reg_symbol.info.reg.is_aggregate = false; vkd3d_dxbc_compiler_put_symbol(compiler, ®_symbol); vkd3d_dxbc_compiler_emit_register_debug_name(builder, var_id, reg); @@ -3848,6 +3860,7 @@ static void vkd3d_dxbc_compiler_emit_dcl_indexable_temp(struct vkd3d_dxbc_compil reg_symbol.info.reg.storage_class = SpvStorageClassFunction; reg_symbol.info.reg.component_type = VKD3D_TYPE_FLOAT; reg_symbol.info.reg.write_mask = VKD3DSP_WRITEMASK_ALL; + reg_symbol.info.reg.is_aggregate = false; vkd3d_dxbc_compiler_put_symbol(compiler, ®_symbol); } @@ -3916,6 +3929,7 @@ static void vkd3d_dxbc_compiler_emit_push_constant_buffers(struct vkd3d_dxbc_com reg_symbol.info.reg.member_idx = j; reg_symbol.info.reg.component_type = VKD3D_TYPE_FLOAT; reg_symbol.info.reg.write_mask = VKD3DSP_WRITEMASK_ALL; + reg_symbol.info.reg.is_aggregate = false; vkd3d_dxbc_compiler_put_symbol(compiler, ®_symbol); ++j; @@ -3978,6 +3992,7 @@ static void vkd3d_dxbc_compiler_emit_dcl_constant_buffer(struct vkd3d_dxbc_compi reg_symbol.info.reg.member_idx = 0; reg_symbol.info.reg.component_type = VKD3D_TYPE_FLOAT; reg_symbol.info.reg.write_mask = VKD3DSP_WRITEMASK_ALL; + reg_symbol.info.reg.is_aggregate = false; vkd3d_dxbc_compiler_put_symbol(compiler, ®_symbol); } @@ -4013,6 +4028,7 @@ static void vkd3d_dxbc_compiler_emit_dcl_immediate_constant_buffer(struct vkd3d_ reg_symbol.info.reg.storage_class = SpvStorageClassPrivate; reg_symbol.info.reg.component_type = VKD3D_TYPE_FLOAT; reg_symbol.info.reg.write_mask = VKD3DSP_WRITEMASK_ALL; + reg_symbol.info.reg.is_aggregate = false; vkd3d_dxbc_compiler_put_symbol(compiler, ®_symbol); } @@ -4041,6 +4057,7 @@ static void vkd3d_dxbc_compiler_emit_dcl_sampler(struct vkd3d_dxbc_compiler *com vkd3d_symbol_make_register(®_symbol, reg); reg_symbol.id = var_id; reg_symbol.info.reg.storage_class = storage_class; + reg_symbol.info.reg.is_aggregate = false; vkd3d_dxbc_compiler_put_symbol(compiler, ®_symbol); } @@ -4350,6 +4367,7 @@ static void vkd3d_dxbc_compiler_emit_workgroup_memory(struct vkd3d_dxbc_compiler reg_symbol.info.reg.component_type = VKD3D_TYPE_UINT; reg_symbol.info.reg.write_mask = VKD3DSP_WRITEMASK_0; reg_symbol.info.reg.structure_stride = structure_stride; + reg_symbol.info.reg.is_aggregate = false; vkd3d_dxbc_compiler_put_symbol(compiler, ®_symbol); }
1
0
0
0
Józef Kucia : vkd3d-shader: Translate dcl_tessellator_output_primitive instructions.
by Alexandre Julliard
25 Jan '19
25 Jan '19
Module: vkd3d Branch: master Commit: 2838ee5833ce0aa933ea02724f3be51296c0351a URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=2838ee5833ce0aa933ea027…
Author: Józef Kucia <jkucia(a)codeweavers.com> Date: Fri Jan 25 13:23:28 2019 +0100 vkd3d-shader: Translate dcl_tessellator_output_primitive instructions. Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- libs/vkd3d-shader/spirv.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index ddcaead..ae0490e 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -4558,6 +4558,33 @@ static void vkd3d_dxbc_compiler_emit_dcl_tessellator_domain(struct vkd3d_dxbc_co vkd3d_dxbc_compiler_emit_execution_mode(compiler, mode, NULL, 0); } +static void vkd3d_dxbc_compiler_emit_dcl_tessellator_output_primitive(struct vkd3d_dxbc_compiler *compiler, + const struct vkd3d_shader_instruction *instruction) +{ + enum vkd3d_tessellator_output_primitive primitive = instruction->declaration.tessellator_output_primitive; + SpvExecutionMode mode; + + switch (primitive) + { + case VKD3D_TESSELLATOR_OUTPUT_POINT: + mode = SpvExecutionModePointMode; + break; + case VKD3D_TESSELLATOR_OUTPUT_LINE: + return; + case VKD3D_TESSELLATOR_OUTPUT_TRIANGLE_CW: + mode = SpvExecutionModeVertexOrderCw; + break; + case VKD3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW: + mode = SpvExecutionModeVertexOrderCcw; + break; + default: + FIXME("Invalid tessellator output primitive %#x.\n", primitive); + return; + } + + vkd3d_dxbc_compiler_emit_execution_mode(compiler, mode, NULL, 0); +} + static void vkd3d_dxbc_compiler_emit_dcl_tessellator_partitioning(struct vkd3d_dxbc_compiler *compiler, const struct vkd3d_shader_instruction *instruction) { @@ -6870,6 +6897,9 @@ int vkd3d_dxbc_compiler_handle_instruction(struct vkd3d_dxbc_compiler *compiler, case VKD3DSIH_DCL_TESSELLATOR_DOMAIN: vkd3d_dxbc_compiler_emit_dcl_tessellator_domain(compiler, instruction); break; + case VKD3DSIH_DCL_TESSELLATOR_OUTPUT_PRIMITIVE: + vkd3d_dxbc_compiler_emit_dcl_tessellator_output_primitive(compiler, instruction); + break; case VKD3DSIH_DCL_TESSELLATOR_PARTITIONING: vkd3d_dxbc_compiler_emit_dcl_tessellator_partitioning(compiler, instruction); break;
1
0
0
0
Józef Kucia : vkd3d: Fix assert() condition for sample mask array size.
by Alexandre Julliard
25 Jan '19
25 Jan '19
Module: vkd3d Branch: master Commit: d74133fda564a643234532f8064d65a667166458 URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=d74133fda564a643234532f…
Author: Józef Kucia <jkucia(a)codeweavers.com> Date: Fri Jan 25 13:23:27 2019 +0100 vkd3d: Fix assert() condition for sample mask array size. Signed-off-by: Józef Kucia <jkucia(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- libs/vkd3d/state.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 6daeab7..08f2f3c 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -2438,7 +2438,7 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s graphics->ms_desc.pSampleMask = NULL; if (desc->SampleMask != ~0u) { - assert(DIV_ROUND_UP(sample_count, 32) < ARRAY_SIZE(graphics->sample_mask)); + assert(DIV_ROUND_UP(sample_count, 32) <= ARRAY_SIZE(graphics->sample_mask)); graphics->sample_mask[0] = desc->SampleMask; graphics->sample_mask[1] = 0xffffffffu; graphics->ms_desc.pSampleMask = graphics->sample_mask;
1
0
0
0
Zebediah Figura : ntoskrnl.exe: Implement KeAcquireSpinLockRaiseToDpc().
by Alexandre Julliard
24 Jan '19
24 Jan '19
Module: wine Branch: master Commit: fee112f90accd80805e9b499b9f8917661f76cba URL:
https://source.winehq.org/git/wine.git/?a=commit;h=fee112f90accd80805e9b499…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Wed Jan 23 23:50:37 2019 -0600 ntoskrnl.exe: Implement KeAcquireSpinLockRaiseToDpc(). Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntoskrnl.exe/ntoskrnl.c | 9 --------- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- dlls/ntoskrnl.exe/sync.c | 20 ++++++++++++++++++++ include/ddk/wdm.h | 3 +++ 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index dd822c0..a48b9e3 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -3855,15 +3855,6 @@ void WINAPI KeReleaseInStackQueuedSpinLock( KLOCK_QUEUE_HANDLE *handle ) } /*********************************************************************** - * KeAcquireSpinLockRaiseToDpc (NTOSKRNL.EXE.@) - */ -KIRQL WINAPI KeAcquireSpinLockRaiseToDpc(KSPIN_LOCK *spinlock) -{ - FIXME( "stub: %p\n", spinlock ); - return 0; -} - -/*********************************************************************** * IoCreateNotificationEvent (NTOSKRNL.EXE.@) */ PKEVENT WINAPI IoCreateNotificationEvent(UNICODE_STRING *name, HANDLE *handle) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index ed3e2c6..8483b36 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -511,7 +511,7 @@ @ stdcall Ke386SetIoAccessMap(long ptr) @ stub KeAcquireInterruptSpinLock @ stub KeAcquireSpinLockAtDpcLevel -@ stdcall -arch=x86_64 KeAcquireSpinLockRaiseToDpc(ptr) +@ stdcall -arch=arm,arm64,x86_64 KeAcquireSpinLockRaiseToDpc(ptr) @ stub KeAddSystemServiceTable @ stub KeAreApcsDisabled @ stub KeAttachProcess diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 832b048..74e84a6 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -384,6 +384,15 @@ void WINAPI KeInitializeSpinLock( KSPIN_LOCK *lock ) } #ifndef __i386__ +static inline void small_pause(void) +{ +#ifdef __x86_64__ + __asm__ __volatile__( "rep;nop" : : : "memory" ); +#else + __asm__ __volatile__( "" : : : "memory" ); +#endif +} + /*********************************************************************** * KeReleaseSpinLock (NTOSKRNL.EXE.@) */ @@ -392,4 +401,15 @@ void WINAPI KeReleaseSpinLock( KSPIN_LOCK *lock, KIRQL irql ) TRACE("lock %p, irql %u.\n", lock, irql); InterlockedExchangePointer( (void **)lock, 0 ); } + +/*********************************************************************** + * KeAcquireSpinLockRaiseToDpc (NTOSKRNL.EXE.@) + */ +KIRQL WINAPI KeAcquireSpinLockRaiseToDpc( KSPIN_LOCK *lock ) +{ + TRACE("lock %p.\n", lock); + while (!InterlockedCompareExchangePointer( (void **)lock, (void *)1, (void *)0 )) + small_pause(); + return 0; +} #endif diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index 2822c69..1c12c1e 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1421,6 +1421,9 @@ NTSTATUS WINAPI IoWMIRegistrationControl(PDEVICE_OBJECT,ULONG); #ifdef __i386__ void WINAPI KeAcquireSpinLock(KSPIN_LOCK*,KIRQL*); +#else +#define KeAcquireSpinLock( lock, irql ) *(irql) = KeAcquireSpinLockRaiseToDpc( lock ) +KIRQL WINAPI KeAcquireSpinLockRaiseToDpc(KSPIN_LOCK*); #endif BOOLEAN WINAPI KeCancelTimer(KTIMER*); void WINAPI KeClearEvent(PRKEVENT);
1
0
0
0
Zebediah Figura : hal: Implement KeAcquireSpinLock().
by Alexandre Julliard
24 Jan '19
24 Jan '19
Module: wine Branch: master Commit: 389b8fc3934f4445535f03a5530e3846732d6c5f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=389b8fc3934f4445535f03a5…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Wed Jan 23 23:50:36 2019 -0600 hal: Implement KeAcquireSpinLock(). Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/hal/hal.c | 19 ++++++++++++++++--- dlls/hal/hal.spec | 2 +- include/ddk/wdm.h | 3 +++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/dlls/hal/hal.c b/dlls/hal/hal.c index 924fd9e..fca4f23 100644 --- a/dlls/hal/hal.c +++ b/dlls/hal/hal.c @@ -69,11 +69,24 @@ BOOLEAN WINAPI DECLSPEC_HIDDEN __regs_ExTryToAcquireFastMutex(PFAST_MUTEX FastMu } DEFINE_FASTCALL1_ENTRYPOINT( KfAcquireSpinLock ) -KIRQL WINAPI DECLSPEC_HIDDEN __regs_KfAcquireSpinLock(PKSPIN_LOCK SpinLock) +KIRQL WINAPI DECLSPEC_HIDDEN __regs_KfAcquireSpinLock( KSPIN_LOCK *lock ) { - FIXME( "(%p) stub!\n", SpinLock ); + KIRQL irql; + KeAcquireSpinLock( lock, &irql ); + return irql; +} - return 0; +static inline void small_pause(void) +{ + __asm__ __volatile__( "rep;nop" : : : "memory" ); +} + +void WINAPI KeAcquireSpinLock( KSPIN_LOCK *lock, KIRQL *irql ) +{ + TRACE("lock %p, irql %p.\n", lock, irql); + while (!InterlockedCompareExchangePointer( (void **)lock, (void *)1, (void *)0 )) + small_pause(); + *irql = 0; } DEFINE_FASTCALL2_ENTRYPOINT( KfReleaseSpinLock ) diff --git a/dlls/hal/hal.spec b/dlls/hal/hal.spec index 8596052..b4ec512 100644 --- a/dlls/hal/hal.spec +++ b/dlls/hal/hal.spec @@ -68,7 +68,7 @@ @ stub IoSetPartitionInformation @ stub IoWritePartitionTable @ stub KdComPortInUse -@ stub KeAcquireSpinLock +@ stdcall -arch=i386 KeAcquireSpinLock(ptr ptr) @ stub KeFlushWriteBuffer @ stdcall -arch=arm,arm64,i386 KeGetCurrentIrql() @ stub KeLowerIrql diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index d964ecb..2822c69 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1419,6 +1419,9 @@ void WINAPI IoReleaseCancelSpinLock(KIRQL); NTSTATUS WINAPI IoSetDeviceInterfaceState(UNICODE_STRING*,BOOLEAN); NTSTATUS WINAPI IoWMIRegistrationControl(PDEVICE_OBJECT,ULONG); +#ifdef __i386__ +void WINAPI KeAcquireSpinLock(KSPIN_LOCK*,KIRQL*); +#endif BOOLEAN WINAPI KeCancelTimer(KTIMER*); void WINAPI KeClearEvent(PRKEVENT); NTSTATUS WINAPI KeDelayExecutionThread(KPROCESSOR_MODE,BOOLEAN,LARGE_INTEGER*);
1
0
0
0
Zebediah Figura : ntoskrnl.exe: Implement KeReleaseSpinLock().
by Alexandre Julliard
24 Jan '19
24 Jan '19
Module: wine Branch: master Commit: 55463d4aa8f09a4ff835464fe2c51e5e3788b04f URL:
https://source.winehq.org/git/wine.git/?a=commit;h=55463d4aa8f09a4ff835464f…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Wed Jan 23 23:50:35 2019 -0600 ntoskrnl.exe: Implement KeReleaseSpinLock(). Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntoskrnl.exe/ntoskrnl.c | 8 -------- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- dlls/ntoskrnl.exe/sync.c | 11 +++++++++++ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 06a1cbd..dd822c0 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -3864,14 +3864,6 @@ KIRQL WINAPI KeAcquireSpinLockRaiseToDpc(KSPIN_LOCK *spinlock) } /*********************************************************************** - * KeReleaseSpinLock (NTOSKRNL.EXE.@) - */ -void WINAPI KeReleaseSpinLock( KSPIN_LOCK *spinlock, KIRQL irql ) -{ - FIXME( "stub: %p %u\n", spinlock, irql ); -} - -/*********************************************************************** * IoCreateNotificationEvent (NTOSKRNL.EXE.@) */ PKEVENT WINAPI IoCreateNotificationEvent(UNICODE_STRING *name, HANDLE *handle) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index a30459a..ed3e2c6 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -593,7 +593,7 @@ @ stub KeReleaseMutant @ stdcall KeReleaseMutex(ptr long) @ stdcall KeReleaseSemaphore(ptr long long long) -@ stdcall KeReleaseSpinLock(ptr long) +@ stdcall -arch=arm,arm64,x86_64 KeReleaseSpinLock(ptr long) @ stub KeReleaseSpinLockFromDpcLevel @ stub KeRemoveByKeyDeviceQueue @ stub KeRemoveByKeyDeviceQueueIfBusy diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index bd58f33..832b048 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -382,3 +382,14 @@ void WINAPI KeInitializeSpinLock( KSPIN_LOCK *lock ) TRACE("lock %p.\n", lock); *lock = 0; } + +#ifndef __i386__ +/*********************************************************************** + * KeReleaseSpinLock (NTOSKRNL.EXE.@) + */ +void WINAPI KeReleaseSpinLock( KSPIN_LOCK *lock, KIRQL irql ) +{ + TRACE("lock %p, irql %u.\n", lock, irql); + InterlockedExchangePointer( (void **)lock, 0 ); +} +#endif
1
0
0
0
Zebediah Figura : hal: Implement KeReleaseSpinLock().
by Alexandre Julliard
24 Jan '19
24 Jan '19
Module: wine Branch: master Commit: fa6f56b3614229baea6b42ebfd0453462df4306d URL:
https://source.winehq.org/git/wine.git/?a=commit;h=fa6f56b3614229baea6b42eb…
Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Wed Jan 23 23:50:34 2019 -0600 hal: Implement KeReleaseSpinLock(). Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/hal/hal.c | 11 +++++++++-- dlls/hal/hal.spec | 2 +- include/ddk/wdm.h | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/dlls/hal/hal.c b/dlls/hal/hal.c index 5560d9b..924fd9e 100644 --- a/dlls/hal/hal.c +++ b/dlls/hal/hal.c @@ -26,6 +26,7 @@ #include "ntstatus.h" #define WIN32_NO_STATUS #include "windef.h" +#include "winbase.h" #include "winternl.h" #include "excpt.h" #include "ddk/ntddk.h" @@ -76,9 +77,15 @@ KIRQL WINAPI DECLSPEC_HIDDEN __regs_KfAcquireSpinLock(PKSPIN_LOCK SpinLock) } DEFINE_FASTCALL2_ENTRYPOINT( KfReleaseSpinLock ) -VOID WINAPI DECLSPEC_HIDDEN __regs_KfReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL NewIrql) +void WINAPI DECLSPEC_HIDDEN __regs_KfReleaseSpinLock( KSPIN_LOCK *lock, KIRQL irql ) { - FIXME( "(%p %u) stub!\n", SpinLock, NewIrql ); + KeReleaseSpinLock( lock, irql ); +} + +void WINAPI KeReleaseSpinLock( KSPIN_LOCK *lock, KIRQL irql ) +{ + TRACE("lock %p, irql %u.\n", lock, irql); + InterlockedExchangePointer( (void **)lock, 0 ); } #endif /* __i386__ */ diff --git a/dlls/hal/hal.spec b/dlls/hal/hal.spec index 818e56c..8596052 100644 --- a/dlls/hal/hal.spec +++ b/dlls/hal/hal.spec @@ -76,7 +76,7 @@ @ stub KeRaiseIrql @ stub KeRaiseIrqlToDpcLevel @ stub KeRaiseIrqlToSynchLevel -@ stdcall -arch=i386 KeReleaseSpinLock(ptr long) ntoskrnl.exe.KeReleaseSpinLock +@ stdcall -arch=i386 KeReleaseSpinLock(ptr long) @ stub KeStallExecutionProcessor @ stub READ_PORT_BUFFER_UCHAR @ stub READ_PORT_BUFFER_ULONG diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index 3aa1c8a..d964ecb 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1434,6 +1434,7 @@ void WINAPI KeQueryTickCount(LARGE_INTEGER*); ULONG WINAPI KeQueryTimeIncrement(void); LONG WINAPI KeReleaseMutex(PRKMUTEX,BOOLEAN); LONG WINAPI KeReleaseSemaphore(PRKSEMAPHORE,KPRIORITY,LONG,BOOLEAN); +void WINAPI KeReleaseSpinLock(KSPIN_LOCK*,KIRQL); LONG WINAPI KeResetEvent(PRKEVENT); LONG WINAPI KeSetEvent(PRKEVENT,KPRIORITY,BOOLEAN); KPRIORITY WINAPI KeSetPriorityThread(PKTHREAD,KPRIORITY);
1
0
0
0
← Newer
1
...
18
19
20
21
22
23
24
...
50
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Results per page:
10
25
50
100
200