mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 14:49:42 -06:00
D3D12: Initial commit for D3D12 backend implementation.
This commit is contained in:
70
Source/Core/VideoBackends/D3D12/D3DStreamBuffer.h
Normal file
70
Source/Core/VideoBackends/D3D12/D3DStreamBuffer.h
Normal file
@ -0,0 +1,70 @@
|
||||
// Copyright 2016 Dolphin Emulator Project
|
||||
// Licensed under GPLv2+
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <queue>
|
||||
|
||||
struct ID3D12Resource;
|
||||
|
||||
namespace DX12
|
||||
{
|
||||
|
||||
class D3DStreamBuffer
|
||||
{
|
||||
public:
|
||||
D3DStreamBuffer(unsigned int initial_size, unsigned int max_size, bool* buffer_reallocation_notification);
|
||||
~D3DStreamBuffer();
|
||||
|
||||
bool AllocateSpaceInBuffer(unsigned int allocation_size, unsigned int alignment);
|
||||
void OverrideSizeOfPreviousAllocation(unsigned int override_allocation_size);
|
||||
|
||||
void* GetBaseCPUAddress() const;
|
||||
D3D12_GPU_VIRTUAL_ADDRESS GetBaseGPUAddress() const;
|
||||
ID3D12Resource* GetBuffer() const;
|
||||
void* GetCPUAddressOfCurrentAllocation() const;
|
||||
D3D12_GPU_VIRTUAL_ADDRESS GetGPUAddressOfCurrentAllocation() const;
|
||||
unsigned int GetOffsetOfCurrentAllocation() const;
|
||||
unsigned int GetSize() const;
|
||||
|
||||
static void QueueFenceCallback(void* owning_object, UINT64 fence_value);
|
||||
|
||||
private:
|
||||
void AllocateBuffer(unsigned int size);
|
||||
bool AttemptBufferResizeOrElseStall(unsigned int new_size);
|
||||
|
||||
bool AttemptToAllocateOutOfExistingUnusedSpaceInBuffer(unsigned int allocation_size);
|
||||
|
||||
bool AttemptToFindExistingFenceToStallOn(unsigned int allocation_size);
|
||||
|
||||
void UpdateGPUProgress();
|
||||
void QueueFence(UINT64 fence_value);
|
||||
|
||||
struct FenceTrackingInformation
|
||||
{
|
||||
UINT64 fence_value;
|
||||
unsigned int buffer_offset;
|
||||
};
|
||||
|
||||
std::queue<FenceTrackingInformation> m_queued_fences;
|
||||
|
||||
ID3D12Fence* m_buffer_tracking_fence = nullptr;
|
||||
|
||||
ID3D12Resource* m_buffer = nullptr;
|
||||
|
||||
void* m_buffer_cpu_address = nullptr;
|
||||
D3D12_GPU_VIRTUAL_ADDRESS m_buffer_gpu_address = {};
|
||||
|
||||
unsigned int m_buffer_current_allocation_offset = 0;
|
||||
unsigned int m_buffer_offset = 0;
|
||||
unsigned int m_buffer_size = 0;
|
||||
|
||||
const unsigned int m_buffer_max_size = 0;
|
||||
|
||||
unsigned int m_buffer_gpu_completion_offset = 0;
|
||||
|
||||
bool* m_buffer_reallocation_notification = nullptr;
|
||||
};
|
||||
|
||||
}
|
Reference in New Issue
Block a user