3#if defined(ENABLE_DX11) || defined(ENABLE_DX12)
7#include "../interpreter.h"
12#include "d3dcompiler.h"
60 Microsoft::WRL::ComPtr<ID3D11Texture2D>
texture;
115 std::shared_ptr<Ship::ResourceManager> resourceManager =
nullptr);
130 void UploadTexture(
const uint8_t* rgba32Buf, uint32_t width, uint32_t height)
override;
136 void SetScissor(
int x,
int y,
int width,
int height)
override;
138 void DrawTriangles(
float buf_vbo[],
size_t buf_vbo_len,
size_t buf_vbo_num_tris)
override;
146 bool opengl_invertY,
bool render_target,
bool has_depth_buffer,
147 bool can_extract_depth)
override;
149 void CopyFramebuffer(
int fbDstId,
int fbSrcId,
int srcX0,
int srcY0,
int srcX1,
int srcY1,
int dstX0,
int dstY0,
150 int dstX1,
int dstY1)
override;
154 std::unordered_map<std::pair<float, float>, uint16_t,
hash_pair_ff>
155 GetPixelDepth(
int fb_id,
const std::set<std::pair<float, float>>& coordinates)
override;
166 Microsoft::WRL::ComPtr<ID3D11DeviceContext>
mContext;
175 void CreateDepthStencilObjects(uint32_t width, uint32_t height, uint32_t msaa_count, ID3D11DepthStencilView** view,
176 ID3D11ShaderResourceView** srv);
180 HMODULE mCompilerModule;
181 pD3DCompile mD3dCompile;
183 uint32_t mMsaaNumQualityLevels[D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT];
185 Microsoft::WRL::ComPtr<ID3D11RasterizerState> mRasterizerState;
186 Microsoft::WRL::ComPtr<ID3D11DepthStencilState> mDepthStencilState;
187 Microsoft::WRL::ComPtr<ID3D11Buffer> mVertexBuffer;
188 Microsoft::WRL::ComPtr<ID3D11Buffer> mPerFrameCb;
189 Microsoft::WRL::ComPtr<ID3D11Buffer> mPerDrawCb;
190 Microsoft::WRL::ComPtr<ID3D11Buffer> mPerPrimDepthCb;
191 Microsoft::WRL::ComPtr<ID3D11Buffer> mCoordBuffer;
192 Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> mCoordBufferSrv;
193 Microsoft::WRL::ComPtr<ID3D11Buffer> mDepthValueOutputBuffer;
194 Microsoft::WRL::ComPtr<ID3D11Buffer> mDepthValueOutputBufferCopy;
195 Microsoft::WRL::ComPtr<ID3D11UnorderedAccessView> mDepthValueOutputUav;
196 Microsoft::WRL::ComPtr<ID3D11ComputeShader> mComputeShader;
197 Microsoft::WRL::ComPtr<ID3D11ComputeShader> mComputeShaderMsaa;
198 Microsoft::WRL::ComPtr<ID3DBlob> mComputeShaderMsaaBlob;
199 size_t mCoordBufferSize;
202 Microsoft::WRL::ComPtr<ID3D11Debug> debug;
209 std::map<std::pair<uint64_t, uint32_t>,
struct ShaderProgramD3D11> mShaderProgramPool;
211 std::vector<struct TextureData> mTextures;
215 std::vector<FramebufferDX11> mFrameBuffers;
221 int32_t mRenderTargetHeight;
222 int mCurrentFramebuffer;
228 uint32_t mLastVertexBufferStride = 0;
229 Microsoft::WRL::ComPtr<ID3D11BlendState> mLastBlendState =
nullptr;
230 Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> mLastResourceViews[
SHADER_MAX_TEXTURES] = {
nullptr,
nullptr };
231 Microsoft::WRL::ComPtr<ID3D11SamplerState> mLastSamplerStates[
SHADER_MAX_TEXTURES] = {
nullptr,
nullptr };
233 D3D_PRIMITIVE_TOPOLOGY mLastPrimitaveTopology = D3D_PRIMITIVE_TOPOLOGY_UNDEFINED;
236 Microsoft::WRL::ComPtr<ID3D11Texture2D> mReadbackStaging;
237 uint32_t mReadbackStagingW = 0;
238 uint32_t mReadbackStagingH = 0;
245 bool include_root_signature,
bool three_point_filtering,
bool use_srgb);
Direct3D 11 implementation of the Fast3D rendering backend.
Definition gfx_direct3d_common.h:105
void CopyFramebuffer(int fbDstId, int fbSrcId, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1) override
void SetTextureFilter(FilteringMode mode) override
void SetCurrentPrimDepth(float depth) override
void ShaderGetInfo(struct ShaderProgram *prg, uint8_t *numInputs, bool usedTextures[2]) override
uint32_t NewTexture() override
void SetSamplerParameters(int sampler, bool linear_filter, uint32_t cms, uint32_t cmt) override
void FinishRender() override
int CreateFramebuffer() override
void * GetFramebufferTextureId(int fbId) override
Microsoft::WRL::ComPtr< ID3D11Device > mDevice
Definition gfx_direct3d_common.h:167
int GetMaxTextureSize() override
D3D_FEATURE_LEVEL mFeatureLevel
Definition gfx_direct3d_common.h:169
void StartFrame() override
void UnloadShader(struct ShaderProgram *oldPrg) override
PFN_D3D11_CREATE_DEVICE mDX11CreateDevice
Definition gfx_direct3d_common.h:165
~GfxRenderingAPIDX11() override
GfxWindowBackendDXGI * mWindowBackend
Definition gfx_direct3d_common.h:168
void DeleteTexture(uint32_t texId) override
FilteringMode GetTextureFilter() override
void ResolveMSAAColorBuffer(int fbIdTarger, int fbIdSrc) override
void StartDrawToFramebuffer(int fbId, float noiseScale) override
void SelectTextureFb(int fbId) override
struct ShaderProgram * LookupShader(uint64_t shaderId0, uint64_t shaderId1) override
void ClearFramebuffer(bool color, bool depth) override
struct ShaderProgram * CreateAndLoadNewShader(uint64_t shaderId0, uint64_t shaderId1) override
Microsoft::WRL::ComPtr< ID3D11DeviceContext > mContext
Definition gfx_direct3d_common.h:166
void SetScissor(int x, int y, int width, int height) override
void SetDepthTestAndMask(bool depth_test, bool z_upd) override
void SetSrgbMode() override
void SelectTexture(int tile, uint32_t textureId) override
GfxRenderingAPIDX11()=default
Constructs an uninitialized D3D11 renderer instance.
GfxClipParameters GetClipParameters() override
void SetUseAlpha(bool useAlpha) override
void LoadShader(struct ShaderProgram *newPrg) override
ImTextureID GetTextureById(int id) override
GfxRenderingAPIDX11(GfxWindowBackendDXGI *backend, std::shared_ptr< Ship::ConsoleVariable > consoleVariable=nullptr, std::shared_ptr< Ship::ResourceManager > resourceManager=nullptr)
Constructs a D3D11 renderer bound to an existing DXGI window backend.
std::shared_ptr< Ship::ResourceManager > mResourceManager
Definition gfx_direct3d_common.h:172
std::shared_ptr< Ship::ConsoleVariable > mConsoleVariable
Definition gfx_direct3d_common.h:171
void ClearShaderCache() override
void UploadTexture(const uint8_t *rgba32Buf, uint32_t width, uint32_t height) override
void SetZmodeDecal(bool decal) override
void UpdateFramebufferParameters(int fb_id, uint32_t width, uint32_t height, uint32_t msaa_level, bool opengl_invertY, bool render_target, bool has_depth_buffer, bool can_extract_depth) override
const char * GetName() override
void DrawTriangles(float buf_vbo[], size_t buf_vbo_len, size_t buf_vbo_num_tris) override
void SetViewport(int x, int y, int width, int height) override
void ReadFramebufferToCPU(int fbId, uint32_t width, uint32_t height, uint16_t *rgba16Buf) override
std::unordered_map< std::pair< float, float >, uint16_t, hash_pair_ff > GetPixelDepth(int fb_id, const std::set< std::pair< float, float > > &coordinates) override
Definition gfx_rendering_api.h:30
DXGI/Win32 window backend used by the Fast3D renderer on Windows.
Definition gfx_dxgi.h:27
Manages a named collection of console variables (CVars).
Definition ConsoleVariable.h:58
Central manager for loading, caching, and unloading game resources.
Definition ResourceManager.h:61
#define SHADER_MAX_TEXTURES
Definition interpreter.h:105
Definition gfx_direct3d_common.h:19
FilteringMode
Definition gfx_rendering_api.h:17
@ FILTER_NONE
Definition gfx_rendering_api.h:17
std::string gfx_direct3d_common_build_shader(size_t &numFloats, const CCFeatures &cc_features, bool include_root_signature, bool three_point_filtering, bool use_srgb)
Builds the HLSL shader source for the requested combiner features.
Core namespace for the libultraship engine framework.
Definition gfx_direct3d_common.h:14
Integer 2D coordinate used for depth sampling requests.
Definition gfx_direct3d_common.h:52
int x
Definition gfx_direct3d_common.h:53
int y
Definition gfx_direct3d_common.h:53
Direct3D 11 framebuffer attachments and metadata.
Definition gfx_direct3d_common.h:71
bool has_depth_buffer
Definition gfx_direct3d_common.h:76
uint32_t texture_id
Definition gfx_direct3d_common.h:75
Microsoft::WRL::ComPtr< ID3D11DepthStencilView > depth_stencil_view
Definition gfx_direct3d_common.h:73
uint32_t msaa_level
Definition gfx_direct3d_common.h:77
Microsoft::WRL::ComPtr< ID3D11ShaderResourceView > depth_stencil_srv
Definition gfx_direct3d_common.h:74
Microsoft::WRL::ComPtr< ID3D11RenderTargetView > render_target_view
Definition gfx_direct3d_common.h:72
Definition gfx_rendering_api.h:12
Definition gfx_direct3d_common.h:33
uint32_t width
Definition gfx_direct3d_common.h:34
uint32_t padding
Definition gfx_direct3d_common.h:37
uint32_t height
Definition gfx_direct3d_common.h:35
uint32_t linear_filtering
Definition gfx_direct3d_common.h:36
Per-draw shader constants describing bound texture metadata.
Definition gfx_direct3d_common.h:32
struct Fast::PerDrawCB::Texture mTextures[SHADER_MAX_TEXTURES]
Per-frame shader constants shared across draw calls.
Definition gfx_direct3d_common.h:23
uint32_t noise_frame
Definition gfx_direct3d_common.h:24
float noise_scale
Definition gfx_direct3d_common.h:25
uint32_t padding[2]
Definition gfx_direct3d_common.h:26
Per-draw depth constants used by primitive-depth rendering paths.
Definition gfx_direct3d_common.h:44
float prim_depth
Definition gfx_direct3d_common.h:45
float _pad[3]
Definition gfx_direct3d_common.h:46
Compiled D3D11 shader program and pipeline-state cache entry.
Definition gfx_direct3d_common.h:83
uint64_t shader_id0
Definition gfx_direct3d_common.h:89
Microsoft::WRL::ComPtr< ID3D11BlendState > blend_state
Definition gfx_direct3d_common.h:87
uint64_t shader_id1
Definition gfx_direct3d_common.h:90
Microsoft::WRL::ComPtr< ID3D11PixelShader > pixel_shader
Definition gfx_direct3d_common.h:85
uint8_t numFloats
Definition gfx_direct3d_common.h:92
uint8_t numInputs
Definition gfx_direct3d_common.h:91
Microsoft::WRL::ComPtr< ID3D11VertexShader > vertex_shader
Definition gfx_direct3d_common.h:84
Microsoft::WRL::ComPtr< ID3D11InputLayout > input_layout
Definition gfx_direct3d_common.h:86
bool usedTextures[SHADER_MAX_TEXTURES]
Definition gfx_direct3d_common.h:93
OpenGL shader program metadata cached by the Fast3D renderer.
Definition gfx_opengl.h:37
Runtime Direct3D 11 texture state tracked by the renderer.
Definition gfx_direct3d_common.h:59
Microsoft::WRL::ComPtr< ID3D11ShaderResourceView > resource_view
Definition gfx_direct3d_common.h:61
uint32_t height
Definition gfx_direct3d_common.h:64
Microsoft::WRL::ComPtr< ID3D11SamplerState > sampler_state
Definition gfx_direct3d_common.h:62
bool linear_filtering
Definition gfx_direct3d_common.h:65
uint32_t width
Definition gfx_direct3d_common.h:63
Microsoft::WRL::ComPtr< ID3D11Texture2D > texture
Definition gfx_direct3d_common.h:60
Definition gfx_rendering_api.h:20