DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (6663d3dc883b)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef mozilla_gfx_layers_mlgpu_MLGDeviceTypes_h
#define mozilla_gfx_layers_mlgpu_MLGDeviceTypes_h

#include "mozilla/TypedEnumBits.h"
#include "mozilla/gfx/Types.h"

namespace mozilla {
namespace layers {

enum class MLGUsage {
  // GPU read-only, CPU write once on creation and read/write never.
  Immutable,

  // GPU read-only, CPU write-only. Must be mapped with WRITE_DISCARD.
  Dynamic,

  // GPU read/write-only, no CPU access.
  Default,

  // GPU->CPU transfer, and read from the CPU.
  Staging
};

enum class MLGDepthTestMode {
  Disabled,
  Write,
  ReadOnly,
  AlwaysWrite,
  MaxModes
};

enum class MLGBufferType : uint32_t { Vertex, Constant };

enum class SamplerMode {
  // Linear filter, clamped to border.
  LinearClamp = 0,
  // Linear filter, clamped to transparent pixels.
  LinearClampToZero,
  // Linear filter, wrap edges.
  LinearRepeat,
  // Point filter, clamped to border.
  Point,
  MaxModes
};

enum class MLGBlendState {
  Copy = 0,
  Over,
  OverAndPremultiply,
  Min,
  ComponentAlpha,
  MaxStates
};

enum class MLGPrimitiveTopology {
  Unknown = 0,
  TriangleStrip = 1,
  TriangleList = 2,
  UnitQuad = 3,
  UnitTriangle = 4
};

struct MLGMappedResource {
  uint8_t* mData;
  uint32_t mStride;
};

enum class MLGMapType { READ = 0, WRITE, READ_WRITE, WRITE_DISCARD };

enum class MLGTextureFlags { None, ShaderResource, RenderTarget };
MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(MLGTextureFlags);

enum class MLGRenderTargetFlags : uint32_t { Default = 0, ZBuffer = (1 << 0) };
MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(MLGRenderTargetFlags);

// NVIDIA drivers crash when we supply too many rects to ClearView - it
// seems to cause a stack overflow >= 20 rects. We cap to 12 for now.
static const size_t kMaxClearViewRects = 12;

static inline SamplerMode FilterToSamplerMode(gfx::SamplingFilter aFilter) {
  switch (aFilter) {
    case gfx::SamplingFilter::POINT:
      return SamplerMode::Point;
    case gfx::SamplingFilter::LINEAR:
    case gfx::SamplingFilter::GOOD:
      return SamplerMode::LinearClamp;
    default:
      MOZ_ASSERT_UNREACHABLE("Unknown sampler mode");
      return SamplerMode::LinearClamp;
  }
}

}  // namespace layers
}  // namespace mozilla

#endif  // mozilla_gfx_layers_mlgpu_MLGDeviceTypes_h