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
April 2022
----- 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
1024 discussions
Start a n
N
ew thread
Connor McAdams : webservices: Properly handle max session dictionary size channel property.
by Alexandre Julliard
20 Apr '22
20 Apr '22
Module: wine Branch: master Commit: c03f747a3ac31420a35cce9ff27e4fcf3ad0290c URL:
https://source.winehq.org/git/wine.git/?a=commit;h=c03f747a3ac31420a35cce9f…
Author: Connor McAdams <cmcadams(a)codeweavers.com> Date: Wed Apr 20 11:56:12 2022 +0200 webservices: Properly handle max session dictionary size channel property. Treat WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE as a read-only property, and only allow it to be set upon channel creation. Signed-off-by: Connor McAdams <cmcadams(a)codeweavers.com> Signed-off-by: Hans Leidekker <hans(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/webservices/channel.c | 21 ++++++++++++++++++++- dlls/webservices/tests/channel.c | 11 ++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/dlls/webservices/channel.c b/dlls/webservices/channel.c index cfb6566921d..4941844afe5 100644 --- a/dlls/webservices/channel.c +++ b/dlls/webservices/channel.c @@ -40,7 +40,7 @@ static const struct prop_desc channel_props[] = { sizeof(WS_ENCODING), TRUE }, /* WS_CHANNEL_PROPERTY_ENCODING */ { sizeof(WS_ENVELOPE_VERSION), FALSE }, /* WS_CHANNEL_PROPERTY_ENVELOPE_VERSION */ { sizeof(WS_ADDRESSING_VERSION), FALSE }, /* WS_CHANNEL_PROPERTY_ADDRESSING_VERSION */ - { sizeof(ULONG), FALSE }, /* WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE */ + { sizeof(ULONG), TRUE }, /* WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE */ { sizeof(WS_CHANNEL_STATE), TRUE }, /* WS_CHANNEL_PROPERTY_STATE */ { sizeof(WS_CALLBACK_MODEL), FALSE }, /* WS_CHANNEL_PROPERTY_ASYNC_CALLBACK_MODEL */ { sizeof(WS_IP_VERSION), FALSE }, /* WS_CHANNEL_PROPERTY_IP_VERSION */ @@ -236,6 +236,7 @@ struct channel char *send_buf; ULONG send_buflen; ULONG send_size; + ULONG dict_size; ULONG prop_count; struct prop prop[ARRAY_SIZE( channel_props )]; }; @@ -483,6 +484,7 @@ static HRESULT create_channel( WS_CHANNEL_TYPE type, WS_CHANNEL_BINDING binding, case WS_TCP_CHANNEL_BINDING: channel->u.tcp.socket = -1; channel->encoding = WS_ENCODING_XML_BINARY_SESSION_1; + channel->dict_size = 2048; break; case WS_UDP_CHANNEL_BINDING: @@ -534,6 +536,16 @@ static HRESULT create_channel( WS_CHANNEL_TYPE type, WS_CHANNEL_BINDING binding, break; } + case WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE: + if (channel->binding != WS_TCP_CHANNEL_BINDING || !prop->value || prop->valueSize != sizeof(channel->dict_size)) + { + free_channel( channel ); + return E_INVALIDARG; + } + + channel->dict_size = *(ULONG *)prop->value; + break; + default: if ((hr = prop_set( channel->prop, channel->prop_count, prop->id, prop->value, prop->valueSize )) != S_OK) { @@ -712,6 +724,13 @@ HRESULT WINAPI WsGetChannelProperty( WS_CHANNEL *handle, WS_CHANNEL_PROPERTY_ID else *(WS_CHANNEL_STATE *)buf = channel->state; break; + case WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE: + if (channel->binding != WS_TCP_CHANNEL_BINDING || !buf || size != sizeof(channel->dict_size)) + hr = E_INVALIDARG; + else + *(ULONG *)buf = channel->dict_size; + break; + default: hr = prop_get( channel->prop, channel->prop_count, id, buf, size ); } diff --git a/dlls/webservices/tests/channel.c b/dlls/webservices/tests/channel.c index f70eafaecc8..d5d35904c1c 100644 --- a/dlls/webservices/tests/channel.c +++ b/dlls/webservices/tests/channel.c @@ -66,6 +66,10 @@ static void test_WsCreateChannel(void) ok( hr == S_OK, "got %#lx\n", hr ); ok( addr_version == WS_ADDRESSING_VERSION_1_0, "got %u\n", addr_version ); + size = 0xdeadbeef; + hr = WsGetChannelProperty( channel, WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE, &size, sizeof(size), NULL ); + ok( hr == E_INVALIDARG, "got %#lx\n", hr ); + /* read-only property */ state = 0xdeadbeef; hr = WsGetChannelProperty( channel, WS_CHANNEL_PROPERTY_STATE, &state, sizeof(state), NULL ); @@ -112,10 +116,15 @@ static void test_WsCreateChannel(void) ok( hr == S_OK, "got %#lx\n", hr ); ok( addr_version == WS_ADDRESSING_VERSION_1_0, "got %u\n", addr_version ); + /* Read-only, only settable on channel creation. */ + size = 4096; + hr = WsSetChannelProperty( channel, WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE, &size, sizeof(size), NULL ); + ok( hr == E_INVALIDARG, "got %#lx\n", hr ); + size = 0xdeadbeef; hr = WsGetChannelProperty( channel, WS_CHANNEL_PROPERTY_MAX_SESSION_DICTIONARY_SIZE, &size, sizeof(size), NULL ); ok( hr == S_OK, "got %#lx\n", hr ); - todo_wine ok( size == 2048, "got %lu\n", size ); + ok( size == 2048, "got %lu\n", size ); WsFreeChannel( channel ); }
1
0
0
0
Connor McAdams : webservices: Check for channel state in WsReceiveMessage.
by Alexandre Julliard
20 Apr '22
20 Apr '22
Module: wine Branch: master Commit: dc849b0a6d1c418e09f8508a869e5ae3985abb10 URL:
https://source.winehq.org/git/wine.git/?a=commit;h=dc849b0a6d1c418e09f8508a…
Author: Connor McAdams <cmcadams(a)codeweavers.com> Date: Wed Apr 20 11:56:11 2022 +0200 webservices: Check for channel state in WsReceiveMessage. Signed-off-by: Connor McAdams <cmcadams(a)codeweavers.com> Signed-off-by: Hans Leidekker <hans(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/webservices/channel.c | 5 +++++ dlls/webservices/tests/channel.c | 28 +++++++++++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/dlls/webservices/channel.c b/dlls/webservices/channel.c index 1148744346c..cfb6566921d 100644 --- a/dlls/webservices/channel.c +++ b/dlls/webservices/channel.c @@ -2415,6 +2415,11 @@ HRESULT WINAPI WsReceiveMessage( WS_CHANNEL *handle, WS_MESSAGE *msg, const WS_M LeaveCriticalSection( &channel->cs ); return E_INVALIDARG; } + if (channel->state != WS_CHANNEL_STATE_OPEN) + { + LeaveCriticalSection( &channel->cs ); + return WS_E_INVALID_OPERATION; + } if (!ctx) async_init( &async, &ctx_local ); hr = queue_receive_message( channel, msg, desc, count, option, read_option, heap, value, size, index, diff --git a/dlls/webservices/tests/channel.c b/dlls/webservices/tests/channel.c index e3cadc7d344..f70eafaecc8 100644 --- a/dlls/webservices/tests/channel.c +++ b/dlls/webservices/tests/channel.c @@ -626,6 +626,7 @@ static void server_duplex_session( WS_CHANNEL *channel ) static void client_duplex_session( const struct listener_info *info ) { WS_XML_STRING action = {6, (BYTE *)"action"}, localname = {9, (BYTE *)"localname"}, ns = {2, (BYTE *)"ns"}; + const WS_MESSAGE_DESCRIPTION *descs[1]; WS_ELEMENT_DESCRIPTION desc_body; WS_MESSAGE_DESCRIPTION desc; WS_ENDPOINT_ADDRESS addr; @@ -645,6 +646,26 @@ static void client_duplex_session( const struct listener_info *info ) hr = WsShutdownSessionChannel( channel, NULL, NULL ); ok( hr == WS_E_INVALID_OPERATION, "got %#lx\n", hr ); + desc_body.elementLocalName = &localname; + desc_body.elementNs = &ns; + desc_body.type = WS_INT32_TYPE; + desc_body.typeDescription = NULL; + desc.action = &action; + desc.bodyElementDescription = &desc_body; + descs[0] = &desc; + + hr = WsCreateMessageForChannel( channel, NULL, 0, &msg, NULL ); + ok( hr == S_OK, "got %#lx\n", hr ); + + hr = WsReceiveMessage( channel, msg, descs, 1, WS_RECEIVE_REQUIRED_MESSAGE, WS_READ_REQUIRED_VALUE, + NULL, &val, sizeof(val), NULL, NULL, NULL ); + ok( hr == WS_E_INVALID_OPERATION, "got %#lx\n", hr); + + hr = WsSendMessage( channel, msg, &desc, WS_WRITE_REQUIRED_VALUE, &val, sizeof(val), NULL, NULL ); + ok( hr == WS_E_INVALID_OPERATION, "got %#lx\n", hr ); + + WsFreeMessage( msg ); + memset( &addr, 0, sizeof(addr) ); addr.url.length = wsprintfW( buf, L"net.tcp://localhost:%u", info->port ); addr.url.chars = buf; @@ -654,13 +675,6 @@ static void client_duplex_session( const struct listener_info *info ) hr = WsCreateMessageForChannel( channel, NULL, 0, &msg, NULL ); ok( hr == S_OK, "got %#lx\n", hr ); - desc_body.elementLocalName = &localname; - desc_body.elementNs = &ns; - desc_body.type = WS_INT32_TYPE; - desc_body.typeDescription = NULL; - desc.action = &action; - desc.bodyElementDescription = &desc_body; - hr = WsSendMessage( channel, msg, &desc, WS_WRITE_REQUIRED_VALUE, &val, sizeof(val), NULL, NULL ); ok( hr == S_OK, "got %#lx\n", hr );
1
0
0
0
Connor McAdams : webservices: Don't advance binary encoding reader if record type doesn't match.
by Alexandre Julliard
20 Apr '22
20 Apr '22
Module: wine Branch: master Commit: 9eb26280f3a9354477d0cd2b3ca5159792e96b7c URL:
https://source.winehq.org/git/wine.git/?a=commit;h=9eb26280f3a9354477d0cd2b…
Author: Connor McAdams <cmcadams(a)codeweavers.com> Date: Wed Apr 20 11:56:10 2022 +0200 webservices: Don't advance binary encoding reader if record type doesn't match. Signed-off-by: Connor McAdams <cmcadams(a)codeweavers.com> Signed-off-by: Hans Leidekker <hans(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/webservices/reader.c | 18 ++++++++++++------ dlls/webservices/tests/reader.c | 15 ++++++--------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/dlls/webservices/reader.c b/dlls/webservices/reader.c index 7da0c8335ea..b22bcbd51b1 100644 --- a/dlls/webservices/reader.c +++ b/dlls/webservices/reader.c @@ -1486,8 +1486,9 @@ static HRESULT read_attribute_value_bin( struct reader *reader, WS_XML_ATTRIBUTE GUID guid; HRESULT hr; - if ((hr = read_byte( reader, &type )) != S_OK) return hr; + if ((hr = read_peek( reader, &type, 1 )) != S_OK) return hr; if (!is_text_type( type )) return WS_E_INVALID_FORMAT; + read_skip( reader, 1 ); switch (type) { @@ -1771,9 +1772,10 @@ static HRESULT read_attribute_bin( struct reader *reader, WS_XML_ATTRIBUTE **ret unsigned char type = 0; HRESULT hr; - if ((hr = read_byte( reader, &type )) != S_OK) return hr; + if ((hr = read_peek( reader, &type, 1 )) != S_OK) return hr; if (!is_attribute_type( type )) return WS_E_INVALID_FORMAT; if (!(attr = calloc( 1, sizeof(*attr) ))) return E_OUTOFMEMORY; + read_skip( reader, 1 ); if (type >= RECORD_PREFIX_ATTRIBUTE_A && type <= RECORD_PREFIX_ATTRIBUTE_Z) { @@ -2068,8 +2070,9 @@ static HRESULT read_element_bin( struct reader *reader ) unsigned char type; HRESULT hr; - if ((hr = read_byte( reader, &type )) != S_OK) return hr; + if ((hr = read_peek( reader, &type, 1 )) != S_OK) return hr; if (!is_element_type( type )) return WS_E_INVALID_FORMAT; + read_skip( reader, 1 ); if (!(elem = alloc_element_pair())) return E_OUTOFMEMORY; node = (struct node *)elem; @@ -2480,8 +2483,9 @@ static HRESULT read_text_bin( struct reader *reader ) GUID uuid; HRESULT hr; - if ((hr = read_byte( reader, &type )) != S_OK) return hr; + if ((hr = read_peek( reader, &type, 1 )) != S_OK) return hr; if (!is_text_type( type ) || !(parent = find_parent( reader ))) return WS_E_INVALID_FORMAT; + read_skip( reader, 1 ); switch (type) { @@ -2835,8 +2839,9 @@ static HRESULT read_endelement_bin( struct reader *reader ) if (!(reader->current->flags & NODE_FLAG_TEXT_WITH_IMPLICIT_END_ELEMENT)) { - if ((hr = read_byte( reader, &type )) != S_OK) return hr; + if ((hr = read_peek( reader, &type, 1 )) != S_OK) return hr; if (type != RECORD_ENDELEMENT) return WS_E_INVALID_FORMAT; + read_skip( reader, 1 ); } if (!(parent = find_parent( reader ))) return WS_E_INVALID_FORMAT; @@ -2917,8 +2922,9 @@ static HRESULT read_comment_bin( struct reader *reader ) ULONG len; HRESULT hr; - if ((hr = read_byte( reader, &type )) != S_OK) return hr; + if ((hr = read_peek( reader, &type, 1 )) != S_OK) return hr; if (type != RECORD_COMMENT) return WS_E_INVALID_FORMAT; + read_skip( reader, 1 ); if ((hr = read_int31( reader, &len )) != S_OK) return hr; if (!(parent = find_parent( reader ))) return WS_E_INVALID_FORMAT; diff --git a/dlls/webservices/tests/reader.c b/dlls/webservices/tests/reader.c index 1a2cd1fe420..f62697b9662 100644 --- a/dlls/webservices/tests/reader.c +++ b/dlls/webservices/tests/reader.c @@ -5764,15 +5764,12 @@ static void test_binary_encoding(void) hr = WsReadType( reader, WS_ELEMENT_TYPE_MAPPING, WS_STRUCT_TYPE, &s, WS_READ_REQUIRED_POINTER, heap, &test_struct, sizeof(test_struct), NULL ); - todo_wine ok( hr == S_OK, "got %#lx\n", hr ); - if (SUCCEEDED(hr)) - { - ok( test_struct->a == 1, "got %d\n", test_struct->a ); - ok( !!test_struct->s, "s is not set\n" ); - ok( test_struct->s->s_a == 1, "got %d\n", test_struct->s->s_a ); - ok( test_struct->s->s_b == 0, "got %d\n", test_struct->s->s_b ); - ok( test_struct->b == 1, "got %d\n", test_struct->b ); - } + ok( hr == S_OK, "got %#lx\n", hr ); + ok( test_struct->a == 1, "got %d\n", test_struct->a ); + ok( !!test_struct->s, "s is not set\n" ); + ok( test_struct->s->s_a == 1, "got %d\n", test_struct->s->s_a ); + ok( test_struct->s->s_b == 0, "got %d\n", test_struct->s->s_b ); + ok( test_struct->b == 1, "got %d\n", test_struct->b ); WsFreeHeap( heap ); WsFreeReader( reader );
1
0
0
0
Giovanni Mascellani : vkd3d-shader/hlsl: Split matrix copies.
by Alexandre Julliard
20 Apr '22
20 Apr '22
Module: vkd3d Branch: master Commit: e38ee49e995a8a2436b393976ce0d514d4b4661d URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=e38ee49e995a8a2436b3939…
Author: Giovanni Mascellani <gmascellani(a)codeweavers.com> Date: Mon Apr 18 08:34:02 2022 +0200 vkd3d-shader/hlsl: Split matrix copies. Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Francisco Casas <fcasas(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- libs/vkd3d-shader/hlsl_codegen.c | 52 ++++++++++++++++++++++++++++++++++ tests/hlsl-matrix-indexing.shader_test | 17 +++++++++++ 2 files changed, 69 insertions(+) diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index 72c00430..73e3b73f 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -672,6 +672,57 @@ static bool split_struct_copies(struct hlsl_ctx *ctx, struct hlsl_ir_node *instr return true; } +static unsigned int minor_size(const struct hlsl_type *type) +{ + if (type->type == HLSL_CLASS_VECTOR || type->modifiers & HLSL_MODIFIER_ROW_MAJOR) + return type->dimx; + else + return type->dimy; +} + +static unsigned int major_size(const struct hlsl_type *type) +{ + if (type->type == HLSL_CLASS_VECTOR || type->modifiers & HLSL_MODIFIER_ROW_MAJOR) + return type->dimy; + else + return type->dimx; +} + +static bool split_matrix_copies(struct hlsl_ctx *ctx, struct hlsl_ir_node *instr, void *context) +{ + const struct hlsl_ir_node *rhs; + struct hlsl_type *element_type; + const struct hlsl_type *type; + unsigned int i; + struct hlsl_ir_store *store; + + if (instr->type != HLSL_IR_STORE) + return false; + + store = hlsl_ir_store(instr); + rhs = store->rhs.node; + type = rhs->data_type; + if (type->type != HLSL_CLASS_MATRIX) + return false; + element_type = hlsl_get_vector_type(ctx, type->base_type, minor_size(type)); + + if (rhs->type != HLSL_IR_LOAD) + { + hlsl_fixme(ctx, &instr->loc, "Copying from unsupported node type.\n"); + return false; + } + + for (i = 0; i < major_size(type); ++i) + { + if (!split_copy(ctx, store, hlsl_ir_load(rhs), 4 * i, element_type)) + return false; + } + + list_remove(&store->node.entry); + hlsl_free_instr(&store->node); + return true; +} + static bool lower_narrowing_casts(struct hlsl_ctx *ctx, struct hlsl_ir_node *instr, void *context) { const struct hlsl_type *src_type, *dst_type; @@ -1685,6 +1736,7 @@ int hlsl_emit_bytecode(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry progress |= transform_ir(ctx, split_struct_copies, body, NULL); } while (progress); + transform_ir(ctx, split_matrix_copies, body, NULL); transform_ir(ctx, lower_narrowing_casts, body, NULL); transform_ir(ctx, lower_casts_to_bool, body, NULL); do diff --git a/tests/hlsl-matrix-indexing.shader_test b/tests/hlsl-matrix-indexing.shader_test index 1d444ffa..e2103fe2 100644 --- a/tests/hlsl-matrix-indexing.shader_test +++ b/tests/hlsl-matrix-indexing.shader_test @@ -45,3 +45,20 @@ uniform 8 float4 9.0 10.0 11.0 12.0 uniform 12 float4 13.0 14.0 15.0 16.0 todo draw quad probe all rgba (1.0, 5.0, 7.0, 12.0) + +[pixel shader] +uniform float4x4 m; + +float4 main() : SV_TARGET +{ + float4x4 m2 = m; + return float4(m2[0][0], m2[1][0], m2[1][2], m2[2][3]); +} + +[test] +uniform 0 float4 1.0 2.0 3.0 4.0 +uniform 4 float4 5.0 6.0 7.0 8.0 +uniform 8 float4 9.0 10.0 11.0 12.0 +uniform 12 float4 13.0 14.0 15.0 16.0 +todo draw quad +probe all rgba (1.0, 2.0, 10.0, 15.0)
1
0
0
0
Giovanni Mascellani : vkd3d-shader/hlsl: Support vector indexing.
by Alexandre Julliard
20 Apr '22
20 Apr '22
Module: vkd3d Branch: master Commit: d1fac2660c3f5e4f5c72b785f8a0a29dbc298f05 URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=d1fac2660c3f5e4f5c72b78…
Author: Giovanni Mascellani <gmascellani(a)codeweavers.com> Date: Mon Apr 18 08:34:01 2022 +0200 vkd3d-shader/hlsl: Support vector indexing. Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Francisco Casas <fcasas(a)codeweavers.com> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- libs/vkd3d-shader/hlsl.y | 14 ++++++++++---- tests/hlsl-vector-indexing.shader_test | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index fd808648..291f8392 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -592,13 +592,21 @@ static bool add_array_load(struct hlsl_ctx *ctx, struct list *instrs, struct hls if (expr_type->type == HLSL_CLASS_ARRAY) { data_type = expr_type->e.array.type; + if (!(c = hlsl_new_uint_constant(ctx, hlsl_type_get_array_element_reg_size(data_type), &loc))) + return false; } - else if (expr_type->type == HLSL_CLASS_MATRIX || expr_type->type == HLSL_CLASS_VECTOR) + else if (expr_type->type == HLSL_CLASS_MATRIX) { /* This needs to be lowered now, while we still have type information. */ - FIXME("Index of matrix or vector type.\n"); + FIXME("Index of matrix type.\n"); return false; } + else if (expr_type->type == HLSL_CLASS_VECTOR) + { + data_type = hlsl_get_scalar_type(ctx, expr_type->base_type); + if (!(c = hlsl_new_uint_constant(ctx, 1, &loc))) + return false; + } else { if (expr_type->type == HLSL_CLASS_SCALAR) @@ -608,8 +616,6 @@ static bool add_array_load(struct hlsl_ctx *ctx, struct list *instrs, struct hls return false; } - if (!(c = hlsl_new_uint_constant(ctx, hlsl_type_get_array_element_reg_size(data_type), &loc))) - return false; list_add_tail(instrs, &c->node.entry); if (!(mul = hlsl_new_binary_expr(ctx, HLSL_OP2_MUL, index, &c->node))) return false; diff --git a/tests/hlsl-vector-indexing.shader_test b/tests/hlsl-vector-indexing.shader_test index 1c964147..f2d20c44 100644 --- a/tests/hlsl-vector-indexing.shader_test +++ b/tests/hlsl-vector-indexing.shader_test @@ -10,7 +10,7 @@ float4 main() : SV_TARGET } [test] -todo draw quad +draw quad probe all rgba (0.02, 0.245, 0.351, 1.0) [pixel shader] @@ -23,5 +23,5 @@ float4 main() : SV_TARGET [test] uniform 0 float4 1.0 2.0 3.0 4.0 -todo draw quad +draw quad probe all rgba (1.0, 2.0, 2.0, 3.0)
1
0
0
0
Zebediah Figura : vkd3d-shader/hlsl: Return bool from add_record_load() and add_array_load().
by Alexandre Julliard
20 Apr '22
20 Apr '22
Module: vkd3d Branch: master Commit: aaa743033a5ede8b8c946c91e942b7853315aa9a URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=aaa743033a5ede8b8c946c9…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Mon Apr 18 08:34:00 2022 +0200 vkd3d-shader/hlsl: Return bool from add_record_load() and add_array_load(). Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com> Signed-off-by: Francisco Casas <fcasas(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- libs/vkd3d-shader/hlsl.y | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index 58d71ff6..fd808648 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -569,19 +569,19 @@ static struct hlsl_ir_load *add_load(struct hlsl_ctx *ctx, struct list *instrs, return load; } -static struct hlsl_ir_load *add_record_load(struct hlsl_ctx *ctx, struct list *instrs, struct hlsl_ir_node *record, +static bool add_record_load(struct hlsl_ctx *ctx, struct list *instrs, struct hlsl_ir_node *record, const struct hlsl_struct_field *field, const struct vkd3d_shader_location loc) { struct hlsl_ir_constant *c; if (!(c = hlsl_new_uint_constant(ctx, field->reg_offset, &loc))) - return NULL; + return false; list_add_tail(instrs, &c->node.entry); - return add_load(ctx, instrs, record, &c->node, field->type, loc); + return !!add_load(ctx, instrs, record, &c->node, field->type, loc); } -static struct hlsl_ir_load *add_array_load(struct hlsl_ctx *ctx, struct list *instrs, struct hlsl_ir_node *array, +static bool add_array_load(struct hlsl_ctx *ctx, struct list *instrs, struct hlsl_ir_node *array, struct hlsl_ir_node *index, const struct vkd3d_shader_location loc) { const struct hlsl_type *expr_type = array->data_type; @@ -597,7 +597,7 @@ static struct hlsl_ir_load *add_array_load(struct hlsl_ctx *ctx, struct list *in { /* This needs to be lowered now, while we still have type information. */ FIXME("Index of matrix or vector type.\n"); - return NULL; + return false; } else { @@ -605,18 +605,18 @@ static struct hlsl_ir_load *add_array_load(struct hlsl_ctx *ctx, struct list *in hlsl_error(ctx, &loc, VKD3D_SHADER_ERROR_HLSL_INVALID_INDEX, "Scalar expressions cannot be array-indexed."); else hlsl_error(ctx, &loc, VKD3D_SHADER_ERROR_HLSL_INVALID_INDEX, "Expression cannot be array-indexed."); - return NULL; + return false; } if (!(c = hlsl_new_uint_constant(ctx, hlsl_type_get_array_element_reg_size(data_type), &loc))) - return NULL; + return false; list_add_tail(instrs, &c->node.entry); if (!(mul = hlsl_new_binary_expr(ctx, HLSL_OP2_MUL, index, &c->node))) - return NULL; + return false; list_add_tail(instrs, &mul->entry); index = mul; - return add_load(ctx, instrs, array, index, data_type, loc); + return !!add_load(ctx, instrs, array, index, data_type, loc); } static struct hlsl_struct_field *get_struct_field(struct list *fields, const char *name)
1
0
0
0
Zebediah Figura : tests: Simplify "probe" directive syntax and parsing a bit.
by Alexandre Julliard
20 Apr '22
20 Apr '22
Module: vkd3d Branch: master Commit: 367bd15ec56557aaf81aa20876da66b3a4694f0c URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=367bd15ec56557aaf81aa20…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Mon Apr 18 08:33:58 2022 +0200 tests: Simplify "probe" directive syntax and parsing a bit. Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com> Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- tests/conditional.shader_test | 4 +-- tests/d3d12_test_utils.h | 8 ----- tests/hlsl-for.shader_test | 6 ++-- tests/shader_runner.c | 69 +++++++++++++----------------------------- tests/texture-load.shader_test | 8 ++--- tests/trigonometry.shader_test | 32 ++++++++++---------- tests/utils.h | 8 +++++ 7 files changed, 54 insertions(+), 81 deletions(-) diff --git a/tests/conditional.shader_test b/tests/conditional.shader_test index e665ac1d..42307777 100644 --- a/tests/conditional.shader_test +++ b/tests/conditional.shader_test @@ -15,5 +15,5 @@ float4 main(float tex : texcoord) : SV_TARGET [test] draw quad -probe rect rgba ( 0, 0, 319, 480) (0.9, 0.8, 0.7, 0.6) -probe rect rgba (321, 0, 640, 480) (0.1, 0.2, 0.3, 0.4) +probe ( 0, 0, 319, 480) rgba (0.9, 0.8, 0.7, 0.6) +probe (321, 0, 640, 480) rgba (0.1, 0.2, 0.3, 0.4) diff --git a/tests/d3d12_test_utils.h b/tests/d3d12_test_utils.h index 7186a73e..bb298082 100644 --- a/tests/d3d12_test_utils.h +++ b/tests/d3d12_test_utils.h @@ -52,14 +52,6 @@ static inline void wait_queue_idle_no_event_(unsigned int line, ID3D12Device *de ID3D12Fence_Release(fence); } -static void set_rect(RECT *rect, int left, int top, int right, int bottom) -{ - rect->left = left; - rect->right = right; - rect->top = top; - rect->bottom = bottom; -} - static inline void set_box(D3D12_BOX *box, unsigned int left, unsigned int top, unsigned int front, unsigned int right, unsigned int bottom, unsigned int back) { diff --git a/tests/hlsl-for.shader_test b/tests/hlsl-for.shader_test index 4e5048c3..e6329834 100644 --- a/tests/hlsl-for.shader_test +++ b/tests/hlsl-for.shader_test @@ -23,6 +23,6 @@ float4 main(float tex : texcoord) : sv_target [test] todo draw quad -probe rect rgba ( 0, 0, 159, 480) (10.0, 35.0, 0.0, 0.0) -probe rect rgba (161, 0, 479, 480) (10.0, 38.0, 0.0, 0.0) -probe rect rgba (481, 0, 640, 480) ( 5.0, 10.0, 0.0, 0.0) +probe ( 0, 0, 159, 480) rgba (10.0, 35.0, 0.0, 0.0) +probe (161, 0, 479, 480) rgba (10.0, 38.0, 0.0, 0.0) +probe (481, 0, 640, 480) rgba ( 5.0, 10.0, 0.0, 0.0) diff --git a/tests/shader_runner.c b/tests/shader_runner.c index 8804164e..a820810a 100644 --- a/tests/shader_runner.c +++ b/tests/shader_runner.c @@ -409,67 +409,40 @@ static void parse_test_directive(struct shader_runner *runner, const char *line) runner->last_render_failed = !runner->ops->draw(runner, topology, vertex_count); } - else if (match_string(line, "probe all rgba", &line)) - { - static const RECT rect = {0, 0, RENDER_TARGET_WIDTH, RENDER_TARGET_HEIGHT}; - unsigned int ulps; - struct vec4 v; - int ret; - - if (runner->last_render_failed) - return; - - ret = sscanf(line, "( %f , %f , %f , %f ) %u", &v.x, &v.y, &v.z, &v.w, &ulps); - if (ret < 4) - fatal_error("Malformed probe arguments '%s'.\n", line); - if (ret < 5) - ulps = 0; - - runner->ops->probe_vec4(runner, &rect, &v, ulps); - } - else if (match_string(line, "probe rect rgba", &line)) + else if (match_string(line, "probe", &line)) { unsigned int left, top, right, bottom, ulps; struct vec4 v; + int ret, len; RECT rect; - int ret; if (runner->last_render_failed) return; - ret = sscanf(line, "( %d , %d , %d , %d ) ( %f , %f , %f , %f ) %u", - &left, &top, &right, &bottom, &v.x, &v.y, &v.z, &v.w, &ulps); - if (ret < 8) - fatal_error("Malformed probe arguments '%s'.\n", line); - if (ret < 9) - ulps = 0; - - rect.left = left; - rect.top = top; - rect.right = right; - rect.bottom = bottom; - runner->ops->probe_vec4(runner, &rect, &v, ulps); - } - else if (match_string(line, "probe rgba", &line)) - { - unsigned int x, y, ulps; - struct vec4 v; - RECT rect; - int ret; + if (match_string(line, "all", &line)) + { + set_rect(&rect, 0, 0, RENDER_TARGET_WIDTH, RENDER_TARGET_HEIGHT); + } + else if (sscanf(line, "( %d , %d , %d , %d )%n", &left, &top, &right, &bottom, &len) == 4) + { + set_rect(&rect, left, top, right, bottom); + line += len; + } + else if (sscanf(line, "( %u , %u )%n", &left, &top, &len) == 2) + { + set_rect(&rect, left, top, left + 1, top + 1); + line += len; + } - if (runner->last_render_failed) - return; + if (!match_string(line, "rgba", &line)) + fatal_error("Malformed probe arguments '%s'.\n", line); - ret = sscanf(line, "( %u , %u ) ( %f , %f , %f , %f ) %u", &x, &y, &v.x, &v.y, &v.z, &v.w, &ulps); - if (ret < 6) + ret = sscanf(line, "( %f , %f , %f , %f ) %u", &v.x, &v.y, &v.z, &v.w, &ulps); + if (ret < 4) fatal_error("Malformed probe arguments '%s'.\n", line); - if (ret < 7) + if (ret < 5) ulps = 0; - rect.left = x; - rect.right = x + 1; - rect.top = y; - rect.bottom = y + 1; runner->ops->probe_vec4(runner, &rect, &v, ulps); } else if (match_string(line, "uniform", &line)) diff --git a/tests/texture-load.shader_test b/tests/texture-load.shader_test index 951ee3ea..81d06305 100644 --- a/tests/texture-load.shader_test +++ b/tests/texture-load.shader_test @@ -16,7 +16,7 @@ float4 main(float4 pos : sv_position) : sv_target [test] draw quad -probe rgba (0, 0) (0.1, 0.2, 0.3, 0.4) -probe rgba (1, 0) (0.5, 0.7, 0.6, 0.8) -probe rgba (0, 1) (0.6, 0.5, 0.2, 0.1) -probe rgba (1, 1) (0.8, 0.0, 0.7, 1.0) +probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4) +probe (1, 0) rgba (0.5, 0.7, 0.6, 0.8) +probe (0, 1) rgba (0.6, 0.5, 0.2, 0.1) +probe (1, 1) rgba (0.8, 0.0, 0.7, 1.0) diff --git a/tests/trigonometry.shader_test b/tests/trigonometry.shader_test index e9ac3682..b2e87f4a 100644 --- a/tests/trigonometry.shader_test +++ b/tests/trigonometry.shader_test @@ -13,19 +13,19 @@ float4 main(float tex : texcoord) : sv_target [test] todo draw quad -probe rgba ( 0, 0) ( 0.00000000, 1.00000000, 0.0, 0.0) -probe rgba ( 1, 0) ( 0.84147098, 0.54030231, 0.0, 0.0) 1024 -probe rgba ( 2, 0) ( 0.90929743, -0.41614684, 0.0, 0.0) 1024 -probe rgba ( 3, 0) ( 0.14112001, -0.98999250, 0.0, 0.0) 1024 -probe rgba ( 4, 0) (-0.75680250, -0.65364362, 0.0, 0.0) 1024 -probe rgba ( 5, 0) (-0.95892427, 0.28366219, 0.0, 0.0) 1024 -probe rgba ( 6, 0) (-0.27941550, 0.96017029, 0.0, 0.0) 1024 -probe rgba ( 7, 0) ( 0.65698660, 0.75390225, 0.0, 0.0) 1024 -probe rgba ( 8, 0) ( 0.98935825, -0.14550003, 0.0, 0.0) 1024 -probe rgba ( 9, 0) ( 0.41211849, -0.91113026, 0.0, 0.0) 1024 -probe rgba (10, 0) (-0.54402111, -0.83907153, 0.0, 0.0) 1024 -probe rgba (11, 0) (-0.99999021, 0.00442570, 0.0, 0.0) 2048 -probe rgba (12, 0) (-0.53657292, 0.84385396, 0.0, 0.0) 1024 -probe rgba (13, 0) ( 0.42016704, 0.90744678, 0.0, 0.0) 1024 -probe rgba (14, 0) ( 0.99060736, 0.13673722, 0.0, 0.0) 1024 -probe rgba (15, 0) ( 0.65028784, -0.75968791, 0.0, 0.0) 1024 +probe ( 0, 0) rgba ( 0.00000000, 1.00000000, 0.0, 0.0) +probe ( 1, 0) rgba ( 0.84147098, 0.54030231, 0.0, 0.0) 1024 +probe ( 2, 0) rgba ( 0.90929743, -0.41614684, 0.0, 0.0) 1024 +probe ( 3, 0) rgba ( 0.14112001, -0.98999250, 0.0, 0.0) 1024 +probe ( 4, 0) rgba (-0.75680250, -0.65364362, 0.0, 0.0) 1024 +probe ( 5, 0) rgba (-0.95892427, 0.28366219, 0.0, 0.0) 1024 +probe ( 6, 0) rgba (-0.27941550, 0.96017029, 0.0, 0.0) 1024 +probe ( 7, 0) rgba ( 0.65698660, 0.75390225, 0.0, 0.0) 1024 +probe ( 8, 0) rgba ( 0.98935825, -0.14550003, 0.0, 0.0) 1024 +probe ( 9, 0) rgba ( 0.41211849, -0.91113026, 0.0, 0.0) 1024 +probe (10, 0) rgba (-0.54402111, -0.83907153, 0.0, 0.0) 1024 +probe (11, 0) rgba (-0.99999021, 0.00442570, 0.0, 0.0) 2048 +probe (12, 0) rgba (-0.53657292, 0.84385396, 0.0, 0.0) 1024 +probe (13, 0) rgba ( 0.42016704, 0.90744678, 0.0, 0.0) 1024 +probe (14, 0) rgba ( 0.99060736, 0.13673722, 0.0, 0.0) 1024 +probe (15, 0) rgba ( 0.65028784, -0.75968791, 0.0, 0.0) 1024 diff --git a/tests/utils.h b/tests/utils.h index 530a3cee..563f0b0f 100644 --- a/tests/utils.h +++ b/tests/utils.h @@ -94,4 +94,12 @@ static inline bool compare_vec4(const struct vec4 *v1, const struct vec4 *v2, un && compare_float(v1->w, v2->w, ulps); } +static inline void set_rect(RECT *rect, int left, int top, int right, int bottom) +{ + rect->left = left; + rect->right = right; + rect->top = top; + rect->bottom = bottom; +} + #endif
1
0
0
0
Zebediah Figura : tests: Mark individual invalid shaders as todo.
by Alexandre Julliard
20 Apr '22
20 Apr '22
Module: vkd3d Branch: master Commit: f187b4879284ac901a0f905dbfb452f9002cddf8 URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=f187b4879284ac901a0f905…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Mon Apr 18 08:33:57 2022 +0200 tests: Mark individual invalid shaders as todo. Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- Makefile.am | 3 --- tests/hlsl-function.shader_test | 14 +++++++------- tests/hlsl-return-implicit-conversion.shader_test | 10 +++++----- tests/shader_runner.c | 21 ++++++++++++++++++--- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/Makefile.am b/Makefile.am index 894f1e63..e760a66b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -317,9 +317,6 @@ tests_shader_runner_SOURCES = \ tests_vkd3d_api_LDADD = libvkd3d.la @DL_LIBS@ tests_vkd3d_shader_api_LDADD = libvkd3d-shader.la SHADER_TEST_LOG_COMPILER = tests/shader_runner -XFAIL_TESTS = \ - tests/hlsl-function.shader_test \ - tests/hlsl-return-implicit-conversion.shader_test endif EXTRA_DIST += $(vkd3d_shader_tests) diff --git a/tests/hlsl-function.shader_test b/tests/hlsl-function.shader_test index 586f1ab7..6f11e35b 100644 --- a/tests/hlsl-function.shader_test +++ b/tests/hlsl-function.shader_test @@ -1,4 +1,4 @@ -[pixel shader fail] +[pixel shader fail todo] float4 func(); @@ -23,7 +23,7 @@ float4 main() : sv_target return 0; } -[pixel shader fail] +[pixel shader fail todo] void func(inout float o) { @@ -37,7 +37,7 @@ float4 main() : sv_target return 0; } -[pixel shader fail] +[pixel shader fail todo] void func(inout float2 o) { @@ -51,7 +51,7 @@ float4 main() : sv_target return 0; } -[pixel shader fail] +[pixel shader fail todo] void func(out float o) { @@ -65,7 +65,7 @@ float4 main() : sv_target return x; } -[pixel shader fail] +[pixel shader fail todo] void func(inout float o) { @@ -78,7 +78,7 @@ float4 main() : sv_target return x; } -[pixel shader fail] +[pixel shader fail todo] void func() { @@ -89,7 +89,7 @@ float4 main() : sv_target return func(); } -[pixel shader fail] +[pixel shader fail todo] void foo() { diff --git a/tests/hlsl-return-implicit-conversion.shader_test b/tests/hlsl-return-implicit-conversion.shader_test index 4c07cf84..38d21633 100644 --- a/tests/hlsl-return-implicit-conversion.shader_test +++ b/tests/hlsl-return-implicit-conversion.shader_test @@ -98,7 +98,7 @@ float4 main() : sv_target todo draw quad probe all rgba (0.4, 0.3, 0.2, 0.0) -[pixel shader fail] +[pixel shader fail todo] float3x1 func() { return float1x3(0.4, 0.3, 0.2); @@ -109,7 +109,7 @@ float4 main() : sv_target return float4(func(), 0.0); } -[pixel shader fail] +[pixel shader fail todo] float1x3 func() { return float3x1(0.4, 0.3, 0.2); @@ -165,7 +165,7 @@ float4 main() : sv_target todo draw quad probe all rgba (0.4, 0.3, 0.2, 0.0) -[pixel shader fail] +[pixel shader fail todo] float3x1 func() { return float4(0.4, 0.3, 0.2, 0.1); @@ -191,7 +191,7 @@ float4 main() : sv_target todo draw quad probe all rgba (0.4, 0.3, 0.2, 0.0) -[pixel shader fail] +[pixel shader fail todo] float3x1 func() { return float1x4(0.4, 0.3, 0.2, 0.1); @@ -217,7 +217,7 @@ float4 main() : sv_target todo draw quad probe all rgba (0.4, 0.3, 0.2, 0.0) -[pixel shader fail] +[pixel shader fail todo] float1x3 func() { return float4x1(0.4, 0.3, 0.2, 0.1); diff --git a/tests/shader_runner.c b/tests/shader_runner.c index 8633ee9a..8804164e 100644 --- a/tests/shader_runner.c +++ b/tests/shader_runner.c @@ -80,6 +80,7 @@ enum parse_state STATE_REQUIRE, STATE_SAMPLER, STATE_SHADER_INVALID_PIXEL, + STATE_SHADER_INVALID_PIXEL_TODO, STATE_SHADER_PIXEL, STATE_SHADER_VERTEX, STATE_TEXTURE, @@ -642,15 +643,24 @@ void run_shader_tests(struct shader_runner *runner, int argc, char **argv, const break; case STATE_SHADER_INVALID_PIXEL: + case STATE_SHADER_INVALID_PIXEL_TODO: { ID3D10Blob *blob = NULL, *errors = NULL; HRESULT hr; hr = D3DCompile(shader_source, strlen(shader_source), NULL, NULL, NULL, "main", "ps_4_0", 0, 0, &blob, &errors); - ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr); - ok(!blob, "Expected no compiled shader blob.\n"); - ok(!!errors, "Expected non-NULL error blob.\n"); + todo_if (state == STATE_SHADER_INVALID_PIXEL_TODO) + ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr); + if (hr == S_OK) + { + ID3D10Blob_Release(blob); + } + else + { + ok(!blob, "Expected no compiled shader blob.\n"); + ok(!!errors, "Expected non-NULL error blob.\n"); + } if (errors) { if (vkd3d_test_state.debug_level) @@ -735,6 +745,10 @@ void run_shader_tests(struct shader_runner *runner, int argc, char **argv, const { state = STATE_SHADER_INVALID_PIXEL; } + else if (!strcmp(line, "[pixel shader fail todo]\n")) + { + state = STATE_SHADER_INVALID_PIXEL_TODO; + } else if (sscanf(line, "[sampler %u]\n", &index)) { state = STATE_SAMPLER; @@ -817,6 +831,7 @@ void run_shader_tests(struct shader_runner *runner, int argc, char **argv, const case STATE_PREPROC: case STATE_PREPROC_INVALID: case STATE_SHADER_INVALID_PIXEL: + case STATE_SHADER_INVALID_PIXEL_TODO: case STATE_SHADER_PIXEL: case STATE_SHADER_VERTEX: {
1
0
0
0
Zebediah Figura : tests: Load libvulkan dynamically in d3d12_crosstest.h.
by Alexandre Julliard
20 Apr '22
20 Apr '22
Module: vkd3d Branch: master Commit: 0929ec7462fc778007b8fb555eca86db48e997ee URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=0929ec7462fc778007b8fb5…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Mon Apr 18 20:28:46 2022 -0500 tests: Load libvulkan dynamically in d3d12_crosstest.h. We would like to allow overriding the soname of libvulkan, in which case the tests and demos should respect that override. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- Makefile.am | 8 ++++---- tests/d3d12_crosstest.h | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Makefile.am b/Makefile.am index 44c80373..894f1e63 100644 --- a/Makefile.am +++ b/Makefile.am @@ -306,10 +306,10 @@ TEST_EXTENSIONS = .shader_test if BUILD_TESTS check_PROGRAMS = $(vkd3d_tests) $(vkd3d_cross_tests) tests/shader_runner TESTS = $(vkd3d_tests) $(vkd3d_cross_tests) $(vkd3d_shader_tests) -tests_d3d12_LDADD = $(LDADD) @PTHREAD_LIBS@ @VULKAN_LIBS@ -tests_d3d12_invalid_usage_LDADD = $(LDADD) @VULKAN_LIBS@ -tests_hlsl_d3d12_LDADD = $(LDADD) @VULKAN_LIBS@ -tests_shader_runner_LDADD = $(LDADD) @VULKAN_LIBS@ @DL_LIBS@ +tests_d3d12_LDADD = $(LDADD) @PTHREAD_LIBS@ @DL_LIBS@ +tests_d3d12_invalid_usage_LDADD = $(LDADD) @DL_LIBS@ +tests_hlsl_d3d12_LDADD = $(LDADD) @DL_LIBS@ +tests_shader_runner_LDADD = $(LDADD) @DL_LIBS@ tests_shader_runner_SOURCES = \ tests/shader_runner.c \ tests/shader_runner_d3d12.c \ diff --git a/tests/d3d12_crosstest.h b/tests/d3d12_crosstest.h index fc761809..e6dc7a6c 100644 --- a/tests/d3d12_crosstest.h +++ b/tests/d3d12_crosstest.h @@ -39,6 +39,7 @@ typedef int HRESULT; #endif +#define VK_NO_PROTOTYPES #define COBJMACROS #define CONST_VTABLE #define INITGUID @@ -419,6 +420,11 @@ static inline bool is_depth_clip_enable_supported(ID3D12Device *device) #else +#define DECLARE_VK_PFN(name) static PFN_##name name; +DECLARE_VK_PFN(vkGetInstanceProcAddr) +#define VK_INSTANCE_PFN DECLARE_VK_PFN +#include "vulkan_procs.h" + static bool check_device_extension(VkPhysicalDevice vk_physical_device, const char *name) { VkExtensionProperties *properties; @@ -585,8 +591,20 @@ static void init_adapter_info(void) VkPhysicalDeviceDriverPropertiesKHR driver_properties; struct vkd3d_instance *instance; ID3D12Device *device; + void *libvulkan; HRESULT hr; + if (!(libvulkan = vkd3d_dlopen(SONAME_LIBVULKAN))) + { + skip("Failed to load %s: %s.\n", SONAME_LIBVULKAN, vkd3d_dlerror()); + return; + } + +#define LOAD_VK_PFN(name) name = vkd3d_dlsym(libvulkan, #name); +LOAD_VK_PFN(vkGetInstanceProcAddr) +#define VK_INSTANCE_PFN LOAD_VK_PFN +#include "vulkan_procs.h" + if (FAILED(hr = create_vkd3d_instance(&instance))) return;
1
0
0
0
Zebediah Figura : tests: Load libvulkan dynamically in shader_runner_vulkan.c.
by Alexandre Julliard
20 Apr '22
20 Apr '22
Module: vkd3d Branch: master Commit: beffe5f3674088d175c77dca439fc4cceaf84cb9 URL:
https://source.winehq.org/git/vkd3d.git/?a=commit;h=beffe5f3674088d175c77dc…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Mon Apr 18 20:28:45 2022 -0500 tests: Load libvulkan dynamically in shader_runner_vulkan.c. We would like to allow overriding the soname of libvulkan, in which case the tests and demos should respect that override. Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- Makefile.am | 2 +- tests/shader_runner_vulkan.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index 3079a0df..44c80373 100644 --- a/Makefile.am +++ b/Makefile.am @@ -309,7 +309,7 @@ TESTS = $(vkd3d_tests) $(vkd3d_cross_tests) $(vkd3d_shader_tests) tests_d3d12_LDADD = $(LDADD) @PTHREAD_LIBS@ @VULKAN_LIBS@ tests_d3d12_invalid_usage_LDADD = $(LDADD) @VULKAN_LIBS@ tests_hlsl_d3d12_LDADD = $(LDADD) @VULKAN_LIBS@ -tests_shader_runner_LDADD = $(LDADD) @VULKAN_LIBS@ +tests_shader_runner_LDADD = $(LDADD) @VULKAN_LIBS@ @DL_LIBS@ tests_shader_runner_SOURCES = \ tests/shader_runner.c \ tests/shader_runner_d3d12.c \ diff --git a/tests/shader_runner_vulkan.c b/tests/shader_runner_vulkan.c index 4a30ea85..5d4b65cf 100644 --- a/tests/shader_runner_vulkan.c +++ b/tests/shader_runner_vulkan.c @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#define VK_NO_PROTOTYPES #include "config.h" #include "vulkan/vulkan.h" #include "vkd3d_shader.h" @@ -45,6 +46,8 @@ static struct vulkan_resource *vulkan_resource(struct resource *r) #define DECLARE_VK_PFN(name) PFN_##name name; +DECLARE_VK_PFN(vkGetInstanceProcAddr) + struct vulkan_shader_runner { struct shader_runner r; @@ -984,8 +987,16 @@ static bool init_vulkan_runner(struct vulkan_shader_runner *runner) VkFormatProperties format_props; uint32_t count, graphics_index; VkDevice device; + void *libvulkan; VkResult vr; + if (!(libvulkan = vkd3d_dlopen(SONAME_LIBVULKAN))) + { + skip("Failed to load %s: %s.\n", SONAME_LIBVULKAN, vkd3d_dlerror()); + return false; + } + vkGetInstanceProcAddr = vkd3d_dlsym(libvulkan, "vkGetInstanceProcAddr"); + runner->vkCreateInstance = (void *)vkGetInstanceProcAddr(NULL, "vkCreateInstance"); if ((vr = VK_CALL(vkCreateInstance(&instance_desc, NULL, &runner->instance))) < 0)
1
0
0
0
← Newer
1
...
37
38
39
40
41
42
43
...
103
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Results per page:
10
25
50
100
200