SkiaSharp icon indicating copy to clipboard operation
SkiaSharp copied to clipboard

[FEATURE] Support Direct3D

Open Kation opened this issue 10 months ago • 5 comments

Is your feature request related to a problem?

  1. Some GPU or its driver doesn't support Vulkan. For example, Intel Xe Graphics currently driver will return null ptr when get procedure address for some name. Then GRContext.CreateVulkan will return null.
  2. Some environment only support OpenGL 1.1. For example, Virtual Machine without GPU. Or remote control without RDP with Intel Xe Graphics. Then GRContext.CreateGl will return null.

Without Vulkan and OpenGL, we can only use CPU to render images.

Describe the solution you would like

Add D3D support with Windows os.

Describe alternatives you have considered

Add define SK_Direct3D when compile native skia so that I can use it with pinvoke and reflection.

Additional context

No response

Code of Conduct

  • [X] I agree to follow this project's Code of Conduct

Kation avatar Apr 01 '24 03:04 Kation

I have tried to use SharpDX to create backend. But I found there is no api define in libSkiaSharp because compile without define SK_Direct3D.

Kation avatar Apr 01 '24 03:04 Kation

👍👍👍

996666925 avatar Apr 01 '24 06:04 996666925

The code demonstrates a deep understanding of the domain, incorporating relevant design patterns and domain-specific optimizations that reflect your expertise and intimate familiarity with the subject matter

Shunfeng88 avatar Apr 01 '24 06:04 Shunfeng88

@mgood7123

Skia have define D3D functions: https://github.com/mono/skia/blob/a0008792c861228872a0a21f5f3422c4c8824720/include/gpu/GrDirectContext.h#L105-L112

But our SkiaSharp does not add those define: https://github.com/mono/skia/blob/a0008792c861228872a0a21f5f3422c4c8824720/include/c/gr_context.h#L28-L33

Kation avatar Apr 05 '24 09:04 Kation

Just as a warning here. Over the years I've run into various areas where Direct2D performs in degraded ways compared to Skia software or Skia OpenGL/Vulkan backends. Mostly this has to do with conversion of Path geometry into tessellated meshes. If you have paths with high frequency changes in direction, this seems to be a terrible performance case for Direct2D.

Now, maybe the Direct3D backend for skia sidesteps this stuff if it is using lower level primitives and skipping all the Direct2D stuff. But I'd keep an eye out for degraded path rendering scenarios if the backend touches any of the high level stuff.

gmurray81 avatar May 23 '24 20:05 gmurray81