OBS branch with AMD VCE support.

dping

Active Member
I have two 280X cards and I would like to use one of the card for gaming and the other one for encoding the stream. If I follow your guide, will this give me absolutely no FPS drops at all when streaming?

Should I use the two cards separately or should they be crossfire?
the middle of page 77 has some info on it, but I believe you need to checkout the device ID from the logfile or something?
 

dping

Active Member
I read through page 76-78 but could not find what I was looking for. Am I blind?
Yes, it actually started in the middle of page 76:
If you have dual graphics (list of cards/APU's supporting dual graphics: http://www.amd.com/en-us/innovations/software-technologies/dual-graphics#desktop) running, that may be possible? I am running two 7970's in crossfire, and OBS always use the second GPU for VCE. So if I'm not using crossfire in a game, the primary GPU runs the game, and secondary GPU does the streaming. This way I have literally zero impact on performance. Maybe it's possible to get the same thing using dual graphics?

@TheReaperV11 Currently I'm using the same adapter index as OBS, but I'll try to add a separate selector.

From obs-studio side so far, most (too much) time went to getting some settings stuff in place. Now to add code to pass stuff to encoder and get something back.

E: Does anyone still use Vista? I ask because obs-studio dx11 renderer uses dx11 API calls supported by win7 or newer.

2015-02-17: [32bit] [64bit] : experimental secret adapter index setting (see here)
Power user-ish: to use another VCE capable device/card, open profile ini and add "AdapterID=n" under "VCE Settings" where n is some number. See log window for device indexes. Custom settings has to be also checked. Disabling OpenCL interop. may also be needed, but maybe driver takes care of some buffer migration from one device to another.
 

Darker

Member
Yes, it actually started in the middle of page 76:

Ah thanks. Seems like halsoy is running Crossfire but I have sooo much trouble with it. Is it possible to do it without Crossfire? I am confused about where I should change the AdapterID. Jackun wrote that I should open profile ini, but I cant find that file in my OBS folder.
 

tommesfps

New Member
First of all, thank you very much for investing your time into that project jackun, to give people like me the great opportunity to record gameplay in 1080p and 50-60fps with max details without any impact on the game! Its just amazing!

But i cant help asking here for an anchor point where i can get better information about the VCE options, even after testing on my own and research for quite some time.

When i switch on "use custom parameters", the preset of "speed" and "balanced" works just fine, but i cant realy notice a difference in terms of performance or image quality, but should i?
If i turn on "quality", i just cant render, no metter what bitrate i choose.

I dont know where to start to optimize, do i have to optimize the size of gop?
 

dping

Active Member
First of all, thank you very much for investing your time into that project jackun, to give people like me the great opportunity to record gameplay in 1080p and 50-60fps with max details without any impact on the game! Its just amazing!

But i cant help asking here for an anchor point where i can get better information about the VCE options, even after testing on my own and research for quite some time.

When i switch on "use custom parameters", the preset of "speed" and "balanced" works just fine, but i cant realy notice a difference in terms of performance or image quality, but should i?
If i turn on "quality", i just cant render, no metter what bitrate i choose.

I dont know where to start to optimize, do i have to optimize the size of gop?
Jackun has put links on OP for a few explanations of some of the settings. the quality preset does not work with 1080@60.

as long as you have enough bitrate for your recording, balanced and speed should not be a whole lot different. I'm talking 50,000kb/s for 1080@60. If you dont notice the difference, set it to speed as not not waist resources.

GOP is one of those effeciency of the encoding. a higher GOP will give you better picture quality at the same bitrate of recording. a GOP of 60 (for 60fps recording) should be plenty though, and you could even say that for speed purposes, you could to a GOP of 30 (which is what youtube recommends anyway.
 

Darker

Member
2015-02-17: [32bit] [64bit] : experimental secret adapter index setting (see here)
Power user-ish: to use another VCE capable device/card, open profile ini and add "AdapterID=n" under "VCE Settings" where n is some number. See log window for device indexes. Custom settings has to be also checked. Disabling OpenCL interop. may also be needed, but maybe driver takes care of some buffer migration from one device to another.

I have two 280X in my computer. They are running separately, no crossfire. I went into AppData\Roaming\OBS\profiles and added AdapterID=2 under [VCE Settings] on the profile I am using. Tried to record, but I instantly felt that the FPS dropped. I would appreciate it very much if you could help me out with this problem.

http://pastebin.com/SbXsAUsA
 

jackun

Developer
I have two 280X in my computer. They are running separately, no crossfire. I went into AppData\Roaming\OBS\profiles and added AdapterID=2 under [VCE Settings] on the profile I am using. Tried to record, but I instantly felt that the FPS dropped. I would appreciate it very much if you could help me out with this problem.

http://pastebin.com/SbXsAUsA

I don't see any D3D11 device enumeration from ObsVCEAMF. Make sure Engine Type is Dx11 (maybe Dx9 also works, I can't remember) and then set AdapterID=1 (index is zero-based). And since you're on Win7, you'd probably be better off also enabling D3D/OpenCL interop. (needs Dx11 engine type) as Win7 doesn't have NV12 Dx11 texture format support :(
 
Last edited:

Darker

Member
I don't see any D3D11 device enumeration from ObsVCEAMF. Make sure Engine Type is Dx11 and then set AdapterID=1 (index is zero-based). And since you're on Win7, you'd probably be better off also enabling OpenCL interop. as Win7 doesn't have NV12 Dx11 texture format support :(

Thanks for the reply! I changed the AdapterID to 1, but where do I change the Engine Type? In the profile ini I can see AMFEngine=0, is that what I should change?
 

jackun

Developer
You probably have to close OBS then before you manually edit the ini as ObsVCEAMF only reads the AdapterID value and doesn't write it to ini itself.

It is still missing something. You should see something like this after "Build date" line

Code:
DX11: List of adapters:
  0: Device ID: 67B1 [AMD Radeon R9 200 Series]
AMF DX11 : Using device 0: Device ID: 67B1 [AMD Radeon R9 200 Series]
InitDX11() created HW DX11.1 device
CL Platform Extensions: cl_khr_icd cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_dx9_media_sharing cl_amd_event_callback cl_amd_offline_devices
CL Device Extensions: cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_gl_sharing cl_ext_atomic_counters_32 cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_dx9_media_sharing cl_khr_image2d_from_buffer cl_khr_spir cl_khr_subgroups cl_khr_gl_event cl_khr_depth_images
 

Darker

Member
You probably have to close OBS then before you manually edit the ini as ObsVCEAMF only reads the AdapterID value and doesn't write it to ini itself.

It is still missing something. You should see something like this after "Build date" line

Code:
DX11: List of adapters:
  0: Device ID: 67B1 [AMD Radeon R9 200 Series]
AMF DX11 : Using device 0: Device ID: 67B1 [AMD Radeon R9 200 Series]
InitDX11() created HW DX11.1 device
CL Platform Extensions: cl_khr_icd cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_dx9_media_sharing cl_amd_event_callback cl_amd_offline_devices
CL Device Extensions: cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_gl_sharing cl_ext_atomic_counters_32 cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_dx9_media_sharing cl_khr_image2d_from_buffer cl_khr_spir cl_khr_subgroups cl_khr_gl_event cl_khr_depth_images

I can see all that under DX11: List of adapters:. Here is the latest log: https://gist.github.com/anonymous/17810a1313d71196a622

It says AMF DX11 : Using device 0: Device ID: 6798 [AMD Radeon R9 200 Series] but should it not be using device 1?
 

jackun

Developer
Hmm, if you have crossfire enabled then it probably detected the "crossfired" device. When I'll update this to v0.65 I'll check what OBS does differently when enumerating adapters that it sees 2 devices instead the single "merged" one.
 

Darker

Member
Hmm, if you have crossfire enabled then it probably detected the "crossfired" device. When I'll update this to v0.65 I'll check what OBS does differently when enumerating adapters that it sees 2 devices instead the single "merged" one.

Okay, thank you for doing this! I am not running the cards in crossfire though, but I should mention that the second card is sitting in a PCIEx4 slot. It cant have anything to do with the topology id, no? http://i.imgur.com/mS0mFGv.png
 
Last edited:

Darker

Member
Ok, then I'll add some more logging as to why it ignores the second card. TopoId is used with the older OVE api, not with AMF.

Ok, good! So I guess all I can do now is wait? Also I saw you mentioned that I would be better off using NV12 Dx11. What is it that would be improved if I would use NV12?
 
Last edited:

jackun

Developer
Ok, good! So I guess all I can do now is wait? Also I saw you mentioned that I would be better off using NV12 Dx11. What is it that would be improved if I would use NV12?
Ok, try this and post the log.

Nah, better off using OpenCL interop. (which you have already enabled anyway) because Win7 doesn't support Dx11 textures in NV12 format for what ever reason.
 
Top