2015-05-23 22:55:12 -06:00
|
|
|
// Copyright 2014 Dolphin Emulator Project
|
2015-05-17 17:08:10 -06:00
|
|
|
// Licensed under GPLv2+
|
2014-12-03 14:17:56 -07:00
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <d3d11.h>
|
|
|
|
#include <map>
|
|
|
|
|
|
|
|
#include "VideoCommon/GeometryShaderGen.h"
|
|
|
|
|
|
|
|
namespace DX11
|
|
|
|
{
|
|
|
|
class GeometryShaderCache
|
|
|
|
{
|
|
|
|
public:
|
2016-06-24 02:43:46 -06:00
|
|
|
static void Init();
|
2017-06-24 03:29:03 -06:00
|
|
|
static void Reload();
|
2016-06-24 02:43:46 -06:00
|
|
|
static void Clear();
|
|
|
|
static void Shutdown();
|
2017-04-30 02:07:57 -06:00
|
|
|
static bool SetShader(PrimitiveType primitive_type);
|
2017-07-19 23:25:31 -06:00
|
|
|
static bool CompileShader(const GeometryShaderUid& uid);
|
|
|
|
static bool InsertByteCode(const GeometryShaderUid& uid, const u8* bytecode, size_t len);
|
|
|
|
static void PrecompileShaders();
|
2014-12-03 14:17:56 -07:00
|
|
|
|
2017-02-15 21:37:04 -07:00
|
|
|
static ID3D11GeometryShader* GetClearGeometryShader();
|
|
|
|
static ID3D11GeometryShader* GetCopyGeometryShader();
|
2014-11-22 18:13:25 -07:00
|
|
|
|
2016-06-24 02:43:46 -06:00
|
|
|
static ID3D11Buffer*& GetConstantBuffer();
|
2014-12-03 14:17:56 -07:00
|
|
|
|
|
|
|
private:
|
2016-06-24 02:43:46 -06:00
|
|
|
struct GSCacheEntry
|
|
|
|
{
|
|
|
|
ID3D11GeometryShader* shader;
|
2014-12-03 14:17:56 -07:00
|
|
|
|
2016-06-24 02:43:46 -06:00
|
|
|
GSCacheEntry() : shader(nullptr) {}
|
|
|
|
void Destroy() { SAFE_RELEASE(shader); }
|
|
|
|
};
|
2014-12-03 14:17:56 -07:00
|
|
|
|
2016-06-24 02:43:46 -06:00
|
|
|
typedef std::map<GeometryShaderUid, GSCacheEntry> GSCache;
|
2014-12-03 14:17:56 -07:00
|
|
|
|
2017-06-24 03:29:03 -06:00
|
|
|
static void LoadShaderCache();
|
|
|
|
|
2016-06-24 02:43:46 -06:00
|
|
|
static GSCache GeometryShaders;
|
|
|
|
static const GSCacheEntry* last_entry;
|
|
|
|
static GeometryShaderUid last_uid;
|
|
|
|
static const GSCacheEntry pass_entry;
|
2014-12-03 14:17:56 -07:00
|
|
|
};
|
|
|
|
|
2014-12-12 09:25:16 -07:00
|
|
|
} // namespace DX11
|