mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 14:49:42 -06:00
Move most backend functionality to VideoCommon
This commit is contained in:
@ -26,39 +26,29 @@ enum STAGING_BUFFER_TYPE
|
||||
// Descriptor set layouts
|
||||
enum DESCRIPTOR_SET_LAYOUT
|
||||
{
|
||||
DESCRIPTOR_SET_LAYOUT_SINGLE_UNIFORM_BUFFER,
|
||||
DESCRIPTOR_SET_LAYOUT_PER_STAGE_UNIFORM_BUFFERS,
|
||||
DESCRIPTOR_SET_LAYOUT_PIXEL_SHADER_SAMPLERS,
|
||||
DESCRIPTOR_SET_LAYOUT_SHADER_STORAGE_BUFFERS,
|
||||
DESCRIPTOR_SET_LAYOUT_TEXEL_BUFFERS,
|
||||
DESCRIPTOR_SET_LAYOUT_STANDARD_UNIFORM_BUFFERS,
|
||||
DESCRIPTOR_SET_LAYOUT_STANDARD_SAMPLERS,
|
||||
DESCRIPTOR_SET_LAYOUT_STANDARD_SHADER_STORAGE_BUFFERS,
|
||||
DESCRIPTOR_SET_LAYOUT_UTILITY_UNIFORM_BUFFER,
|
||||
DESCRIPTOR_SET_LAYOUT_UTILITY_SAMPLERS,
|
||||
DESCRIPTOR_SET_LAYOUT_COMPUTE,
|
||||
NUM_DESCRIPTOR_SET_LAYOUTS
|
||||
};
|
||||
|
||||
// Descriptor set bind points
|
||||
enum DESCRIPTOR_SET_BIND_POINT
|
||||
{
|
||||
DESCRIPTOR_SET_BIND_POINT_UNIFORM_BUFFERS,
|
||||
DESCRIPTOR_SET_BIND_POINT_PIXEL_SHADER_SAMPLERS,
|
||||
DESCRIPTOR_SET_BIND_POINT_STORAGE_OR_TEXEL_BUFFER,
|
||||
NUM_DESCRIPTOR_SET_BIND_POINTS
|
||||
};
|
||||
|
||||
// We use four pipeline layouts:
|
||||
// - Standard
|
||||
// - Per-stage UBO (VS/GS/PS, VS constants accessible from PS)
|
||||
// - 8 combined image samplers (accessible from PS)
|
||||
// - 1 SSBO accessible from PS if supported
|
||||
// - Push Constant
|
||||
// - Same as standard, plus 128 bytes of push constants, accessible from all stages.
|
||||
// - Texture Decoding
|
||||
// - Same as push constant, plus a single texel buffer accessible from PS.
|
||||
// - Per-stage UBO (VS/GS/PS, VS constants accessible from PS) [set=0, binding=0-2]
|
||||
// - 8 combined image samplers (accessible from PS) [set=1, binding=0-7]
|
||||
// - 1 SSBO accessible from PS if supported [set=2, binding=0]
|
||||
// - Utility
|
||||
// - 1 combined UBO, accessible from VS/GS/PS [set=0, binding=0]
|
||||
// - 8 combined image samplers (accessible from PS) [set=1, binding=0-7]
|
||||
// - 1 texel buffer (accessible from PS) [set=1, binding=8]
|
||||
// - Compute
|
||||
// - 1 uniform buffer [set=0, binding=0]
|
||||
// - 4 combined image samplers [set=0, binding=1-4]
|
||||
// - 1 texel buffer [set=0, binding=5]
|
||||
// - 1 storage image [set=0, binding=6]
|
||||
// - 128 bytes of push constants
|
||||
// - 2 combined image samplers [set=0, binding=1-2]
|
||||
// - 2 texel buffers [set=0, binding=3-4]
|
||||
// - 1 storage image [set=0, binding=5]
|
||||
//
|
||||
// All four pipeline layout share the first two descriptor sets (uniform buffers, PS samplers).
|
||||
// The third descriptor set (see bind points above) is used for storage or texel buffers.
|
||||
@ -66,8 +56,6 @@ enum DESCRIPTOR_SET_BIND_POINT
|
||||
enum PIPELINE_LAYOUT
|
||||
{
|
||||
PIPELINE_LAYOUT_STANDARD,
|
||||
PIPELINE_LAYOUT_PUSH_CONSTANT,
|
||||
PIPELINE_LAYOUT_TEXTURE_CONVERSION,
|
||||
PIPELINE_LAYOUT_UTILITY,
|
||||
PIPELINE_LAYOUT_COMPUTE,
|
||||
NUM_PIPELINE_LAYOUTS
|
||||
@ -83,53 +71,22 @@ enum UNIFORM_BUFFER_DESCRIPTOR_SET_BINDING
|
||||
};
|
||||
|
||||
// Maximum number of attributes per vertex (we don't have any more than this?)
|
||||
constexpr size_t MAX_VERTEX_ATTRIBUTES = 16;
|
||||
constexpr u32 MAX_VERTEX_ATTRIBUTES = 16;
|
||||
|
||||
// Number of pixel shader texture slots
|
||||
constexpr size_t NUM_PIXEL_SHADER_SAMPLERS = 8;
|
||||
constexpr u32 NUM_PIXEL_SHADER_SAMPLERS = 8;
|
||||
constexpr u32 NUM_COMPUTE_SHADER_SAMPLERS = 2;
|
||||
|
||||
// Total number of binding points in the pipeline layout
|
||||
constexpr size_t TOTAL_PIPELINE_BINDING_POINTS =
|
||||
NUM_UBO_DESCRIPTOR_SET_BINDINGS + NUM_PIXEL_SHADER_SAMPLERS + 1;
|
||||
|
||||
// Format of EFB textures
|
||||
constexpr VkFormat EFB_COLOR_TEXTURE_FORMAT = VK_FORMAT_R8G8B8A8_UNORM;
|
||||
constexpr VkFormat EFB_DEPTH_TEXTURE_FORMAT = VK_FORMAT_D32_SFLOAT;
|
||||
constexpr VkFormat EFB_DEPTH_AS_COLOR_TEXTURE_FORMAT = VK_FORMAT_R32_SFLOAT;
|
||||
|
||||
// Format of texturecache textures
|
||||
constexpr VkFormat TEXTURECACHE_TEXTURE_FORMAT = VK_FORMAT_R8G8B8A8_UNORM;
|
||||
// Number of texel buffer binding points.
|
||||
constexpr u32 NUM_COMPUTE_TEXEL_BUFFERS = 2;
|
||||
|
||||
// Textures that don't fit into this buffer will be uploaded with a separate buffer (see below).
|
||||
constexpr size_t INITIAL_TEXTURE_UPLOAD_BUFFER_SIZE = 16 * 1024 * 1024;
|
||||
constexpr size_t MAXIMUM_TEXTURE_UPLOAD_BUFFER_SIZE = 64 * 1024 * 1024;
|
||||
constexpr u32 TEXTURE_UPLOAD_BUFFER_SIZE = 32 * 1024 * 1024;
|
||||
|
||||
// Textures greater than 1024*1024 will be put in staging textures that are released after
|
||||
// execution instead. A 2048x2048 texture is 16MB, and we'd only fit four of these in our
|
||||
// streaming buffer and be blocking frequently. Games are unlikely to have textures this
|
||||
// large anyway, so it's only really an issue for HD texture packs, and memory is not
|
||||
// a limiting factor in these scenarios anyway.
|
||||
constexpr size_t STAGING_TEXTURE_UPLOAD_THRESHOLD = 1024 * 1024 * 8;
|
||||
|
||||
// Streaming uniform buffer size
|
||||
constexpr size_t INITIAL_UNIFORM_STREAM_BUFFER_SIZE = 16 * 1024 * 1024;
|
||||
constexpr size_t MAXIMUM_UNIFORM_STREAM_BUFFER_SIZE = 32 * 1024 * 1024;
|
||||
|
||||
// Texel buffer size for palette and texture decoding.
|
||||
constexpr size_t TEXTURE_CONVERSION_TEXEL_BUFFER_SIZE = 8 * 1024 * 1024;
|
||||
|
||||
// Push constant buffer size for utility shaders
|
||||
constexpr u32 PUSH_CONSTANT_BUFFER_SIZE = 128;
|
||||
|
||||
// Minimum number of draw calls per command buffer when attempting to preempt a readback operation.
|
||||
constexpr u32 MINIMUM_DRAW_CALLS_PER_COMMAND_BUFFER_FOR_READBACK = 10;
|
||||
|
||||
// Multisampling state info that we don't expose in VideoCommon.
|
||||
union MultisamplingState
|
||||
{
|
||||
BitField<0, 5, u32> samples; // 1-16
|
||||
BitField<5, 1, u32> per_sample_shading; // SSAA
|
||||
u32 hex;
|
||||
};
|
||||
|
||||
constexpr u32 STAGING_TEXTURE_UPLOAD_THRESHOLD = 1024 * 1024 * 4;
|
||||
} // namespace Vulkan
|
||||
|
Reference in New Issue
Block a user