mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 22:09:19 -07:00
396b7c2978
Due to the current design, any of the GL state can be mutated after calling this function, so we can't assume that the tracked state will match if we call SetPipeline() after ResetAPIState().
126 lines
3.5 KiB
C++
126 lines
3.5 KiB
C++
// Copyright 2016 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#pragma once
|
|
|
|
#include "Common/BitField.h"
|
|
|
|
#include "VideoCommon/BPMemory.h"
|
|
#include "VideoCommon/BPStructs.h"
|
|
|
|
enum class PrimitiveType : u32
|
|
{
|
|
Points,
|
|
Lines,
|
|
Triangles,
|
|
TriangleStrip,
|
|
};
|
|
|
|
union RasterizationState
|
|
{
|
|
void Generate(const BPMemory& bp, PrimitiveType primitive_type);
|
|
|
|
RasterizationState& operator=(const RasterizationState& rhs);
|
|
|
|
bool operator==(const RasterizationState& rhs) const { return hex == rhs.hex; }
|
|
bool operator!=(const RasterizationState& rhs) const { return hex != rhs.hex; }
|
|
bool operator<(const RasterizationState& rhs) const { return hex < rhs.hex; }
|
|
BitField<0, 2, GenMode::CullMode> cullmode;
|
|
BitField<3, 2, PrimitiveType> primitive;
|
|
|
|
u32 hex;
|
|
};
|
|
|
|
union DepthState
|
|
{
|
|
void Generate(const BPMemory& bp);
|
|
|
|
DepthState& operator=(const DepthState& rhs);
|
|
|
|
bool operator==(const DepthState& rhs) const { return hex == rhs.hex; }
|
|
bool operator!=(const DepthState& rhs) const { return hex != rhs.hex; }
|
|
bool operator<(const DepthState& rhs) const { return hex < rhs.hex; }
|
|
BitField<0, 1, u32> testenable;
|
|
BitField<1, 1, u32> updateenable;
|
|
BitField<2, 3, ZMode::CompareMode> func;
|
|
|
|
u32 hex;
|
|
};
|
|
|
|
union BlendingState
|
|
{
|
|
void Generate(const BPMemory& bp);
|
|
|
|
BlendingState& operator=(const BlendingState& rhs);
|
|
|
|
bool operator==(const BlendingState& rhs) const { return hex == rhs.hex; }
|
|
bool operator!=(const BlendingState& rhs) const { return hex != rhs.hex; }
|
|
bool operator<(const BlendingState& rhs) const { return hex < rhs.hex; }
|
|
BitField<0, 1, u32> blendenable;
|
|
BitField<1, 1, u32> logicopenable;
|
|
BitField<2, 1, u32> dstalpha;
|
|
BitField<3, 1, u32> colorupdate;
|
|
BitField<4, 1, u32> alphaupdate;
|
|
BitField<5, 1, u32> subtract;
|
|
BitField<6, 1, u32> subtractAlpha;
|
|
BitField<7, 1, u32> usedualsrc;
|
|
BitField<8, 3, BlendMode::BlendFactor> dstfactor;
|
|
BitField<11, 3, BlendMode::BlendFactor> srcfactor;
|
|
BitField<14, 3, BlendMode::BlendFactor> dstfactoralpha;
|
|
BitField<17, 3, BlendMode::BlendFactor> srcfactoralpha;
|
|
BitField<20, 4, BlendMode::LogicOp> logicmode;
|
|
|
|
u32 hex;
|
|
};
|
|
|
|
union SamplerState
|
|
{
|
|
using StorageType = u64;
|
|
|
|
enum class Filter : StorageType
|
|
{
|
|
Point,
|
|
Linear
|
|
};
|
|
|
|
enum class AddressMode : StorageType
|
|
{
|
|
Clamp,
|
|
Repeat,
|
|
MirroredRepeat
|
|
};
|
|
|
|
void Generate(const BPMemory& bp, u32 index);
|
|
|
|
SamplerState& operator=(const SamplerState& rhs);
|
|
|
|
bool operator==(const SamplerState& rhs) const { return hex == rhs.hex; }
|
|
bool operator!=(const SamplerState& rhs) const { return hex != rhs.hex; }
|
|
bool operator<(const SamplerState& rhs) const { return hex < rhs.hex; }
|
|
BitField<0, 1, Filter> min_filter;
|
|
BitField<1, 1, Filter> mag_filter;
|
|
BitField<2, 1, Filter> mipmap_filter;
|
|
BitField<3, 2, AddressMode> wrap_u;
|
|
BitField<5, 2, AddressMode> wrap_v;
|
|
BitField<7, 16, s64> lod_bias; // multiplied by 256
|
|
BitField<23, 8, u64> min_lod; // multiplied by 16
|
|
BitField<31, 8, u64> max_lod; // multiplied by 16
|
|
BitField<39, 1, u64> anisotropic_filtering;
|
|
|
|
StorageType hex;
|
|
};
|
|
|
|
namespace RenderState
|
|
{
|
|
RasterizationState GetInvalidRasterizationState();
|
|
RasterizationState GetNoCullRasterizationState();
|
|
DepthState GetInvalidDepthState();
|
|
DepthState GetNoDepthTestingDepthStencilState();
|
|
BlendingState GetInvalidBlendingState();
|
|
BlendingState GetNoBlendingBlendState();
|
|
SamplerState GetInvalidSamplerState();
|
|
SamplerState GetPointSamplerState();
|
|
SamplerState GetLinearSamplerState();
|
|
}
|