RE: about video memory detection in wine

2009-08-18 Thread Sun, Sunny
Hi Verbeet
The spec will be fixed, but it will take some time. But I think we can use it 
now because it is implemented and will not change.

Hi Dösinger
Have you done that?

Regards
Sunny
-Original Message-
From: Henri Verbeet [mailto:hverb...@gmail.com] 
Sent: Sunday, August 16, 2009 9:52 AM
To: Stefan Dösinger
Cc: Sun, Sunny; wine-devel@winehq.org; Roderick Colenbrander
Subject: Re: about video memory detection in wine

2009/8/15 Stefan Dösinger :
> I'll send the patches on monday with a few minor improvements.
>
I think the spec should be fixed/extended first.






RE: about video memory detection in wine

2009-08-15 Thread Sun, Sunny
Hi

Here I just want to tell you that if a user uses an old driver that we don't 
support querying total memory will lead to vidmem = 0, that is unexpected, so 
we should have a check.

It doesn't matter that the total memory is not documented, as long as it can 
tell you the true value.

And for the old card that doesn't support ATI_meminfo can still go the fall 
back path.

I think the biggest benefit from using this extension is that you don't have to 
update the vidmem list for newly realeased ATI cards, and you can get the 
correct amount of video memory for the same render string but with different 
video memory (eg: HD4870 may have 1GB memory or only 512MB memory)

 

Regards

Sunny

-Original Message-
From: Stefan Dösinger [mailto:stefandoesin...@gmx.at] 
Sent: Saturday, August 15, 2009 12:31 AM
To: Sun, Sunny
Cc: Roderick Colenbrander; wine-devel@winehq.org
Subject: Re: about video memory detection in wine

 

Am Friday 14 August 2009 18:01:07 schrieb Sun, Sunny:

> +if(gl_info->vidmem < 64 * 1024 * 1024)

> +gl_info->vidmem = 64 * 1024 * 1024;

I guess the idea is that no ATI card that was ever supported on fglrx has less 

than 64 mb of memory? My old radeon 9000, which isn't supported by fglrx 

since years now has 64 MB. Does this hold true for radeon 8500 cards too?

 

I think I'll use the guessed amount of vidmem in this case instead of 

hardcoding 64 MB.

 

Using the undocumented value and the check for older drivers which don't 

support it is a bit hacky, but its a well-isolated hack and avoids a lot of 

problems, so it should be ok.

 




RE: about video memory detection in wine

2009-08-14 Thread Sun, Sunny
Thanks, I will do it later

Regards
Sunny
-Original Message-
From: Henri Verbeet [mailto:hverb...@gmail.com] 
Sent: Friday, August 14, 2009 7:26 PM
To: Sun, Sunny
Cc: wine-devel@winehq.org
Subject: Re: about video memory detection in wine

Could you please subscribe to wine-devel
(http://www.winehq.org/mailman/listinfo/wine-devel) so your mail
doesn't have to go through moderation? It's possible to disable mail
delivery if you don't want to receive all the mail.






RE: about video memory detection in wine

2009-08-14 Thread Sun, Sunny
Hi

We have implemented GL_TOTAL_PHYSICAL_MEMORY for about 8 months, so you will 
not get the GL_INVALID_ENUM error. I think it will be documented later.

I have tested with your patch with 3 ATI asics, all of them can get the correct 
amount of video memory (1GB, 256MB, 128MB).

For the reason that GL_TOTAL_PHYSICAL_MEMORY is implemented after 
GL_ATI_meminfo, so if a user uses too old driver (about before Catalyst 9.2), 
he may have problems to get the correct amount of video memory, so I suggested 
to add the following code in your patches:

+if(GL_SUPPORT(ATI_MEMINFO))

+{

+/* All GL_ATI_meminfo enums return 4 ints, even the (undocumented)

+ * GL_TOTAL_PHYSICAL_MEMORY_ATI one, which returns {mem, 0, 0, 0} */

+GLint mem[4] = {0};

+/* Returns the vidmem in KB */

+glGetIntegerv(GL_TOTAL_PHYSICAL_MEMORY_ATI, mem);

+TRACE("Video memory from OpenGL: %d MB\n", mem[0] / 1024);

+gl_info->vidmem = mem[0] * 1024; /* convert from KBs to bytes */

+if(gl_info->vidmem < 64 * 1024 * 1024)

+gl_info->vidmem = 64 * 1024 * 1024;

+}

Please tell me if you have any questions, thanks and good night!

 

Regards

Sunny

-Original Message-
From: Stefan Dösinger [mailto:stefandoesin...@gmx.at] 
Sent: Friday, August 14, 2009 7:13 PM
To: Sun, Sunny
Cc: Roderick Colenbrander; wine-devel@winehq.org; ORCA Linux
Subject: Re: about video memory detection in wine

 

Hi,

Can you give the attached patches a try? Do they detect the correct amount of 

video memory?

 

Thanks,

Stefan

 

Am Friday 14 August 2009 11:58:12 schrieb Sun, Sunny:

> Hi

> 

> I think it is difficult to maintain a large list of all ASICs, for you have

> to change the list from time to time when a new ASIC is released. Actually

> we have provided the functionality for getting total video memory, you can

> use the following code to get the total video memory with ATI cards.

> 

> #define GL_TOTAL_PHYSICAL_MEMORY_ATI0x87FE

> 

> const char *glExtensions = (const char*)glGetString(GL_EXTENSIONS);

> 

> if(strstr(glExtensions, "GL_ATI_meminfo"))

> 

> {

> 

> int total_mem[4] = {0};

> 

> glGetIntegerv(GL_TOTAL_PHYSICAL_MEMORY_ATI, total_mem); //

> total_mem[0] contains the total video memory size and the value is in Kbyte

> 

> vidmem = total_mem[0] / 1024; //converting from Kbyte to Mbyte

> 

> }

> 

> 

> 

> Regards

> 

> Sunny

> 

> -Original Message-

> From: Roderick Colenbrander [mailto:thunderbir...@gmail.com]

> Sent: Friday, August 14, 2009 1:44 AM

> To: Stefan Dösinger

> Cc: wine-devel@winehq.org; Hu, Li; Jin, Jian-Rong; Wang, Robin; Guan,

> Xiao-Feng; Sun, Sunny Subject: Re: about video memory detection in wine

> 

> On Thu, Aug 13, 2009 at 6:59 PM, Stefan Dösinger 

wrote:

> > Am Wednesday 12 August 2009 10:04:10 schrieb Sun, Sunny:

> >> I think you can first detect GL_ATI_meminfo in

> >>

> >> glGetString(GL_EXTENSIONS); if GL_ATI_meminfo exists, then you can use

> >>

> >> glGetIntegerv(GL_VBO_FREE_MEMORY_ATI, param) to get the current free

> >>

> >> video memory, you can see more info at:

> >

> > A minor problem with GL_ATI_meminfo is that it doesn't report the total

> > amount

> >

> > of video memory available. D3D8 and D3D9 only report the free amount as

> > well,

> >

> > but DirectDraw can return the total amount. There are some games that

> > first

> >

> > query the total amount using ddraw, then continue with d3d8 or 9.

> > Depending

> >

> > on what other apps are doing, reporting the currently free amount as

> > total

> >

> > might result in the app thinking that free vidmem > total vidmem, running

> >

> > into all sorts of troubles. (For example, another app frees a lot of

> > textures

> >

> > between the ddraw vidmem query and the d3d9 vidmem query)

> 

> It is even worse. Even OpenGL apps like WoW use ddraw for querying the

> 

> amount of video memory at startup!

> 

> In case of Nvidia the amount of video memory and the pci ids are

> 

> advertised using the NV-CONTROL extension. At some point I plan on

> 

> adding code for that. Even when using such extension the current

> 

> fallback is still needed. The list needs some updates.

> 

> > The other issue is that if some other apps use lots of video memory(like

> >

> > Compiz, etc), then we can still run into the same out of memory issue if

> >

> > other apps consume too much video memory.

> >

> >

> >

> > We should probably also fall back to a saner default on newer d3d10 class

> >

> > cards - a radeon 9500 isn't really representative for them any more.

> 

> I still have to update that part but haven't had time for it yet.

> 

> 

> 

> Roderick

 

 




RE: about video memory detection in wine

2009-08-14 Thread Sun, Sunny
Hi

I think it is difficult to maintain a large list of all ASICs, for you have to 
change the list from time to time when a new ASIC is released. Actually we have 
provided the functionality for getting total video memory, you can use the 
following code to get the total video memory with ATI cards.

#define GL_TOTAL_PHYSICAL_MEMORY_ATI0x87FE

const char *glExtensions = (const char*)glGetString(GL_EXTENSIONS);

if(strstr(glExtensions, "GL_ATI_meminfo"))

{

int total_mem[4] = {0};

glGetIntegerv(GL_TOTAL_PHYSICAL_MEMORY_ATI, total_mem); // total_mem[0] 
contains the total video memory size and the value is in Kbyte

vidmem = total_mem[0] / 1024; //converting from Kbyte to Mbyte

}

 

Regards

Sunny

-Original Message-
From: Roderick Colenbrander [mailto:thunderbir...@gmail.com] 
Sent: Friday, August 14, 2009 1:44 AM
To: Stefan Dösinger
Cc: wine-devel@winehq.org; Hu, Li; Jin, Jian-Rong; Wang, Robin; Guan, 
Xiao-Feng; Sun, Sunny
Subject: Re: about video memory detection in wine

 

On Thu, Aug 13, 2009 at 6:59 PM, Stefan Dösinger wrote:

> Am Wednesday 12 August 2009 10:04:10 schrieb Sun, Sunny:

> 

>> I think you can first detect GL_ATI_meminfo in

>> glGetString(GL_EXTENSIONS); if GL_ATI_meminfo exists, then you can use

>> glGetIntegerv(GL_VBO_FREE_MEMORY_ATI, param) to get the current free

>> video memory, you can see more info at:

> A minor problem with GL_ATI_meminfo is that it doesn't report the total amount

> of video memory available. D3D8 and D3D9 only report the free amount as well,

> but DirectDraw can return the total amount. There are some games that first

> query the total amount using ddraw, then continue with d3d8 or 9. Depending

> on what other apps are doing, reporting the currently free amount as total

> might result in the app thinking that free vidmem > total vidmem, running

> into all sorts of troubles. (For example, another app frees a lot of textures

> between the ddraw vidmem query and the d3d9 vidmem query)

 

It is even worse. Even OpenGL apps like WoW use ddraw for querying the

amount of video memory at startup!

In case of Nvidia the amount of video memory and the pci ids are

advertised using the NV-CONTROL extension. At some point I plan on

adding code for that. Even when using such extension the current

fallback is still needed. The list needs some updates.

 

> The other issue is that if some other apps use lots of video memory(like

> Compiz, etc), then we can still run into the same out of memory issue if

> other apps consume too much video memory.

> 

> We should probably also fall back to a saner default on newer d3d10 class

> cards - a radeon 9500 isn't really representative for them any more.

> 

I still have to update that part but haven't had time for it yet.

 

Roderick

 




RE: about video memory detection in wine

2009-08-12 Thread Sun, Sunny
Hi

I am sorry I forgot to introduce myself.

I am a software engineer at AMD, working on OpenGL graphics driver, I am
working with wine issues now. Some uses complained that there are too
many issues to play games with wine with AMD graphics card, so we want
to improve the quality.

That's all, Thanks

 

Regards

Sunny



From: Sun, Sunny 
Sent: Wednesday, August 12, 2009 4:04 PM
To: 'wine-devel@winehq.org'
Cc: Jin, Jian-Rong; Hu, Li; Guan, Xiao-Feng; Wang, Robin
Subject: about video memory detection in wine

 

Hi

You are using the hardcoded method to get the vidmem now (in function
IWineD3DImpl_FillGLCaps), first you call glGetString(GL_RENDERER) to get
the GPU renderer string, and then you use this string to set the vidmem
in your code. Unfortunately you don't get all of the ATI GPU's string
now, for our workstation GPU, the string is always like "ATI FireGL
V8700", so you don't recognize this GPU and consider it as
ATI_RADEON_9500, then 64MB is set which doesn't support 1280x1024
resolution (Out of adapter memory).

I think you can first detect GL_ATI_meminfo in
glGetString(GL_EXTENSIONS); if GL_ATI_meminfo exists, then you can use
glGetIntegerv(GL_VBO_FREE_MEMORY_ATI, param) to get the current free
video memory, you can see more info at:

http://www.opengl.org/registry/specs/ATI/meminfo.txt

if GL_ATI_meminfo doesn't exist, you can fall back to the original
method.

Please tell me if you have any questions.

 

Regards,

Sunny, Sun

 




about video memory detection in wine

2009-08-12 Thread Sun, Sunny
Hi

You are using the hardcoded method to get the vidmem now (in function
IWineD3DImpl_FillGLCaps), first you call glGetString(GL_RENDERER) to get
the GPU renderer string, and then you use this string to set the vidmem
in your code. Unfortunately you don't get all of the ATI GPU's string
now, for our workstation GPU, the string is always like "ATI FireGL
V8700", so you don't recognize this GPU and consider it as
ATI_RADEON_9500, then 64MB is set which doesn't support 1280x1024
resolution (Out of adapter memory).

I think you can first detect GL_ATI_meminfo in
glGetString(GL_EXTENSIONS); if GL_ATI_meminfo exists, then you can use
glGetIntegerv(GL_VBO_FREE_MEMORY_ATI, param) to get the current free
video memory, you can see more info at:

http://www.opengl.org/registry/specs/ATI/meminfo.txt

if GL_ATI_meminfo doesn't exist, you can fall back to the original
method.

Please tell me if you have any questions.

 

Regards,

Sunny, Sun