If you think a bug might affect users in the 57 release, please set the correct tracking and status flags for Release Management.

Direct3D 11 OTMC is not initializing on Nvidia 7600 GS

RESOLVED INVALID

Status

()

Core
Graphics: Layers
RESOLVED INVALID
4 years ago
4 years ago

People

(Reporter: Terrell Kelley, Unassigned)

Tracking

28 Branch
x86
Windows 7
Points:
---

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(2 attachments)

(Reporter)

Description

4 years ago
User Agent: Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0 (Beta/Release)
Build ID: 20130915200815

Steps to reproduce:

I enabled OTMC, and attempted to force on Direct2D (and thus Direct3D 11 OTMC). I've trired all of the following settings.

gfx.direct2d.force-enabled
layers.acceleration.force-enabled
layers.offmainthreadcomposition.enabled
layers.offmainthreadcomposition.animate-opacity
layers.offmainthreadcomposition.animate-transform
layers.offmainthreadcomposition.testing.enabled
layers.async-video.enabled


Actual results:

about:support still says I'm using Direct3D9 OTMC. Both Azure backends (canvas and content) were running in Direct2D mode.


Expected results:

I should be using Direct3D11 OTMC, and about:support should say so.

EXTRA INFORMATION: 

The exact opposite happens in Firefox 24. I am unable to force D3D9 OTMC, even with layers.prefer-d3d9 set.

Comment 1

4 years ago
Thanks for filing this bug. I haven't been able to look into it yet due to travel and some high priority things, but I'll do my best to get to it soon.

Comment 2

4 years ago
(In reply to Terrell Kelley from comment #0)
> gfx.direct2d.force-enabled

You shouldn't need this - direct2d should be on by default. If it is not, then you might have driver issues.

> layers.acceleration.force-enabled

You don't need this pref on Windows.

> layers.offmainthreadcomposition.enabled

Turns on OMTC

> layers.offmainthreadcomposition.animate-opacity
> layers.offmainthreadcomposition.animate-transform
> layers.offmainthreadcomposition.testing.enabled
> layers.async-video.enabled

You should not use any of these four prefs

There is also a pref which disables d2d - gfx.direct2d.disabled, could you check that is is set to false?

> 
> 
> Actual results:
> 
> about:support still says I'm using Direct3D9 OTMC. Both Azure backends
> (canvas and content) were running in Direct2D mode.
> 

Could you copy your about:support page to the please?

> 
> Expected results:
> 
> I should be using Direct3D11 OTMC, and about:support should say so.
> 
> EXTRA INFORMATION: 
> 
> The exact opposite happens in Firefox 24. I am unable to force D3D9 OTMC,
> even with layers.prefer-d3d9 set.

I'm not sure off the top of my head, but 24 is probably too old to support d3d9 omtc.
(Reporter)

Comment 3

4 years ago
Like I said in my previous response on the Direct3D 9 renderer, my card is blacklisted for Direct2D (even with the latest driver), and for good reason. The Firefox 24 renderers put black boxes on all fonts. Only the new Azure content renderer in Nightly seems to fix this (and it's still messed up on canvas). And Direct3D 11 OMTC works on Firefox 24, without any black boxes. (It just has scrolling bugs that make it unusable.)

I'll send you my about:support info, but I'm not sure it's as relevant as you think. The bug I'm reporting is that, even if Direct2D is blacklisted on my card, I should be able to force on Direct2D and thus force on Direct3D 11 OMTC. That's the point of having the gfx.direct2d.force-enabled pref. 

As you can guess, I'm testing to see if changes in the Direct2D renderer will support my card, as it seems you are making progress towards such support. And I have to be able to override the blacklist to do that testing.

about:support Graphics info (starting from a blank profile, with just the OMTC and force Direct2d prefs enabled):

Adapter Description          	NVIDIA GeForce 7600 GS
Adapter Drivers           	nvd3dum
Adapter RAM               	512
ClearType Parameters         	Gamma: 2300 Pixel Structure: RGB
Device ID                   	0x02e1
Direct2D Enabled         	true
DirectWrite Enabled            	true (6.2.9200.16571)
Driver Date	                1-31-2013
Driver Version           	9.18.13.783
GPU #2 Active          	        false
GPU Accelerated Windows   	1/1 Direct3D 9 (OMTC)
Vendor ID        	        0x10de
WebGL Renderer          	Google Inc. -- ANGLE (NVIDIA GeForce 7600 GS Direct3D9Ex vs_3_0 ps_3_0)
windowLayerManagerRemote        true
AzureCanvasBackend 	        direct2d
AzureContentBackend 	        direct2d
AzureFallbackCanvasBackend	cairo
AzureSkiaAccelerated       	0

And here are my "Important changed prefs" just to be sure:

browser.cache.disk.capacity                       	358400
browser.cache.disk.smart_size_cached_value      	358400
browser.cache.disk.smart_size.first_run	                false
browser.cache.disk.smart_size.use_old_max       	false
browser.places.smartBookmarksVersion	                4
browser.sessionstore.upgradeBackup.latestBuildID	20131016030202
browser.startup.homepage_override.buildID	        20131016030202
browser.startup.homepage_override.mstone        	27.0a1
dom.mozApps.used                                	true
extensions.lastAppVersion                       	27.0a1
gfx.direct2d.force-enabled                      	true
layers.offmainthreadcomposition.enabled            	true
network.cookie.prefsMigrated                     	true
places.database.lastMaintenance	                        1383094371
places.history.expiration.transient_current_max_pages	26819
plugin.disable_full_page_plugin_for_types       	application/pdf
plugin.importedState                               	true
privacy.sanitize.migrateFx3Prefs                  	true
storage.vacuum.last.index                       	0
storage.vacuum.last.places.sqlite                   	1381940186

Comment 4

4 years ago
So, given the about:support page and some code reading, I'm pretty sure enabling d2d is not the issue - that is, it looks like d2d is being initialised (possibly even used. I expect CompositorD3D11::Initialize is failing and thus we fall back to d3d9, but there are a number of reasons that can happen. We do not check for d2d or any of the d2d prefs there.

Are you able to run Firefox under a debugger to step through CompositorD3D11::Initialize and identify where we are failing? If not I can produce a Firefox build with some logging to identify the failure.
Flags: needinfo?(terrell.kelley)
(Reporter)

Comment 5

4 years ago
I am not. I would need the build you mention.
Flags: needinfo?(terrell.kelley)
(Reporter)

Updated

4 years ago
Summary: Layers OMTC is ignoring gfx.direct2d.force-enabled → Direct3D 11 OTMC is not initializing on Nvidia 7600 GS
Version: 27 Branch → 28 Branch

Comment 6

4 years ago
Created attachment 824447 [details] [diff] [review]
patch for logging

Just leaving this here for posterity.

Comment 7

4 years ago
Building on tryserver: https://tbpl.mozilla.org/?tree=Try&rev=a97b606f7926

Comment 8

4 years ago
The build is here: http://ftp.mozilla.org/pub/mozilla.org/firefox/try-builds/ncameron@mozilla.com-a97b606f7926/try-win32/firefox-28.0a1.en-US.win32.installer.exe

The log output should end up in stdout - in the console if you run firefox there. All the interesting output should begin with "[nrc".

Could you try running this build, confirm it has the same issues, and copy the log here please?
Flags: needinfo?(terrell.kelley)
(Reporter)

Comment 9

4 years ago
(In reply to Nick Cameron [:nrc] from comment #8)
> Could you try running this build, confirm it has the same issues, and copy
> the log here please?

Sure.

[nrc gfxWindowsPlatform::GetDXGIAdapter] returning adapter ca1578
[nrc gfxWindowsPlatform::GetDXGIAdapter] returning cached adapter ca1578
[nrc gfxWindowsPlatform::GetD3D11Device] returning device c838c4
[nrc CompositorD3D11::Initialize] CreateBlendState (3) failed
[nrc gfxWindowsPlatform::GetD3D11Device] returning cached device c838c4
[nrc CompositorD3D11::Initialize] CreateBlendState (3) failed
[nrc gfxWindowsPlatform::GetD3D11Device] returning cached device c838c4
[nrc CompositorD3D11::Initialize] CreateBlendState (3) failed

And, no, alpha was not a problem on Firefox 24 where D3D11 OMTC seems to work. I'll be happy to regression test, BTW.
Flags: needinfo?(terrell.kelley)

Comment 10

4 years ago
Could you try setting the 'layers.componentalpha.enabled' to false please? That ought to solve the problem, but at the expense of losing subpixel AA in some places.

Comment 11

4 years ago
I wonder if your driver/card does not support dual-source blending. That was added to our compositor kind of recently and is the only change to the initialisation code.

Comment 12

4 years ago
(In reply to Nick Cameron [:nrc] from comment #11)
> I wonder if your driver/card does not support dual-source blending. That was
> added to our compositor kind of recently and is the only change to the
> initialisation code.

Given that it is an old card and the d2d issues, that seems the most likely.
(Reporter)

Comment 13

4 years ago
(In reply to Nick Cameron [:nrc] from comment #10)
> Could you try setting the 'layers.componentalpha.enabled' to false please?
> That ought to solve the problem, but at the expense of losing subpixel AA in
> some places.

Yip. That was it. I am now running in D3D11 OMTC. Any chance at using that granular a blacklist?

You say I will loose subpixel AA in "some places." In what places are these? Not in fonts, right? And there doesn't happen to be a similar setting for Azure, does there?

Also, loving the conversation with yourself. :)
(Reporter)

Comment 14

4 years ago
BTW, it also works with D2D shut off.

> And there doesn't happen to be a similar setting for Azure, does there?

When I say Azure, I mean Azure canvas. Azure content acceleration is working (at least, for D2D and Cairo. Skia can't be turned on unless D2D is off. I assume that has to do with problems with DirectWrite.)

Comment 15

4 years ago
(In reply to Terrell Kelley from comment #13)
> (In reply to Nick Cameron [:nrc] from comment #10)
> > Could you try setting the 'layers.componentalpha.enabled' to false please?
> > That ought to solve the problem, but at the expense of losing subpixel AA in
> > some places.
> 
> Yip. That was it. I am now running in D3D11 OMTC. Any chance at using that
> granular a blacklist?
> 

I doubt it. Our blacklist is not super sophisticated and given the other problems you report with d2d it's unlikely it would be useful for very many users.

> You say I will loose subpixel AA in "some places." In what places are these?
> Not in fonts, right? And there doesn't happen to be a similar setting for
> Azure, does there?
> 

We only use subpixel AA for fonts. You will lose it where we would have to use a component alpha surface - that happens when we cannot draw all 'layers' (I'm using scare quotes here because I don't necessarily mean a |Layer| object) to the screen in one go. The common situation where this occurs is where you have text on a transparent or semi-transparent 'layer' with something underneath and we cannot flatten the two 'layers' together for rendering. That is kind of rare, but not as rare as you might think. You hopefully shouldn't notice having no subpixel AA sometimes - it is the default configuration on mobile.

> Also, loving the conversation with yourself. :)

:-)

(Resolving as invalid because there is no 'bug' as such - the issue is due to old hardware and overriding default prefs)
Status: UNCONFIRMED → RESOLVED
Last Resolved: 4 years ago
Resolution: --- → INVALID

Comment 16

4 years ago
(In reply to Terrell Kelley from comment #14)
> BTW, it also works with D2D shut off.
> 
> > And there doesn't happen to be a similar setting for Azure, does there?
> 
> When I say Azure, I mean Azure canvas. Azure content acceleration is working
> (at least, for D2D and Cairo. Skia can't be turned on unless D2D is off. I
> assume that has to do with problems with DirectWrite.)

You are correct that Skia and DirectWrite do not play well together, which means you can't use Skia with D2D. Given that D2D initialises correctly you ought to be able to use the D2D backend for canvas.
(Reporter)

Comment 17

4 years ago
(In reply to Nick Cameron [:nrc] from comment #16)

> You are correct that Skia and DirectWrite do not play well together, which
> means you can't use Skia with D2D. Given that D2D initialises correctly you
> ought to be able to use the D2D backend for canvas.

I can use it, but it still has the font rendering problem (black boxes). Both content  and D2D layers seem to have been refactored to no longer have this problem, so I'm hoping it can also be fixed on canvas. Content and layers accelerate well, and there doesn't seem to be a way to have them on but shut off accelerated canvas.

I would like to have D2D enabled, as I think GDI fonts look horrible, and prefing on DirectWrite has some weird "pop-in" issues where the text renders but antialiased text only pops in later (mostly visible in rich-text boxes). I tested this on another computer (with a compatible card), and this only happens when DirectWrite is preffed on while D2D is off.

Plus, well, it's just nice to have everything accelerated. It just feels snappier.

Comment 18

4 years ago
So, I'm not clear where the problem is now.

- Content works OK with D3D11 layers and D2D azure content backend, but with component alpha turned off, correct?
- You want to use D2D for canvas? (I assume by accelerated, you mean using D2D). So, if you set the azure canvas backend to the default ('direct2d,skia,cairo') you should get d2d and I would expect it to work (you can check in about:support).

Do you see d2d as the canvas backend in about:support?
Does it work when you use a canvas?

If either is no, then you could change the azure canvas pref to 'cairo' and cairo should use the d2d backend (but that is not reported anywhere, so you can't easily check) and performance should be almost as good as if you had d2d without the Cairo wrapping.

If the problem is that you are getting black boxes for text in canvas with d2d, then that is probably a DirectWrite problem (although that is surprising if text is OK for content). The best you can do in that case is probably the Cairo canvas backend (turning off DirectWrite is not really a good idea if it is working for content).
(Reporter)

Comment 19

4 years ago
Created attachment 830451 [details]
screenshot of Firefox 24 and Firefox Nightly, showing D2D rendering problems on my Nvidia GX270

(In reply to Nick Cameron [:nrc] from comment #18)
> So, I'm not clear where the problem is now.
> 
> If the problem is that you are getting black boxes for text in canvas with
> d2d, then that is probably a DirectWrite problem (although that is
> surprising if text is OK for content). The best you can do in that case is
> probably the Cairo canvas backend (turning off DirectWrite is not really a
> good idea if it is working for content).

Perhaps it would be better if I just described what I see. I was just assuming it was canvas, but further testing shows that canvas works right in a lot of cases. The main problem is that right click menu shows black and gray boxes instead of text. You can see it in the attached screenshot.

This is much better than in Firefox 24, where all menus,tab titles, doorhangers, popups, etc had black boxes, as did any text put inside a button (like certain extensions do--for example, Gmail Notifier.) You can also see this in the attached screenshot.

I do not think the problem is in DirectWrite itself, as I can enable DirectWrite while Direct2D is off, and everything looks fine. In fact, this is the configuration I used on Firefox 24, as I think DirectWrite does a better job with ClearType.

Nor is this an OMTC problem. It happens whether I have that on or not. The only thing required to make it happen is Direct2D.
You need to log in before you can comment on or make changes to this bug.