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 2023
----- 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
1 participants
817 discussions
Start a n
N
ew thread
Mohamad Al-Jaf : cryptowinrt/tests: Remove racey refcount test.
by Alexandre Julliard
06 Apr '23
06 Apr '23
Module: wine Branch: master Commit: 3939eaf81a9f468d5f54b3017121f04e2f77e99a URL:
https://gitlab.winehq.org/wine/wine/-/commit/3939eaf81a9f468d5f54b3017121f0…
Author: Mohamad Al-Jaf <mohamadaljaf(a)gmail.com> Date: Wed Apr 5 21:15:36 2023 -0400 cryptowinrt/tests: Remove racey refcount test. Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=54783
--- dlls/cryptowinrt/tests/crypto.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/dlls/cryptowinrt/tests/crypto.c b/dlls/cryptowinrt/tests/crypto.c index 983af748bed..260287dbd23 100644 --- a/dlls/cryptowinrt/tests/crypto.c +++ b/dlls/cryptowinrt/tests/crypto.c @@ -251,7 +251,6 @@ static void test_Credentials_Statics(void) HSTRING str; HRESULT hr; DWORD ret; - LONG ref; hr = WindowsCreateString( credentials_statics_name, wcslen( credentials_statics_name ), &str ); ok( hr == S_OK, "got hr %#lx.\n", hr ); @@ -317,10 +316,8 @@ static void test_Credentials_Statics(void) IAsyncOperation_boolean_Release( bool_async ); - ref = IKeyCredentialManagerStatics_Release( credentials_statics ); - ok( ref == 2, "got ref %ld.\n", ref ); - ref = IActivationFactory_Release( factory ); - ok( ref == 1, "got ref %ld.\n", ref ); + IKeyCredentialManagerStatics_Release( credentials_statics ); + IActivationFactory_Release( factory ); } START_TEST(crypto)
1
0
0
0
Piotr Caban : gdi32: Let SetDIBits handle DIB_PAL_INDICES color usage in PlayEnhMetaFileRecord.
by Alexandre Julliard
06 Apr '23
06 Apr '23
Module: wine Branch: master Commit: 273f40b6c4827d98b5e146da4ea6808e654c6cbb URL:
https://gitlab.winehq.org/wine/wine/-/commit/273f40b6c4827d98b5e146da4ea680…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Thu Mar 30 19:51:50 2023 +0200 gdi32: Let SetDIBits handle DIB_PAL_INDICES color usage in PlayEnhMetaFileRecord. --- dlls/gdi32/enhmetafile.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/dlls/gdi32/enhmetafile.c b/dlls/gdi32/enhmetafile.c index da9c68df4af..adbc9b296e7 100644 --- a/dlls/gdi32/enhmetafile.c +++ b/dlls/gdi32/enhmetafile.c @@ -1858,23 +1858,7 @@ BOOL WINAPI PlayEnhMetaFileRecord( /* Need to check if the bitmap is monochrome, and if the two colors are really black and white */ - if (pCreateMonoBrush->iUsage == DIB_PAL_INDICES) - { - BITMAP bm; - - /* Undocumented iUsage indicates a mono bitmap with no palette table, - * aligned to 32 rather than 16 bits. - */ - bm.bmType = 0; - bm.bmWidth = pbi->bmiHeader.biWidth; - bm.bmHeight = abs(pbi->bmiHeader.biHeight); - bm.bmWidthBytes = 4 * ((pbi->bmiHeader.biWidth + 31) / 32); - bm.bmPlanes = pbi->bmiHeader.biPlanes; - bm.bmBitsPixel = pbi->bmiHeader.biBitCount; - bm.bmBits = (BYTE *)mr + pCreateMonoBrush->offBits; - hBmp = CreateBitmapIndirect(&bm); - } - else if (is_dib_monochrome(pbi)) + if (is_dib_monochrome(pbi)) { /* Top-down DIBs have a negative height */ LONG height = pbi->bmiHeader.biHeight;
1
0
0
0
Piotr Caban : gdi32: Rename DIB_PAL_MONO to DIB_PAL_INDICES.
by Alexandre Julliard
06 Apr '23
06 Apr '23
Module: wine Branch: master Commit: 8ada95cec45791e48f7437e6e21ebae001fc02e1 URL:
https://gitlab.winehq.org/wine/wine/-/commit/8ada95cec45791e48f7437e6e21eba…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Thu Mar 30 14:04:32 2023 +0200 gdi32: Rename DIB_PAL_MONO to DIB_PAL_INDICES. --- dlls/gdi32/emfdc.c | 6 +++--- dlls/gdi32/enhmetafile.c | 2 +- dlls/gdi32/gdi_private.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dlls/gdi32/emfdc.c b/dlls/gdi32/emfdc.c index 45587503330..bf35450cfb3 100644 --- a/dlls/gdi32/emfdc.c +++ b/dlls/gdi32/emfdc.c @@ -451,7 +451,7 @@ static DWORD emfdc_create_brush( struct emf *emf, HBRUSH brush ) * FIXME: It may be that the DIB functions themselves accept this value. */ emr->emr.iType = EMR_CREATEMONOBRUSH; - usage = DIB_PAL_MONO; + usage = DIB_PAL_INDICES; emr->cbBmi = sizeof( BITMAPINFOHEADER ); } else @@ -1617,7 +1617,7 @@ BOOL EMFDC_MaskBlt( DC_ATTR *dc_attr, INT x_dst, INT y_dst, INT width_dst, INT h emr->cbBitsSrc = src_info.bmiHeader.biSizeImage; emr->xMask = x_mask; emr->yMask = y_mask; - emr->iUsageMask = DIB_PAL_MONO; + emr->iUsageMask = DIB_PAL_INDICES; emr->offBmiMask = mask_info_size ? emr->offBitsSrc + emr->cbBitsSrc : 0; emr->cbBmiMask = mask_info_size; emr->offBitsMask = emr->offBmiMask + emr->cbBmiMask; @@ -1720,7 +1720,7 @@ BOOL EMFDC_PlgBlt( DC_ATTR *dc_attr, const POINT *points, HDC hdc_src, INT x_src emr->cbBitsSrc = src_info.bmiHeader.biSizeImage; emr->xMask = x_mask; emr->yMask = y_mask; - emr->iUsageMask = DIB_PAL_MONO; + emr->iUsageMask = DIB_PAL_INDICES; emr->offBmiMask = mask_info_size ? emr->offBitsSrc + emr->cbBitsSrc : 0; emr->cbBmiMask = mask_info_size; emr->offBitsMask = emr->offBmiMask + emr->cbBmiMask; diff --git a/dlls/gdi32/enhmetafile.c b/dlls/gdi32/enhmetafile.c index 178f7b0e132..da9c68df4af 100644 --- a/dlls/gdi32/enhmetafile.c +++ b/dlls/gdi32/enhmetafile.c @@ -1858,7 +1858,7 @@ BOOL WINAPI PlayEnhMetaFileRecord( /* Need to check if the bitmap is monochrome, and if the two colors are really black and white */ - if (pCreateMonoBrush->iUsage == DIB_PAL_MONO) + if (pCreateMonoBrush->iUsage == DIB_PAL_INDICES) { BITMAP bm; diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index 79f1975d96f..da4c951eb00 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -53,7 +53,7 @@ static inline DWORD gdi_handle_type( HGDIOBJ obj ) #define MFVERSION 0x300 /* Undocumented value for DIB's iUsage: Indicates a mono DIB w/o pal entries */ -#define DIB_PAL_MONO 2 +#define DIB_PAL_INDICES 2 /* Format of comment record added by GetWinMetaFileBits */ #include <pshpack2.h>
1
0
0
0
Piotr Caban : win32u: Add support for undocummented DIB_PAL_INDICES color usage in SetDIBits.
by Alexandre Julliard
06 Apr '23
06 Apr '23
Module: wine Branch: master Commit: 3f051d3b1e6d654b00825e00e3a488e79d03e70f URL:
https://gitlab.winehq.org/wine/wine/-/commit/3f051d3b1e6d654b00825e00e3a488…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Thu Mar 30 19:50:20 2023 +0200 win32u: Add support for undocummented DIB_PAL_INDICES color usage in SetDIBits. --- dlls/gdi32/tests/bitmap.c | 8 +++++++- dlls/win32u/dib.c | 20 ++++++++++++++++++-- dlls/win32u/ntgdi_private.h | 3 +++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c index d3074286ee6..e9b93d15fce 100644 --- a/dlls/gdi32/tests/bitmap.c +++ b/dlls/gdi32/tests/bitmap.c @@ -915,7 +915,7 @@ static void test_dib_formats(void) char data[2048]; /* 2 x 2 pixels, max 64 bits-per-pixel, max 64 planes */ void *bits; int planes, bpp, compr, format; - HBITMAP hdib, hbmp; + HBITMAP hdib, hbmp, hbmp_mono; HDC hdc, memdc; UINT ret; BOOL format_ok, expect_ok; @@ -924,6 +924,7 @@ static void test_dib_formats(void) hdc = GetDC( 0 ); memdc = CreateCompatibleDC( 0 ); hbmp = CreateCompatibleBitmap( hdc, 10, 10 ); + hbmp_mono = CreateBitmap( 10, 10, 1, 1, NULL ); memset( data, 0xaa, sizeof(data) ); @@ -1203,6 +1204,8 @@ static void test_dib_formats(void) DeleteObject( hdib ); ret = SetDIBits(hdc, hbmp, 0, 1, data, bi, DIB_PAL_COLORS+1); ok( !ret, "SetDIBits succeeded with DIB_PAL_COLORS+1\n" ); + ret = SetDIBits(hdc, hbmp_mono, 0, 1, data, bi, DIB_PAL_COLORS+1); + ok( ret, "SetDIBits failed with DIB_PAL_COLORS+1\n" ); ret = SetDIBitsToDevice( memdc, 0, 0, 1, 1, 0, 0, 0, 1, data, bi, DIB_PAL_COLORS+1 ); ok( ret, "SetDIBitsToDevice failed with DIB_PAL_COLORS+1\n" ); ret = StretchDIBits( memdc, 0, 0, 1, 1, 0, 0, 1, 1, data, bi, DIB_PAL_COLORS+1, SRCCOPY ); @@ -1227,6 +1230,8 @@ static void test_dib_formats(void) DeleteObject( hdib ); ret = SetDIBits(hdc, hbmp, 0, 1, data, bi, DIB_PAL_COLORS+2); ok( !ret, "SetDIBits succeeded with DIB_PAL_COLORS+2\n" ); + ret = SetDIBits(hdc, hbmp_mono, 0, 1, data, bi, DIB_PAL_COLORS+2); + ok( !ret, "SetDIBits succeeded with DIB_PAL_COLORS+2\n" ); ret = SetDIBitsToDevice( memdc, 0, 0, 1, 1, 0, 0, 0, 1, data, bi, DIB_PAL_COLORS+2 ); ok( !ret, "SetDIBitsToDevice succeeded with DIB_PAL_COLORS+2\n" ); ret = StretchDIBits( memdc, 0, 0, 1, 1, 0, 0, 1, 1, data, bi, DIB_PAL_COLORS+2, SRCCOPY ); @@ -1285,6 +1290,7 @@ static void test_dib_formats(void) DeleteDC( memdc ); DeleteObject( hbmp ); + DeleteObject( hbmp_mono ); ReleaseDC( 0, hdc ); HeapFree( GetProcessHeap(), 0, bi ); } diff --git a/dlls/win32u/dib.c b/dlls/win32u/dib.c index ccbb7d6db33..64f96b268c9 100644 --- a/dlls/win32u/dib.c +++ b/dlls/win32u/dib.c @@ -205,9 +205,11 @@ static BOOL bitmapinfo_from_user_bitmapinfo( BITMAPINFO *dst, const BITMAPINFO * { void *src_colors; - if (coloruse > DIB_PAL_COLORS + 1) return FALSE; /* FIXME: handle DIB_PAL_COLORS+1 format */ + if (coloruse > DIB_PAL_INDICES) return FALSE; if (!bitmapinfoheader_from_user_bitmapinfo( &dst->bmiHeader, &info->bmiHeader )) return FALSE; if (!is_valid_dib_format( &dst->bmiHeader, allow_compression )) return FALSE; + if (coloruse == DIB_PAL_INDICES && (dst->bmiHeader.biBitCount != 1 || + dst->bmiHeader.biCompression != BI_RGB)) return FALSE; src_colors = (char *)info + info->bmiHeader.biSize; @@ -230,6 +232,18 @@ static BOOL bitmapinfo_from_user_bitmapinfo( BITMAPINFO *dst, const BITMAPINFO * memcpy( dst->bmiColors, src_colors, colors * sizeof(WORD) ); max_colors = colors; } + else if (coloruse == DIB_PAL_INDICES) + { + dst->bmiColors[0].rgbRed = 0; + dst->bmiColors[0].rgbGreen = 0; + dst->bmiColors[0].rgbBlue = 0; + dst->bmiColors[0].rgbReserved = 0; + dst->bmiColors[1].rgbRed = 0xff; + dst->bmiColors[1].rgbGreen = 0xff; + dst->bmiColors[1].rgbBlue = 0xff; + dst->bmiColors[1].rgbReserved = 0; + colors = max_colors; + } else if (info->bmiHeader.biSize != sizeof(BITMAPCOREHEADER)) { memcpy( dst->bmiColors, src_colors, colors * sizeof(RGBQUAD) ); @@ -675,7 +689,7 @@ INT WINAPI SetDIBits( HDC hdc, HBITMAP hbitmap, UINT startscan, INT src_to_dst_offset; HRGN clip = 0; - if (!bitmapinfo_from_user_bitmapinfo( src_info, info, coloruse, TRUE ) || coloruse > DIB_PAL_COLORS) + if (!bitmapinfo_from_user_bitmapinfo( src_info, info, coloruse, TRUE )) { RtlSetLastWin32Error( ERROR_INVALID_PARAMETER ); return 0; @@ -699,6 +713,8 @@ INT WINAPI SetDIBits( HDC hdc, HBITMAP hbitmap, UINT startscan, if (!(bitmap = GDI_GetObjPtr( hbitmap, NTGDI_OBJ_BITMAP ))) return 0; + if (coloruse == DIB_PAL_INDICES && bitmap->dib.dsBm.bmBitsPixel != 1) return 0; + if (src_info->bmiHeader.biCompression == BI_RLE4 || src_info->bmiHeader.biCompression == BI_RLE8) { if (lines == 0) goto done; diff --git a/dlls/win32u/ntgdi_private.h b/dlls/win32u/ntgdi_private.h index 93be59c9d7e..cd714f8ec0d 100644 --- a/dlls/win32u/ntgdi_private.h +++ b/dlls/win32u/ntgdi_private.h @@ -28,6 +28,9 @@ /* extra stock object: default 1x1 bitmap for memory DCs */ #define DEFAULT_BITMAP (STOCK_LAST+1) +/* Undocumented value for DIB's color use: indicates a mono DIB w/o pal entries */ +#define DIB_PAL_INDICES 2 + struct gdi_obj_funcs { INT (*pGetObjectW)( HGDIOBJ handle, INT count, LPVOID buffer );
1
0
0
0
Zebediah Figura : vkd3d-shader/hlsl: Always align section sizes.
by Alexandre Julliard
06 Apr '23
06 Apr '23
Module: vkd3d Branch: master Commit: 616c4bf51fe338e1abf96627f6ce52404d5f4d8b URL:
https://gitlab.winehq.org/wine/vkd3d/-/commit/616c4bf51fe338e1abf96627f6ce5…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Wed Apr 5 17:01:52 2023 -0500 vkd3d-shader/hlsl: Always align section sizes. This fixes disassembly using native D3DDisassemble() of shaders generated with vkd3d-shader. Fixes: d6d9aab31c290d3dc7a67110ba2b0ac916377929 --- libs/vkd3d-shader/hlsl_sm4.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libs/vkd3d-shader/hlsl_sm4.c b/libs/vkd3d-shader/hlsl_sm4.c index 65378f90..5bd4f2d6 100644 --- a/libs/vkd3d-shader/hlsl_sm4.c +++ b/libs/vkd3d-shader/hlsl_sm4.c @@ -147,6 +147,16 @@ bool hlsl_sm4_usage_from_semantic(struct hlsl_ctx *ctx, const struct hlsl_semant return true; } +static void add_section(struct dxbc_writer *dxbc, uint32_t tag, struct vkd3d_bytecode_buffer *buffer) +{ + /* Native D3DDisassemble() expects at least the sizes of the ISGN and OSGN + * sections to be aligned. Without this, the sections themselves will be + * aligned, but their reported sizes won't. */ + size_t size = bytecode_align(buffer); + + dxbc_writer_add_section(dxbc, tag, buffer->data, size); +} + static void write_sm4_signature(struct hlsl_ctx *ctx, struct dxbc_writer *dxbc, bool output) { struct vkd3d_bytecode_buffer buffer = {0}; @@ -252,7 +262,7 @@ static void write_sm4_signature(struct hlsl_ctx *ctx, struct dxbc_writer *dxbc, set_u32(&buffer, count_position, i); - dxbc_writer_add_section(dxbc, output ? TAG_OSGN : TAG_ISGN, buffer.data, buffer.size); + add_section(dxbc, output ? TAG_OSGN : TAG_ISGN, &buffer); } static const struct hlsl_type *get_array_type(const struct hlsl_type *type) @@ -745,7 +755,7 @@ static void write_sm4_rdef(struct hlsl_ctx *ctx, struct dxbc_writer *dxbc) creator_offset = put_string(&buffer, vkd3d_shader_get_version(NULL, NULL)); set_u32(&buffer, creator_position, creator_offset); - dxbc_writer_add_section(dxbc, TAG_RDEF, buffer.data, buffer.size); + add_section(dxbc, TAG_RDEF, &buffer); vkd3d_free(extern_resources); } @@ -2502,7 +2512,7 @@ static void write_sm4_shdr(struct hlsl_ctx *ctx, set_u32(&buffer, token_count_position, bytecode_get_size(&buffer) / sizeof(uint32_t)); - dxbc_writer_add_section(dxbc, TAG_SHDR, buffer.data, buffer.size); + add_section(dxbc, TAG_SHDR, &buffer); vkd3d_free(extern_resources); }
1
0
0
0
Zebediah Figura : vkd3d-shader: Explicitly align the size in bytecode_get_next_offset() and rename it accordingly.
by Alexandre Julliard
06 Apr '23
06 Apr '23
Module: vkd3d Branch: master Commit: a60c47ff39290246e25ce3eac501caf63010987d URL:
https://gitlab.winehq.org/wine/vkd3d/-/commit/a60c47ff39290246e25ce3eac501c…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Wed Apr 5 16:55:50 2023 -0500 vkd3d-shader: Explicitly align the size in bytecode_get_next_offset() and rename it accordingly. --- libs/vkd3d-shader/dxbc.c | 14 +++++++------- libs/vkd3d-shader/hlsl_sm1.c | 6 +++--- libs/vkd3d-shader/hlsl_sm4.c | 8 ++++---- libs/vkd3d-shader/vkd3d_shader_main.c | 18 ++++++++++++++++-- libs/vkd3d-shader/vkd3d_shader_private.h | 7 ++----- 5 files changed, 32 insertions(+), 21 deletions(-) diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c index 6cc6b5d6..f32af8ea 100644 --- a/libs/vkd3d-shader/dxbc.c +++ b/libs/vkd3d-shader/dxbc.c @@ -57,7 +57,7 @@ int vkd3d_shader_serialize_dxbc(size_t section_count, const struct vkd3d_shader_ put_u32(&buffer, TAG_DXBC); - checksum_position = bytecode_get_next_offset(&buffer); + checksum_position = bytecode_get_size(&buffer); for (i = 0; i < 4; ++i) put_u32(&buffer, 0); @@ -65,13 +65,13 @@ int vkd3d_shader_serialize_dxbc(size_t section_count, const struct vkd3d_shader_ size_position = put_u32(&buffer, 0); put_u32(&buffer, section_count); - offsets_position = bytecode_get_next_offset(&buffer); + offsets_position = bytecode_get_size(&buffer); for (i = 0; i < section_count; ++i) put_u32(&buffer, 0); for (i = 0; i < section_count; ++i) { - set_u32(&buffer, offsets_position + i * sizeof(uint32_t), bytecode_get_next_offset(&buffer)); + set_u32(&buffer, offsets_position + i * sizeof(uint32_t), bytecode_align(&buffer)); put_u32(&buffer, sections[i].tag); put_u32(&buffer, sections[i].data.size); bytecode_put_bytes(&buffer, sections[i].data.code, sections[i].data.size); @@ -2754,7 +2754,7 @@ struct root_signature_writer_context static size_t get_chunk_offset(struct root_signature_writer_context *context) { - return bytecode_get_next_offset(&context->buffer) - context->chunk_position; + return bytecode_get_size(&context->buffer) - context->chunk_position; } static void shader_write_root_signature_header(struct root_signature_writer_context *context) @@ -2770,10 +2770,10 @@ static void shader_write_root_signature_header(struct root_signature_writer_cont put_u32(buffer, 1); context->total_size_position = put_u32(buffer, 0xffffffff); put_u32(buffer, 1); /* chunk count */ - put_u32(buffer, bytecode_get_next_offset(buffer) + sizeof(uint32_t)); /* chunk offset */ + put_u32(buffer, bytecode_get_size(buffer) + sizeof(uint32_t)); /* chunk offset */ put_u32(buffer, TAG_RTS0); put_u32(buffer, 0xffffffff); - context->chunk_position = bytecode_get_next_offset(buffer); + context->chunk_position = bytecode_get_size(buffer); } static void shader_write_descriptor_ranges(struct vkd3d_bytecode_buffer *buffer, @@ -2862,7 +2862,7 @@ static int shader_write_root_parameters(struct root_signature_writer_context *co size_t parameters_position; unsigned int i; - parameters_position = bytecode_get_next_offset(buffer); + parameters_position = bytecode_align(buffer); for (i = 0; i < parameter_count; ++i) { put_u32(buffer, versioned_root_signature_get_parameter_type(desc, i)); diff --git a/libs/vkd3d-shader/hlsl_sm1.c b/libs/vkd3d-shader/hlsl_sm1.c index be32c8db..606ecdd9 100644 --- a/libs/vkd3d-shader/hlsl_sm1.c +++ b/libs/vkd3d-shader/hlsl_sm1.c @@ -261,7 +261,7 @@ static void write_sm1_type(struct vkd3d_bytecode_buffer *buffer, struct hlsl_typ write_sm1_type(buffer, field->type, ctab_start); } - fields_offset = bytecode_get_next_offset(buffer) - ctab_start; + fields_offset = bytecode_align(buffer) - ctab_start; for (i = 0; i < field_count; ++i) { @@ -351,7 +351,7 @@ static void write_sm1_uniforms(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffe put_u32(buffer, 0); /* FIXME: flags */ put_u32(buffer, 0); /* FIXME: target string */ - vars_start = bytecode_get_next_offset(buffer); + vars_start = bytecode_align(buffer); LIST_FOR_EACH_ENTRY(var, &ctx->extern_vars, struct hlsl_ir_var, extern_entry) { @@ -402,7 +402,7 @@ static void write_sm1_uniforms(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffe offset = put_string(buffer, vkd3d_shader_get_version(NULL, NULL)); set_u32(buffer, creator_offset, offset - ctab_start); - ctab_end = bytecode_get_next_offset(buffer); + ctab_end = bytecode_align(buffer); set_u32(buffer, size_offset, vkd3d_make_u32(D3DSIO_COMMENT, (ctab_end - ctab_offset) / sizeof(uint32_t))); } diff --git a/libs/vkd3d-shader/hlsl_sm4.c b/libs/vkd3d-shader/hlsl_sm4.c index dd95c308..65378f90 100644 --- a/libs/vkd3d-shader/hlsl_sm4.c +++ b/libs/vkd3d-shader/hlsl_sm4.c @@ -387,7 +387,7 @@ static void write_sm4_type(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffer *b write_sm4_type(ctx, buffer, field->type); } - fields_offset = bytecode_get_next_offset(buffer); + fields_offset = bytecode_align(buffer); for (i = 0; i < field_count; ++i) { @@ -583,7 +583,7 @@ static void write_sm4_rdef(struct hlsl_ctx *ctx, struct dxbc_writer *dxbc) /* Bound resources. */ - resources_offset = bytecode_get_next_offset(&buffer); + resources_offset = bytecode_align(&buffer); set_u32(&buffer, resource_position, resources_offset); for (i = 0; i < extern_resources_count; ++i) @@ -656,7 +656,7 @@ static void write_sm4_rdef(struct hlsl_ctx *ctx, struct dxbc_writer *dxbc) /* Buffers. */ - cbuffers_offset = bytecode_get_next_offset(&buffer); + cbuffers_offset = bytecode_align(&buffer); set_u32(&buffer, cbuffer_position, cbuffers_offset); LIST_FOR_EACH_ENTRY(cbuffer, &ctx->buffers, struct hlsl_buffer, entry) { @@ -692,7 +692,7 @@ static void write_sm4_rdef(struct hlsl_ctx *ctx, struct dxbc_writer *dxbc) i = 0; LIST_FOR_EACH_ENTRY(cbuffer, &ctx->buffers, struct hlsl_buffer, entry) { - size_t vars_start = bytecode_get_next_offset(&buffer); + size_t vars_start = bytecode_align(&buffer); if (!cbuffer->reg.allocated) continue; diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c index 225bface..8728f974 100644 --- a/libs/vkd3d-shader/vkd3d_shader_main.c +++ b/libs/vkd3d-shader/vkd3d_shader_main.c @@ -340,9 +340,24 @@ void vkd3d_shader_error(struct vkd3d_shader_message_context *context, const stru va_end(args); } +size_t bytecode_align(struct vkd3d_bytecode_buffer *buffer) +{ + size_t aligned_size = align(buffer->size, 4); + + if (!vkd3d_array_reserve((void **)&buffer->data, &buffer->capacity, aligned_size, 1)) + { + buffer->status = VKD3D_ERROR_OUT_OF_MEMORY; + return aligned_size; + } + + memset(buffer->data + buffer->size, 0xab, aligned_size - buffer->size); + buffer->size = aligned_size; + return aligned_size; +} + size_t bytecode_put_bytes(struct vkd3d_bytecode_buffer *buffer, const void *bytes, size_t size) { - size_t offset = bytecode_get_next_offset(buffer); + size_t offset = bytecode_align(buffer); if (buffer->status) return offset; @@ -352,7 +367,6 @@ size_t bytecode_put_bytes(struct vkd3d_bytecode_buffer *buffer, const void *byte buffer->status = VKD3D_ERROR_OUT_OF_MEMORY; return offset; } - memset(buffer->data + buffer->size, 0xab, offset - buffer->size); memcpy(buffer->data + offset, bytes, size); buffer->size = offset + size; return offset; diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index b048d5ef..7e111c42 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -1071,6 +1071,8 @@ struct vkd3d_bytecode_buffer int status; }; +/* Align to the next 4-byte offset, and return that offset. */ +size_t bytecode_align(struct vkd3d_bytecode_buffer *buffer); size_t bytecode_put_bytes(struct vkd3d_bytecode_buffer *buffer, const void *bytes, size_t size); void set_u32(struct vkd3d_bytecode_buffer *buffer, size_t offset, uint32_t value); @@ -1094,11 +1096,6 @@ static inline size_t bytecode_get_size(struct vkd3d_bytecode_buffer *buffer) return buffer->size; } -static inline size_t bytecode_get_next_offset(struct vkd3d_bytecode_buffer *buffer) -{ - return align(buffer->size, 4); -} - uint32_t vkd3d_parse_integer(const char *s); struct vkd3d_shader_message_context
1
0
0
0
Zebediah Figura : vkd3d-common: Make some global string variables const.
by Alexandre Julliard
06 Apr '23
06 Apr '23
Module: vkd3d Branch: master Commit: 6783524613a4d90939789e76b99fa2ec61c53916 URL:
https://gitlab.winehq.org/wine/vkd3d/-/commit/6783524613a4d90939789e76b99fa…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Wed Apr 5 15:23:53 2023 -0500 vkd3d-common: Make some global string variables const. --- include/private/vkd3d_debug.h | 2 +- libs/vkd3d-common/debug.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/private/vkd3d_debug.h b/include/private/vkd3d_debug.h index 4f6d43af..6708cad3 100644 --- a/include/private/vkd3d_debug.h +++ b/include/private/vkd3d_debug.h @@ -91,7 +91,7 @@ const char *debugstr_w(const WCHAR *wstr, size_t wchar_size); #define FIXME_ONCE VKD3D_DBG_LOG_ONCE(FIXME, WARN) -#define VKD3D_DEBUG_ENV_NAME(name) const char *vkd3d_dbg_env_name = name +#define VKD3D_DEBUG_ENV_NAME(name) const char *const vkd3d_dbg_env_name = name static inline const char *debugstr_guid(const GUID *guid) { diff --git a/libs/vkd3d-common/debug.c b/libs/vkd3d-common/debug.c index 499334a3..b363efbd 100644 --- a/libs/vkd3d-common/debug.c +++ b/libs/vkd3d-common/debug.c @@ -40,9 +40,9 @@ #define VKD3D_DEBUG_BUFFER_COUNT 64 #define VKD3D_DEBUG_BUFFER_SIZE 512 -extern const char *vkd3d_dbg_env_name; +extern const char *const vkd3d_dbg_env_name; -static const char *debug_level_names[] = +static const char *const debug_level_names[] = { /* VKD3D_DBG_LEVEL_NONE */ "none", /* VKD3D_DBG_LEVEL_ERR */ "err",
1
0
0
0
Zebediah Figura : vkd3d-shader/hlsl: Make a string array const.
by Alexandre Julliard
06 Apr '23
06 Apr '23
Module: vkd3d Branch: master Commit: 1514755043ccc6925ab345d25549de520fc66339 URL:
https://gitlab.winehq.org/wine/vkd3d/-/commit/1514755043ccc6925ab345d25549d…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Wed Apr 5 15:22:03 2023 -0500 vkd3d-shader/hlsl: Make a string array const. --- libs/vkd3d-shader/hlsl_codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index c8550b65..f3fcbb71 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -2816,7 +2816,7 @@ static void allocate_temp_registers(struct hlsl_ctx *ctx, struct hlsl_ir_functio static void allocate_semantic_register(struct hlsl_ctx *ctx, struct hlsl_ir_var *var, unsigned int *counter, bool output) { - static const char *shader_names[] = + static const char *const shader_names[] = { [VKD3D_SHADER_TYPE_PIXEL] = "Pixel", [VKD3D_SHADER_TYPE_VERTEX] = "Vertex",
1
0
0
0
Zebediah Figura : vkd3d-shader: Factor out vkd3d_shader_parser_compile().
by Alexandre Julliard
06 Apr '23
06 Apr '23
Module: vkd3d Branch: master Commit: 09cda98deb18dd331655a18b2986e607e7930fdb URL:
https://gitlab.winehq.org/wine/vkd3d/-/commit/09cda98deb18dd331655a18b2986e…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Sat Mar 12 16:53:39 2022 -0600 vkd3d-shader: Factor out vkd3d_shader_parser_compile(). --- libs/vkd3d-shader/vkd3d_shader_main.c | 79 +++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 36 deletions(-) diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c index 11e32ab0..225bface 100644 --- a/libs/vkd3d-shader/vkd3d_shader_main.c +++ b/libs/vkd3d-shader/vkd3d_shader_main.c @@ -1168,66 +1168,73 @@ int vkd3d_shader_scan(const struct vkd3d_shader_compile_info *compile_info, char return ret; } -static int compile_dxbc_tpf(const struct vkd3d_shader_compile_info *compile_info, +static int vkd3d_shader_parser_compile(struct vkd3d_shader_parser *parser, + const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context) { struct vkd3d_shader_scan_descriptor_info scan_descriptor_info; + struct vkd3d_glsl_generator *glsl_generator; struct vkd3d_shader_compile_info scan_info; - struct vkd3d_shader_parser *parser; int ret; + vkd3d_shader_dump_shader(compile_info->source_type, parser->shader_version.type, &compile_info->source); + scan_info = *compile_info; scan_descriptor_info.type = VKD3D_SHADER_STRUCTURE_TYPE_SCAN_DESCRIPTOR_INFO; scan_descriptor_info.next = scan_info.next; scan_info.next = &scan_descriptor_info; - if ((ret = vkd3d_shader_sm4_parser_create(compile_info, message_context, &parser)) < 0) - { - WARN("Failed to initialise shader parser.\n"); - return ret; - } - - vkd3d_shader_dump_shader(compile_info->source_type, parser->shader_version.type, &compile_info->source); - if ((ret = scan_with_parser(&scan_info, message_context, parser)) < 0) - { - vkd3d_shader_parser_destroy(parser); return ret; - } - if (compile_info->target_type == VKD3D_SHADER_TARGET_D3D_ASM) + switch (compile_info->target_type) { - vkd3d_shader_free_scan_descriptor_info(&scan_descriptor_info); - ret = vkd3d_dxbc_binary_to_text(&parser->instructions, &parser->shader_version, compile_info, out); - vkd3d_shader_parser_destroy(parser); - return ret; - } + case VKD3D_SHADER_TARGET_D3D_ASM: + ret = vkd3d_dxbc_binary_to_text(&parser->instructions, &parser->shader_version, compile_info, out); + break; - if (compile_info->target_type == VKD3D_SHADER_TARGET_GLSL) - { - struct vkd3d_glsl_generator *glsl_generator; + case VKD3D_SHADER_TARGET_GLSL: + if (!(glsl_generator = vkd3d_glsl_generator_create(&parser->shader_version, + message_context, &parser->location))) + { + ERR("Failed to create GLSL generator.\n"); + vkd3d_shader_free_scan_descriptor_info(&scan_descriptor_info); + return VKD3D_ERROR; + } - if (!(glsl_generator = vkd3d_glsl_generator_create(&parser->shader_version, - message_context, &parser->location))) - { - ERR("Failed to create GLSL generator.\n"); - vkd3d_shader_parser_destroy(parser); - vkd3d_shader_free_scan_descriptor_info(&scan_descriptor_info); - return VKD3D_ERROR; - } + ret = vkd3d_glsl_generator_generate(glsl_generator, parser, out); + vkd3d_glsl_generator_destroy(glsl_generator); + break; - ret = vkd3d_glsl_generator_generate(glsl_generator, parser, out); + case VKD3D_SHADER_TARGET_SPIRV_BINARY: + case VKD3D_SHADER_TARGET_SPIRV_TEXT: + ret = spirv_compile(parser, &scan_descriptor_info, compile_info, out, message_context); + break; - vkd3d_glsl_generator_destroy(glsl_generator); - vkd3d_shader_parser_destroy(parser); - vkd3d_shader_free_scan_descriptor_info(&scan_descriptor_info); + default: + /* Validation should prevent us from reaching this. */ + assert(0); + } + + vkd3d_shader_free_scan_descriptor_info(&scan_descriptor_info); + return ret; +} + +static int compile_dxbc_tpf(const struct vkd3d_shader_compile_info *compile_info, + struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context) +{ + struct vkd3d_shader_parser *parser; + int ret; + + if ((ret = vkd3d_shader_sm4_parser_create(compile_info, message_context, &parser)) < 0) + { + WARN("Failed to initialise shader parser.\n"); return ret; } - ret = spirv_compile(parser, &scan_descriptor_info, compile_info, out, message_context); + ret = vkd3d_shader_parser_compile(parser, compile_info, out, message_context); vkd3d_shader_parser_destroy(parser); - vkd3d_shader_free_scan_descriptor_info(&scan_descriptor_info); return ret; }
1
0
0
0
Zebediah Figura : vkd3d-shader: Reuse the existing parser for scanning in compile_dxbc_tpf().
by Alexandre Julliard
06 Apr '23
06 Apr '23
Module: vkd3d Branch: master Commit: 507e8644ae38ddd16b8b824b3c7250434ddec9a4 URL:
https://gitlab.winehq.org/wine/vkd3d/-/commit/507e8644ae38ddd16b8b824b3c725…
Author: Zebediah Figura <zfigura(a)codeweavers.com> Date: Sat Mar 12 16:45:41 2022 -0600 vkd3d-shader: Reuse the existing parser for scanning in compile_dxbc_tpf(). --- libs/vkd3d-shader/vkd3d_shader_main.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c index b2b885aa..11e32ab0 100644 --- a/libs/vkd3d-shader/vkd3d_shader_main.c +++ b/libs/vkd3d-shader/vkd3d_shader_main.c @@ -1181,18 +1181,20 @@ static int compile_dxbc_tpf(const struct vkd3d_shader_compile_info *compile_info scan_descriptor_info.next = scan_info.next; scan_info.next = &scan_descriptor_info; - if ((ret = scan_dxbc(&scan_info, message_context)) < 0) - return ret; - if ((ret = vkd3d_shader_sm4_parser_create(compile_info, message_context, &parser)) < 0) { WARN("Failed to initialise shader parser.\n"); - vkd3d_shader_free_scan_descriptor_info(&scan_descriptor_info); return ret; } vkd3d_shader_dump_shader(compile_info->source_type, parser->shader_version.type, &compile_info->source); + if ((ret = scan_with_parser(&scan_info, message_context, parser)) < 0) + { + vkd3d_shader_parser_destroy(parser); + return ret; + } + if (compile_info->target_type == VKD3D_SHADER_TARGET_D3D_ASM) { vkd3d_shader_free_scan_descriptor_info(&scan_descriptor_info);
1
0
0
0
← Newer
1
...
65
66
67
68
69
70
71
...
82
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
Results per page:
10
25
50
100
200