# Copyright 2020 The ANGLE Project Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# This file houses the build configuration for the ANGLE D3D back-ends.

import("../../../../gni/angle.gni")

assert(angle_enable_d3d11 || angle_enable_d3d9)

_d3d_shared_sources = [
  "BufferD3D.cpp",
  "BufferD3D.h",
  "CompilerD3D.cpp",
  "CompilerD3D.h",
  "ContextD3D.h",
  "DeviceD3D.cpp",
  "DeviceD3D.h",
  "DisplayD3D.cpp",
  "DisplayD3D.h",
  "DynamicHLSL.cpp",
  "DynamicHLSL.h",
  "DynamicImage2DHLSL.cpp",
  "DynamicImage2DHLSL.h",
  "EGLImageD3D.cpp",
  "EGLImageD3D.h",
  "FramebufferD3D.cpp",
  "FramebufferD3D.h",
  "HLSLCompiler.cpp",
  "HLSLCompiler.h",
  "ImageD3D.cpp",
  "ImageD3D.h",
  "IndexBuffer.cpp",
  "IndexBuffer.h",
  "IndexDataManager.cpp",
  "IndexDataManager.h",
  "NativeWindowD3D.cpp",
  "NativeWindowD3D.h",
  "ProgramD3D.cpp",
  "ProgramD3D.h",
  "RenderTargetD3D.cpp",
  "RenderTargetD3D.h",
  "RenderbufferD3D.cpp",
  "RenderbufferD3D.h",
  "RendererD3D.cpp",
  "RendererD3D.h",
  "SamplerD3D.h",
  "ShaderD3D.cpp",
  "ShaderD3D.h",
  "ShaderExecutableD3D.cpp",
  "ShaderExecutableD3D.h",
  "SurfaceD3D.cpp",
  "SurfaceD3D.h",
  "SwapChainD3D.cpp",
  "SwapChainD3D.h",
  "TextureD3D.cpp",
  "TextureD3D.h",
  "TextureStorage.h",
  "VertexBuffer.cpp",
  "VertexBuffer.h",
  "VertexDataManager.cpp",
  "VertexDataManager.h",
  "driver_utils_d3d.cpp",
  "driver_utils_d3d.h",
  "formatutilsD3D.h",
]

if (!angle_is_winuwp) {
  _d3d_shared_sources += [
    "../../../third_party/systeminfo/SystemInfo.cpp",
    "../../../third_party/systeminfo/SystemInfo.h",
  ]
}

if (angle_enable_d3d9) {
  _d3d9_backend_sources = [
    "d3d9/Blit9.cpp",
    "d3d9/Blit9.h",
    "d3d9/Buffer9.cpp",
    "d3d9/Buffer9.h",
    "d3d9/Context9.cpp",
    "d3d9/Context9.h",
    "d3d9/DebugAnnotator9.cpp",
    "d3d9/DebugAnnotator9.h",
    "d3d9/Fence9.cpp",
    "d3d9/Fence9.h",
    "d3d9/Framebuffer9.cpp",
    "d3d9/Framebuffer9.h",
    "d3d9/Image9.cpp",
    "d3d9/Image9.h",
    "d3d9/IndexBuffer9.cpp",
    "d3d9/IndexBuffer9.h",
    "d3d9/NativeWindow9.cpp",
    "d3d9/NativeWindow9.h",
    "d3d9/Query9.cpp",
    "d3d9/Query9.h",
    "d3d9/RenderTarget9.cpp",
    "d3d9/RenderTarget9.h",
    "d3d9/Renderer9.cpp",
    "d3d9/Renderer9.h",
    "d3d9/ShaderCache.h",
    "d3d9/ShaderExecutable9.cpp",
    "d3d9/ShaderExecutable9.h",
    "d3d9/StateManager9.cpp",
    "d3d9/StateManager9.h",
    "d3d9/SwapChain9.cpp",
    "d3d9/SwapChain9.h",
    "d3d9/TextureStorage9.cpp",
    "d3d9/TextureStorage9.h",
    "d3d9/VertexArray9.h",
    "d3d9/VertexBuffer9.cpp",
    "d3d9/VertexBuffer9.h",
    "d3d9/VertexDeclarationCache.cpp",
    "d3d9/VertexDeclarationCache.h",
    "d3d9/formatutils9.cpp",
    "d3d9/formatutils9.h",
    "d3d9/renderer9_utils.cpp",
    "d3d9/renderer9_utils.h",
    "d3d9/shaders/compiled/componentmaskpremultps.h",
    "d3d9/shaders/compiled/componentmaskps.h",
    "d3d9/shaders/compiled/componentmaskunmultps.h",
    "d3d9/shaders/compiled/luminancepremultps.h",
    "d3d9/shaders/compiled/luminanceps.h",
    "d3d9/shaders/compiled/luminanceunmultps.h",
    "d3d9/shaders/compiled/passthroughps.h",
    "d3d9/shaders/compiled/standardvs.h",
    "d3d9/vertexconversion.h",
  ]
}

if (angle_enable_d3d11) {
  _d3d11_backend_sources = [
    "d3d11/Blit11.cpp",
    "d3d11/Blit11.h",
    "d3d11/Blit11Helper_autogen.inc",
    "d3d11/Buffer11.cpp",
    "d3d11/Buffer11.h",
    "d3d11/Clear11.cpp",
    "d3d11/Clear11.h",
    "d3d11/Context11.cpp",
    "d3d11/Context11.h",
    "d3d11/DebugAnnotator11.cpp",
    "d3d11/DebugAnnotator11.h",
    "d3d11/ExternalImageSiblingImpl11.cpp",
    "d3d11/ExternalImageSiblingImpl11.h",
    "d3d11/Fence11.cpp",
    "d3d11/Fence11.h",
    "d3d11/Framebuffer11.cpp",
    "d3d11/Framebuffer11.h",
    "d3d11/Image11.cpp",
    "d3d11/Image11.h",
    "d3d11/IndexBuffer11.cpp",
    "d3d11/IndexBuffer11.h",
    "d3d11/InputLayoutCache.cpp",
    "d3d11/InputLayoutCache.h",
    "d3d11/MappedSubresourceVerifier11.cpp",
    "d3d11/MappedSubresourceVerifier11.h",
    "d3d11/NativeWindow11.h",
    "d3d11/PixelTransfer11.cpp",
    "d3d11/PixelTransfer11.h",
    "d3d11/Program11.cpp",
    "d3d11/Program11.h",
    "d3d11/ProgramPipeline11.cpp",
    "d3d11/ProgramPipeline11.h",
    "d3d11/Query11.cpp",
    "d3d11/Query11.h",
    "d3d11/RenderStateCache.cpp",
    "d3d11/RenderStateCache.h",
    "d3d11/RenderTarget11.cpp",
    "d3d11/RenderTarget11.h",
    "d3d11/Renderer11.cpp",
    "d3d11/Renderer11.h",
    "d3d11/ResourceManager11.cpp",
    "d3d11/ResourceManager11.h",
    "d3d11/ShaderExecutable11.cpp",
    "d3d11/ShaderExecutable11.h",
    "d3d11/StateManager11.cpp",
    "d3d11/StateManager11.h",
    "d3d11/StreamProducerD3DTexture.cpp",
    "d3d11/StreamProducerD3DTexture.h",
    "d3d11/SwapChain11.cpp",
    "d3d11/SwapChain11.h",
    "d3d11/TextureStorage11.cpp",
    "d3d11/TextureStorage11.h",
    "d3d11/TransformFeedback11.cpp",
    "d3d11/TransformFeedback11.h",
    "d3d11/Trim11.cpp",
    "d3d11/Trim11.h",
    "d3d11/VertexArray11.cpp",
    "d3d11/VertexArray11.h",
    "d3d11/VertexBuffer11.cpp",
    "d3d11/VertexBuffer11.h",
    "d3d11/formatutils11.cpp",
    "d3d11/formatutils11.h",
    "d3d11/renderer11_utils.cpp",
    "d3d11/renderer11_utils.h",
    "d3d11/shaders/compiled/buffertotexture11_gs.h",
    "d3d11/shaders/compiled/buffertotexture11_ps_4f.h",
    "d3d11/shaders/compiled/buffertotexture11_ps_4i.h",
    "d3d11/shaders/compiled/buffertotexture11_ps_4ui.h",
    "d3d11/shaders/compiled/buffertotexture11_vs.h",
    "d3d11/shaders/compiled/clear11_fl9vs.h",
    "d3d11/shaders/compiled/clear11multiviewgs.h",
    "d3d11/shaders/compiled/clear11multiviewvs.h",
    "d3d11/shaders/compiled/clear11vs.h",
    "d3d11/shaders/compiled/cleardepth11ps.h",
    "d3d11/shaders/compiled/clearfloat11_fl9ps.h",
    "d3d11/shaders/compiled/clearfloat11ps1.h",
    "d3d11/shaders/compiled/clearfloat11ps2.h",
    "d3d11/shaders/compiled/clearfloat11ps3.h",
    "d3d11/shaders/compiled/clearfloat11ps4.h",
    "d3d11/shaders/compiled/clearfloat11ps5.h",
    "d3d11/shaders/compiled/clearfloat11ps6.h",
    "d3d11/shaders/compiled/clearfloat11ps7.h",
    "d3d11/shaders/compiled/clearfloat11ps8.h",
    "d3d11/shaders/compiled/clearsint11ps1.h",
    "d3d11/shaders/compiled/clearsint11ps2.h",
    "d3d11/shaders/compiled/clearsint11ps3.h",
    "d3d11/shaders/compiled/clearsint11ps4.h",
    "d3d11/shaders/compiled/clearsint11ps5.h",
    "d3d11/shaders/compiled/clearsint11ps6.h",
    "d3d11/shaders/compiled/clearsint11ps7.h",
    "d3d11/shaders/compiled/clearsint11ps8.h",
    "d3d11/shaders/compiled/clearuint11ps1.h",
    "d3d11/shaders/compiled/clearuint11ps2.h",
    "d3d11/shaders/compiled/clearuint11ps3.h",
    "d3d11/shaders/compiled/clearuint11ps4.h",
    "d3d11/shaders/compiled/clearuint11ps5.h",
    "d3d11/shaders/compiled/clearuint11ps6.h",
    "d3d11/shaders/compiled/clearuint11ps7.h",
    "d3d11/shaders/compiled/clearuint11ps8.h",
    "d3d11/shaders/compiled/passthrough2d11vs.h",
    "d3d11/shaders/compiled/passthrough3d11gs.h",
    "d3d11/shaders/compiled/passthrough3d11vs.h",
    "d3d11/shaders/compiled/passthroughdepth2d11ps.h",
    "d3d11/shaders/compiled/passthroughrgba2dms11ps.h",
    "d3d11/shaders/compiled/resolvecolor2dps.h",
    "d3d11/shaders/compiled/resolvedepth11_ps.h",
    "d3d11/shaders/compiled/resolvedepthstencil11_ps.h",
    "d3d11/shaders/compiled/resolvedepthstencil11_vs.h",
    "d3d11/shaders/compiled/resolvestencil11_ps.h",
    "d3d11/shaders/compiled/swizzlef2darrayps.h",
    "d3d11/shaders/compiled/swizzlef2dps.h",
    "d3d11/shaders/compiled/swizzlef3dps.h",
    "d3d11/shaders/compiled/swizzlei2darrayps.h",
    "d3d11/shaders/compiled/swizzlei2dps.h",
    "d3d11/shaders/compiled/swizzlei3dps.h",
    "d3d11/shaders/compiled/swizzleui2darrayps.h",
    "d3d11/shaders/compiled/swizzleui2dps.h",
    "d3d11/shaders/compiled/swizzleui3dps.h",
    "d3d11/texture_format_table.cpp",
    "d3d11/texture_format_table.h",
    "d3d11/texture_format_table_autogen.cpp",
    "d3d11/texture_format_table_utils.h",
  ]

  if (angle_is_winuwp) {
    _d3d11_backend_sources += [
      "d3d11/winrt/CoreWindowNativeWindow.cpp",
      "d3d11/winrt/CoreWindowNativeWindow.h",
      "d3d11/winrt/InspectableNativeWindow.cpp",
      "d3d11/winrt/InspectableNativeWindow.h",
      "d3d11/winrt/NativeWindow11WinRT.cpp",
      "d3d11/winrt/NativeWindow11WinRT.h",
      "d3d11/winrt/SwapChainPanelNativeWindow.cpp",
      "d3d11/winrt/SwapChainPanelNativeWindow.h",
    ]
  } else {
    _d3d11_backend_sources += [
      "d3d11/win32/NativeWindow11Win32.cpp",
      "d3d11/win32/NativeWindow11Win32.h",
    ]
  }
  if (angle_enable_d3d11_compositor_native_window) {
    _d3d11_backend_sources += [
      "d3d11/converged/CompositorNativeWindow11.cpp",
      "d3d11/converged/CompositorNativeWindow11.h",
    ]
  }

  import("d3d11/d3d11_blit_shaders_autogen.gni")
  _d3d11_backend_sources += libangle_d3d11_blit_shaders
}

config("angle_d3d_shared_config") {
  defines = [ "ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES={ " + "\"d3dcompiler_47.dll\", \"d3dcompiler_46.dll\", \"d3dcompiler_43.dll\" }" ]
}

angle_source_set("angle_d3d_shared") {
  sources = _d3d_shared_sources
  public_deps = [
    "$angle_root:angle_d3d_format_tables",
    "$angle_root:angle_gpu_info_util",
    "$angle_root:angle_image_util",
    "$angle_root:libANGLE_headers",
  ]
  public_configs = [ ":angle_d3d_shared_config" ]
}

if (angle_enable_d3d9) {
  config("angle_d3d9_backend_config") {
    defines = [ "ANGLE_ENABLE_D3D9" ]
    ldflags = [ "/DELAYLOAD:d3d9.dll" ]
  }

  angle_source_set("angle_d3d9_backend") {
    sources = _d3d9_backend_sources
    libs = [
      "d3d9.lib",
      "delayimp.lib",
    ]
    public_deps = [ ":angle_d3d_shared" ]
    public_configs = [ ":angle_d3d9_backend_config" ]
  }
}

if (angle_enable_d3d11) {
  config("angle_d3d11_backend_config") {
    defines = [ "ANGLE_ENABLE_D3D11" ]
    if (angle_enable_d3d11_compositor_native_window) {
      defines += [ "ANGLE_ENABLE_D3D11_COMPOSITOR_NATIVE_WINDOW" ]
    }
  }

  angle_source_set("angle_d3d11_backend") {
    sources = _d3d11_backend_sources

    libs = [ "dxguid.lib" ]

    public_deps = [ ":angle_d3d_shared" ]
    public_configs = [ ":angle_d3d11_backend_config" ]
  }

  config("angle_enable_winuwp_config") {
    defines = [ "ANGLE_ENABLE_WINDOWS_UWP 1" ]
  }

  angle_source_set("angle_enable_winuwp") {
    public_configs = [ ":angle_enable_winuwp_config" ]
  }
}
