[vlc-devel] [PATCH] nVidia affinity

David R Robison drrobison at openroadsconsulting.com
Thu Aug 29 13:21:56 CEST 2013

Thanks for your comments.

I will remove the .po changes. For some reason the build is modifying 
them and the got included in my "git commit" and my patch.

The reason for specifying nVidia each time is because these are nVidia 
specific OpenGL extensions. There are also extensions for other card 
brands. For example, this page http://glew.sourceforge.net/glew.html 
shows the extensions for other card manufacturers. I didn't want to make 
it so generic that things got confused in the future. I guess the 
question is, do we want one command line switch for GPU affinity and 
then have to determine what kind of graphics card is available before we 
can set the affinity or have a command line argument for each 
manufacturer that supports GPU affinity? If it is generic then, when 
adding affinities for other card manufacturers, we would have to search 
though the supported cards and detect which card is installed and then 
flag the type of affinity we are doing. I hope I am clear in my 
explanation. Any thoughts on how you want to handle this?

I will move the defines to right above the include that uses them. This 
is the <GL/wglew.h> file.

To get the OpenGL function pointers you have to have an active OpenGL 
context. However, you have to call the affinity routines outside an 
OpenGL context. So I create a "dummy" context and fetch the function 
pointers and then throw away the dummy context. I was hoping to cache 
these function pointer so I did not have to fetch them each time I 
needed them by creating another OpenGL context. They are used in the 
open and the close functions. I could either 1) fetch them each time 
they are needed or 2) attach them to some structure like vd->sys. Which 
would you prefer.

For the debug messages, I wanted some way to positively tell the user if 
the GPU selection was successful or failed because the nVidia affinity 
extensions did not exist. Without this there is no real way to know if 
the selection worked. However I set them to debug so they would normally 
be silent. Also, they would only be displayed if the user actually 
selected a GPU affinity. But I can remove them if you wish.


David R Robison
Open Roads Consulting, Inc.
103 Watson Road, Chesapeake, VA 23320
phone: (757) 546-3401
e-mail: drrobison at openroadsconsulting.com
web: http://openroadsconsulting.com
blog: http://therobe.blogspot.com
book: http://www.xulonpress.com/bookstore/bookdetail.php?PB_ISBN=9781597816526

On 8/29/2013 7:06 AM, Jean-Baptiste Kempf wrote:
> On 28 Aug, David R Robison wrote :
>>    modules/video_output/Modules.am    |    2 +-
>>    modules/video_output/msw/common.h  |    3 ++
>>    modules/video_output/msw/glwin32.c |   87
>> +++++++++++++++++++++++++++++++++++-
>>    po/nb.po                           |    2 +-
>>    po/or.po                           |    2 +-
>>    5 files changed, 91 insertions(+), 5 deletions(-)
> No .po changes in this patch.
>> +    // nVidia GPU affinity
>> +    HDC affinityHDC
> "GPU affinity" is enough and can be done inline.
>> +#define GLEW_NO_GLU
>> +#define GLEW_STATIC
> Where is the include?
>> +#define HW_NVIDIA_AFFINITY_TEXT N_("nVidia affinity of adapter")
>> +    "nVidia affinity of adapter indexed from 0.")
> No. Remove nVidia from there. It will get implemented at some point with
> ATI and we do not want to ask translators to redo it.
>> +    add_integer("nvidia-affinity", -1, HW_NVIDIA_AFFINITY_TEXT,
> idem --gpu-affinity
>> +#undef wglEnumGpusNV
>> +#undef wglCreateAffinityDCNV
>> +#undef wglDeleteDCNV
> Why?
>> +static void AssignNVidiaAffinity(vout_display_t *vd, UINT nVidiaAffinity) {
> Here, this is fine to call it nVidia.
>> +    /* see if we have the extensions */
>> +    if (!wglEnumGpusNV || !wglCreateAffinityDCNV) {
>> +        msg_Dbg(vd, "OpenGL nVidia extensions do not seem to be present" );
>> +        return;
>> +    }
> You are going to spam the messages for all GPU not-nVidia and the old
> nVidia ones? Why not doing it only if requested?
>> +    /* process card specific affinities */
>> +    int nVidiaAffinity = var_InheritInteger(vd, "nvidia-affinity");
>> +    if (nVidiaAffinity >= 0) {
>> +        msg_Dbg(vd, "nVidia affinity using adapter %d", nVidiaAffinity );
>> +        AssignNVidiaAffinity(vd, nVidiaAffinity);
>> +    }
> See above.
> Best regards,

This email communication (including any attachments) may contain confidential and/or privileged material intended solely for the individual or entity to which it is addressed.
If you are not the intended recipient, please delete this email immediately.

More information about the vlc-devel mailing list