Logo by Trifox - Contribute your own Logo!

END OF AN ERA, FRACTALFORUMS.COM IS CONTINUED ON FRACTALFORUMS.ORG

it was a great time but no longer maintainable by c.Kleinhuis contact him for any data retrieval,
thanks and see you perhaps in 10 years again

this forum will stay online for reference
News: Check out the originating "3d Mandelbulb" thread here
 
*
Welcome, Guest. Please login or register. April 27, 2024, 04:25:37 AM


Login with username, password and session length


The All New FractalForums is now in Public Beta Testing! Visit FractalForums.org and check it out!


Pages: [1]   Go Down
  Print  
Share this topic on DiggShare this topic on FacebookShare this topic on GoogleShare this topic on RedditShare this topic on StumbleUponShare this topic on Twitter
Author Topic: Windows bitmap size test  (Read 8884 times)
Description: checking to see if WINE can be fixed
0 Members and 1 Guest are viewing this topic.
claude
Fractal Bachius
*
Posts: 563



WWW
« on: March 16, 2017, 05:41:13 PM »

So I discovered that WINE (Windows compatibility layer for other operating systems) has a limit of 128MB for bitmap size.  This is supposedly because XP had that limit, and the code commit was from 2008.  Others report that Kalles Fraktaler can render much bigger images without problems, so the limit has probably changed in more recent versions of MS Windows.

With the aim of filing a detailed bug report against WINE, I'd appreciate people with Windows could run the attached program from the command prompt and report the results here, along with Windows version details.  Source code is included in the zip, along with 32bit and 64bit exes.  (Check with your antivirus in case nasties might have been introduced in transit through the unencrypted ether...)

Thanks!

For example on my GNU/Linux/Debian/Stretch I get

Code:
$ apt-cache policy wine
wine:
  Installed: 1.8.6-5
  Candidate: 1.8.6-5
  Version table:
 *** 1.8.6-5 500
        500 http://ftp.uk.debian.org/debian stretch/main amd64 Packages
        500 http://ftp.uk.debian.org/debian stretch/main i386 Packages
        100 /var/lib/dpkg/status

$ ./test-bitmap-size.64.exe
SUCCESS CreateCompatibleBitmap(...,0,0): 0 bytes
SUCCESS CreateCompatibleBitmap(...,1,1): 4 bytes
SUCCESS CreateCompatibleBitmap(...,1,1): 4 bytes
SUCCESS CreateCompatibleBitmap(...,3,3): 36 bytes
SUCCESS CreateCompatibleBitmap(...,4,4): 64 bytes
SUCCESS CreateCompatibleBitmap(...,7,7): 196 bytes
SUCCESS CreateCompatibleBitmap(...,10,10): 400 bytes
SUCCESS CreateCompatibleBitmap(...,15,15): 900 bytes
SUCCESS CreateCompatibleBitmap(...,21,21): 1764 bytes
SUCCESS CreateCompatibleBitmap(...,31,31): 3844 bytes
SUCCESS CreateCompatibleBitmap(...,44,44): 7744 bytes
SUCCESS CreateCompatibleBitmap(...,63,63): 15876 bytes
SUCCESS CreateCompatibleBitmap(...,89,89): 31684 bytes
SUCCESS CreateCompatibleBitmap(...,127,127): 64516 bytes
SUCCESS CreateCompatibleBitmap(...,180,180): 129600 bytes
SUCCESS CreateCompatibleBitmap(...,255,255): 260100 bytes
SUCCESS CreateCompatibleBitmap(...,361,361): 521284 bytes
SUCCESS CreateCompatibleBitmap(...,511,511): 1044484 bytes
SUCCESS CreateCompatibleBitmap(...,723,723): 2090916 bytes
SUCCESS CreateCompatibleBitmap(...,1023,1023): 4186116 bytes
SUCCESS CreateCompatibleBitmap(...,1447,1447): 8375236 bytes
SUCCESS CreateCompatibleBitmap(...,2047,2047): 16760836 bytes
SUCCESS CreateCompatibleBitmap(...,2895,2895): 33524100 bytes
SUCCESS CreateCompatibleBitmap(...,4095,4095): 67076100 bytes
SUCCESS CreateCompatibleBitmap(...,5791,5791): 134142724 bytes
ERROR CreateCompatibleBitmap(...,8191,8191): 8

* test-bitmap-size.zip (13.76 KB - downloaded 195 times.)
Logged
Chillheimer
Global Moderator
Fractal Schemer
******
Posts: 972


Just another fractal being floating by..


chilli.chillheimer chillheimer
WWW
« Reply #1 on: March 16, 2017, 06:02:47 PM »


Windows 10 Pro 64 bit, 32gb ram, corei7-3770k

Code:
SUCCESS CreateCompatibleBitmap(...,0,0): 0 bytes
SUCCESS CreateCompatibleBitmap(...,1,1): 4 bytes
SUCCESS CreateCompatibleBitmap(...,1,1): 4 bytes
SUCCESS CreateCompatibleBitmap(...,3,3): 36 bytes
SUCCESS CreateCompatibleBitmap(...,4,4): 64 bytes
SUCCESS CreateCompatibleBitmap(...,7,7): 196 bytes
SUCCESS CreateCompatibleBitmap(...,10,10): 400 bytes
SUCCESS CreateCompatibleBitmap(...,15,15): 900 bytes
SUCCESS CreateCompatibleBitmap(...,21,21): 1764 bytes
SUCCESS CreateCompatibleBitmap(...,31,31): 3844 bytes
SUCCESS CreateCompatibleBitmap(...,44,44): 7744 bytes
SUCCESS CreateCompatibleBitmap(...,63,63): 15876 bytes
SUCCESS CreateCompatibleBitmap(...,89,89): 31684 bytes
SUCCESS CreateCompatibleBitmap(...,127,127): 64516 bytes
SUCCESS CreateCompatibleBitmap(...,180,180): 129600 bytes
SUCCESS CreateCompatibleBitmap(...,255,255): 260100 bytes
SUCCESS CreateCompatibleBitmap(...,361,361): 521284 bytes
SUCCESS CreateCompatibleBitmap(...,511,511): 1044484 bytes
SUCCESS CreateCompatibleBitmap(...,723,723): 2090916 bytes
SUCCESS CreateCompatibleBitmap(...,1023,1023): 4186116 bytes
SUCCESS CreateCompatibleBitmap(...,1447,1447): 8375236 bytes
SUCCESS CreateCompatibleBitmap(...,2047,2047): 16760836 bytes
SUCCESS CreateCompatibleBitmap(...,2895,2895): 33524100 bytes
SUCCESS CreateCompatibleBitmap(...,4095,4095): 67076100 bytes
SUCCESS CreateCompatibleBitmap(...,5791,5791): 134142724 bytes
SUCCESS CreateCompatibleBitmap(...,8191,8191): 268369924 bytes
SUCCESS CreateCompatibleBitmap(...,11584,11584): 536756224 bytes
SUCCESS CreateCompatibleBitmap(...,16383,16383): 1073610756 bytes
SUCCESS CreateCompatibleBitmap(...,23169,23169): 2147210244 bytes
ERROR CreateCompatibleBitmap(...,32767,32767): 3735928559
Logged

--- Fractals - add some Chaos to your life and put the world in order. ---
Dinkydau
Fractal Senior
******
Posts: 1616



WWW
« Reply #2 on: March 16, 2017, 07:30:26 PM »

Windows 7 ultimate

Does anything else matter? 32 GB RAM and intel i7-5820K (haswell, 6-core, 3,3 GHz, hyperthreading)

Code:
SUCCESS CreateCompatibleBitmap(...,0,0): 0 bytes
SUCCESS CreateCompatibleBitmap(...,1,1): 4 bytes
SUCCESS CreateCompatibleBitmap(...,1,1): 4 bytes
SUCCESS CreateCompatibleBitmap(...,3,3): 36 bytes
SUCCESS CreateCompatibleBitmap(...,4,4): 64 bytes
SUCCESS CreateCompatibleBitmap(...,7,7): 196 bytes
SUCCESS CreateCompatibleBitmap(...,10,10): 400 bytes
SUCCESS CreateCompatibleBitmap(...,15,15): 900 bytes
SUCCESS CreateCompatibleBitmap(...,21,21): 1764 bytes
SUCCESS CreateCompatibleBitmap(...,31,31): 3844 bytes
SUCCESS CreateCompatibleBitmap(...,44,44): 7744 bytes
SUCCESS CreateCompatibleBitmap(...,63,63): 15876 bytes
SUCCESS CreateCompatibleBitmap(...,89,89): 31684 bytes
SUCCESS CreateCompatibleBitmap(...,127,127): 64516 bytes
SUCCESS CreateCompatibleBitmap(...,180,180): 129600 bytes
SUCCESS CreateCompatibleBitmap(...,255,255): 260100 bytes
SUCCESS CreateCompatibleBitmap(...,361,361): 521284 bytes
SUCCESS CreateCompatibleBitmap(...,511,511): 1044484 bytes
SUCCESS CreateCompatibleBitmap(...,723,723): 2090916 bytes
SUCCESS CreateCompatibleBitmap(...,1023,1023): 4186116 bytes
SUCCESS CreateCompatibleBitmap(...,1447,1447): 8375236 bytes
SUCCESS CreateCompatibleBitmap(...,2047,2047): 16760836 bytes
SUCCESS CreateCompatibleBitmap(...,2895,2895): 33524100 bytes
SUCCESS CreateCompatibleBitmap(...,4095,4095): 67076100 bytes
SUCCESS CreateCompatibleBitmap(...,5791,5791): 134142724 bytes
SUCCESS CreateCompatibleBitmap(...,8191,8191): 268369924 bytes
SUCCESS CreateCompatibleBitmap(...,11584,11584): 536756224 bytes
SUCCESS CreateCompatibleBitmap(...,16383,16383): 1073610756 bytes
SUCCESS CreateCompatibleBitmap(...,23169,23169): 2147210244 bytes
ERROR CreateCompatibleBitmap(...,32767,32767): 3735928559

Logged

PieMan597
Conqueror
*******
Posts: 122



WWW
« Reply #3 on: March 16, 2017, 08:46:01 PM »

Windows 10 pro 64 bit, fx-9350 16 gb of ram

for the 64 bit porgram:
Code:
SUCCESS CreateCompatibleBitmap(...,0,0): 0 bytes
SUCCESS CreateCompatibleBitmap(...,1,1): 4 bytes
SUCCESS CreateCompatibleBitmap(...,1,1): 4 bytes
SUCCESS CreateCompatibleBitmap(...,3,3): 36 bytes
SUCCESS CreateCompatibleBitmap(...,4,4): 64 bytes
SUCCESS CreateCompatibleBitmap(...,7,7): 196 bytes
SUCCESS CreateCompatibleBitmap(...,10,10): 400 bytes
SUCCESS CreateCompatibleBitmap(...,15,15): 900 bytes
SUCCESS CreateCompatibleBitmap(...,21,21): 1764 bytes
SUCCESS CreateCompatibleBitmap(...,31,31): 3844 bytes
SUCCESS CreateCompatibleBitmap(...,44,44): 7744 bytes
SUCCESS CreateCompatibleBitmap(...,63,63): 15876 bytes
SUCCESS CreateCompatibleBitmap(...,89,89): 31684 bytes
SUCCESS CreateCompatibleBitmap(...,127,127): 64516 bytes
SUCCESS CreateCompatibleBitmap(...,180,180): 129600 bytes
SUCCESS CreateCompatibleBitmap(...,255,255): 260100 bytes
SUCCESS CreateCompatibleBitmap(...,361,361): 521284 bytes
SUCCESS CreateCompatibleBitmap(...,511,511): 1044484 bytes
SUCCESS CreateCompatibleBitmap(...,723,723): 2090916 bytes
SUCCESS CreateCompatibleBitmap(...,1023,1023): 4186116 bytes
SUCCESS CreateCompatibleBitmap(...,1447,1447): 8375236 bytes
SUCCESS CreateCompatibleBitmap(...,2047,2047): 16760836 bytes
SUCCESS CreateCompatibleBitmap(...,2895,2895): 33524100 bytes
SUCCESS CreateCompatibleBitmap(...,4095,4095): 67076100 bytes
SUCCESS CreateCompatibleBitmap(...,5791,5791): 134142724 bytes
SUCCESS CreateCompatibleBitmap(...,8191,8191): 268369924 bytes
SUCCESS CreateCompatibleBitmap(...,11584,11584): 536756224 bytes
SUCCESS CreateCompatibleBitmap(...,16383,16383): 1073610756 bytes
SUCCESS CreateCompatibleBitmap(...,23169,23169): 2147210244 bytes
ERROR CreateCompatibleBitmap(...,32767,32767): 3735928559

32 bit:

Code:
SUCCESS CreateCompatibleBitmap(...,0,0): 18037900570525696 bytes
SUCCESS CreateCompatibleBitmap(...,1,1): 18037900570525700 bytes
SUCCESS CreateCompatibleBitmap(...,1,1): 18037900570525700 bytes
SUCCESS CreateCompatibleBitmap(...,3,3): 18037900570525732 bytes
SUCCESS CreateCompatibleBitmap(...,4,4): 18037900570525760 bytes
SUCCESS CreateCompatibleBitmap(...,7,7): 18037900570525892 bytes
SUCCESS CreateCompatibleBitmap(...,10,10): 18037900570526096 bytes
SUCCESS CreateCompatibleBitmap(...,15,15): 18037900570526596 bytes
SUCCESS CreateCompatibleBitmap(...,21,21): 18037900570527460 bytes
SUCCESS CreateCompatibleBitmap(...,31,31): 18037900570529540 bytes
SUCCESS CreateCompatibleBitmap(...,44,44): 18037900570533440 bytes
SUCCESS CreateCompatibleBitmap(...,63,63): 18037900570541572 bytes
SUCCESS CreateCompatibleBitmap(...,89,89): 18037900570557380 bytes
SUCCESS CreateCompatibleBitmap(...,127,127): 18037900570590212 bytes
SUCCESS CreateCompatibleBitmap(...,180,180): 18037900570655296 bytes
SUCCESS CreateCompatibleBitmap(...,255,255): 18037900570785796 bytes
SUCCESS CreateCompatibleBitmap(...,361,361): 18037900571046980 bytes
SUCCESS CreateCompatibleBitmap(...,511,511): 18037900571570180 bytes
SUCCESS CreateCompatibleBitmap(...,723,723): 18037900572616612 bytes
SUCCESS CreateCompatibleBitmap(...,1023,1023): 18037900574711812 bytes
SUCCESS CreateCompatibleBitmap(...,1447,1447): 18037900578900932 bytes
SUCCESS CreateCompatibleBitmap(...,2047,2047): 18037900587286532 bytes
SUCCESS CreateCompatibleBitmap(...,2895,2895): 18037900604049796 bytes
SUCCESS CreateCompatibleBitmap(...,4095,4095): 18037900637601796 bytes
SUCCESS CreateCompatibleBitmap(...,5791,5791): 18037900704668420 bytes
SUCCESS CreateCompatibleBitmap(...,8191,8191): 18037900838895620 bytes
SUCCESS CreateCompatibleBitmap(...,11584,11584): 18037901107281920 bytes
SUCCESS CreateCompatibleBitmap(...,16383,16383): 18037901644136452 bytes
SUCCESS CreateCompatibleBitmap(...,23169,23169): 18037902717735940 bytes
ERROR CreateCompatibleBitmap(...,32767,32767): 3735928559
Logged
xenodreambuie
Conqueror
*******
Posts: 124



WWW
« Reply #4 on: March 16, 2017, 08:48:58 PM »

The easiest way to create large bitmaps in older Windows versions is to use a DIB (device independent bitmap), and not use the API to create it. Other API calls such as StretchDIBits still work as long as the data structure is correct. It has the advantage of being compatible all the way back to Win95, though these days XP is sufficient.
Logged

Regards, Garth
http://xenodream.com
claude
Fractal Bachius
*
Posts: 563



WWW
« Reply #5 on: March 28, 2017, 05:51:31 PM »

Thanks everyone!  I filed the bug report:  https://bugs.winehq.org/show_bug.cgi?id=42727
Logged
claude
Fractal Bachius
*
Posts: 563



WWW
« Reply #6 on: July 11, 2017, 06:07:59 PM »

The easiest way to create large bitmaps in older Windows versions is to use a DIB (device independent bitmap), and not use the API to create it. Other API calls such as StretchDIBits still work as long as the data structure is correct. It has the advantage of being compatible all the way back to Win95, though these days XP is sufficient.

Do you have any example code?

The problem in WINE (artifical 128MB limit) is in the function:

Code:
HBITMAP WINAPI CreateBitmapIndirect( const BITMAP *bmp );

so I need to avoid that.  Also these functions in WINE call it eventually and must be avoided too:

Code:
HBITMAP WINAPI CreateBitmap(INT width, INT height, UINT planes, UINT bpp, LPCVOID bits);
HBITMAP WINAPI CreateCompatibleBitmap(HDC hdc, INT width, INT height);
HBITMAP WINAPI CreateDiscardableBitmap(HDC hdc, INT width, INT height);
HBITMAP WINAPI CreateDIBitmap(HDC hdc, const BITMAPINFOHEADER *header, DWORD init, LPCVOID bits, const BITMAPINFO *data, UINT coloruse);

I may be able to use:

Code:
HBITMAP WINAPI DECLSPEC_HOTPATCH CreateDIBSection(HDC hdc, const BITMAPINFO *bmi, UINT usage, void **bits, HANDLE section, DWORD offset);

EDIT: it seems to work with CreateDIBSection!  Here's the code I'm testing:

Code:
// based on: https://source.winehq.org/git/wine.git/blob/39935fe5ad889d537d828cc82771bdb969cdb2d4:/dlls/gdi32/gdi_private.h#l561
static inline long long get_bitmap_stride(long long width, long long bpp)
{
  return ((width * bpp + 15LL) >> 3LL) & ~1LL;
}

// workaround https://bugs.winehq.org/show_bug.cgi?id=42727
// "obsolete 128MB bitmap size limit"
// see also: http://www.fractalforums.com/windows-fractal-software/windows-bitmap-size-test/
HBITMAP create_bitmap(HDC hdc, int width, int height)
{
  long long stride = get_bitmap_stride(width, 24LL);
  long long bytes = stride * height;
  if (bytes >= 2LL * 1024LL * 1024LL * 1024LL || bytes <= 0LL)
  {
    fprintf(stderr, "ERROR image too large (%lld bytes)
", bytes);
    return 0;
  }
  BITMAPINFO bmi;
  bmi.bmiHeader.biSize = sizeof(bmi);
  bmi.bmiHeader.biWidth = width;
  bmi.bmiHeader.biHeight = height;
  bmi.bmiHeader.biPlanes = 1;
  bmi.bmiHeader.biBitCount = 24;
  bmi.bmiHeader.biCompression = BI_RGB;
  bmi.bmiHeader.biSizeImage = bytes;
  bmi.bmiHeader.biXPelsPerMeter = 2835; // 72 dpi
  bmi.bmiHeader.biYPelsPerMeter = 2835; // 72 dpi
  bmi.bmiHeader.biClrUsed = 0;
  bmi.bmiHeader.biClrImportant = 0;
  return CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, 0, 0, 0);
}

Here's a test image, 16000x9000: https://mathr.co.uk/kf/big-bitmap-wine-test.jpg
« Last Edit: July 11, 2017, 07:33:44 PM by claude, Reason: code, test image » Logged
Pages: [1]   Go Down
  Print  
 
Jump to:  

Related Topics
Subject Started by Replies Views Last post
Attachment size Discuss Fractal Forums fractalwizz 3 1858 Last post December 15, 2009, 03:14:35 PM
by cKleinhuis
Mandelbox size 3D Fractal Generation knighty 6 7919 Last post April 25, 2010, 01:46:01 AM
by David Makin
Render size vs. Animation size? Mandelbulb 3d Weber 3 10404 Last post September 20, 2013, 12:21:11 AM
by Sockratease
Windows is dead and windows 10 unsuitable for fravtal art what is next best OS? Help & Support « 1 2 » Karmic Beats 18 2103 Last post November 11, 2015, 08:50:14 PM
by 3dickulus
Fon size in GUI Mandelbulber cochedelaferte 3 2767 Last post April 24, 2016, 10:39:31 AM
by zebastian

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines

Valid XHTML 1.0! Valid CSS! Dilber MC Theme by HarzeM
Page created in 0.393 seconds with 25 queries. (Pretty URLs adds 0.01s, 2q)