Merge pull request #5286 from ReinUsesLisp/rename-vk-device
renderer_vulkan: Rename VKDevice to Device
This commit is contained in:
commit
4801f4250d
52 changed files with 166 additions and 169 deletions
|
@ -225,7 +225,7 @@ constexpr std::array<VkPipelineShaderStageCreateInfo, 2> MakeStages(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateOneTextureDescriptorSet(const VKDevice& device, VkDescriptorSet descriptor_set,
|
void UpdateOneTextureDescriptorSet(const Device& device, VkDescriptorSet descriptor_set,
|
||||||
VkSampler sampler, VkImageView image_view) {
|
VkSampler sampler, VkImageView image_view) {
|
||||||
const VkDescriptorImageInfo image_info{
|
const VkDescriptorImageInfo image_info{
|
||||||
.sampler = sampler,
|
.sampler = sampler,
|
||||||
|
@ -247,7 +247,7 @@ void UpdateOneTextureDescriptorSet(const VKDevice& device, VkDescriptorSet descr
|
||||||
device.GetLogical().UpdateDescriptorSets(write_descriptor_set, nullptr);
|
device.GetLogical().UpdateDescriptorSets(write_descriptor_set, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateTwoTexturesDescriptorSet(const VKDevice& device, VkDescriptorSet descriptor_set,
|
void UpdateTwoTexturesDescriptorSet(const Device& device, VkDescriptorSet descriptor_set,
|
||||||
VkSampler sampler, VkImageView image_view_0,
|
VkSampler sampler, VkImageView image_view_0,
|
||||||
VkImageView image_view_1) {
|
VkImageView image_view_1) {
|
||||||
const VkDescriptorImageInfo image_info_0{
|
const VkDescriptorImageInfo image_info_0{
|
||||||
|
@ -326,7 +326,7 @@ void BindBlitState(vk::CommandBuffer cmdbuf, VkPipelineLayout layout,
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
BlitImageHelper::BlitImageHelper(const VKDevice& device_, VKScheduler& scheduler_,
|
BlitImageHelper::BlitImageHelper(const Device& device_, VKScheduler& scheduler_,
|
||||||
StateTracker& state_tracker_, VKDescriptorPool& descriptor_pool)
|
StateTracker& state_tracker_, VKDescriptorPool& descriptor_pool)
|
||||||
: device{device_}, scheduler{scheduler_}, state_tracker{state_tracker_},
|
: device{device_}, scheduler{scheduler_}, state_tracker{state_tracker_},
|
||||||
one_texture_set_layout(device.GetLogical().CreateDescriptorSetLayout(
|
one_texture_set_layout(device.GetLogical().CreateDescriptorSetLayout(
|
||||||
|
|
|
@ -15,12 +15,11 @@ namespace Vulkan {
|
||||||
|
|
||||||
using VideoCommon::Offset2D;
|
using VideoCommon::Offset2D;
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
class VKScheduler;
|
|
||||||
class StateTracker;
|
|
||||||
|
|
||||||
class Framebuffer;
|
class Framebuffer;
|
||||||
class ImageView;
|
class ImageView;
|
||||||
|
class StateTracker;
|
||||||
|
class VKScheduler;
|
||||||
|
|
||||||
struct BlitImagePipelineKey {
|
struct BlitImagePipelineKey {
|
||||||
constexpr auto operator<=>(const BlitImagePipelineKey&) const noexcept = default;
|
constexpr auto operator<=>(const BlitImagePipelineKey&) const noexcept = default;
|
||||||
|
@ -31,7 +30,7 @@ struct BlitImagePipelineKey {
|
||||||
|
|
||||||
class BlitImageHelper {
|
class BlitImageHelper {
|
||||||
public:
|
public:
|
||||||
explicit BlitImageHelper(const VKDevice& device, VKScheduler& scheduler,
|
explicit BlitImageHelper(const Device& device, VKScheduler& scheduler,
|
||||||
StateTracker& state_tracker, VKDescriptorPool& descriptor_pool);
|
StateTracker& state_tracker, VKDescriptorPool& descriptor_pool);
|
||||||
~BlitImageHelper();
|
~BlitImageHelper();
|
||||||
|
|
||||||
|
@ -67,7 +66,7 @@ private:
|
||||||
|
|
||||||
void ConvertColorToDepthPipeline(vk::Pipeline& pipeline, VkRenderPass renderpass);
|
void ConvertColorToDepthPipeline(vk::Pipeline& pipeline, VkRenderPass renderpass);
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
StateTracker& state_tracker;
|
StateTracker& state_tracker;
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ VkSamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filter
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
VkSamplerAddressMode WrapMode(const VKDevice& device, Tegra::Texture::WrapMode wrap_mode,
|
VkSamplerAddressMode WrapMode(const Device& device, Tegra::Texture::WrapMode wrap_mode,
|
||||||
Tegra::Texture::TextureFilter filter) {
|
Tegra::Texture::TextureFilter filter) {
|
||||||
switch (wrap_mode) {
|
switch (wrap_mode) {
|
||||||
case Tegra::Texture::WrapMode::Wrap:
|
case Tegra::Texture::WrapMode::Wrap:
|
||||||
|
@ -222,7 +222,7 @@ constexpr bool IsZetaFormat(PixelFormat pixel_format) {
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
FormatInfo SurfaceFormat(const VKDevice& device, FormatType format_type, PixelFormat pixel_format) {
|
FormatInfo SurfaceFormat(const Device& device, FormatType format_type, PixelFormat pixel_format) {
|
||||||
ASSERT(static_cast<std::size_t>(pixel_format) < std::size(tex_format_tuples));
|
ASSERT(static_cast<std::size_t>(pixel_format) < std::size(tex_format_tuples));
|
||||||
|
|
||||||
auto tuple = tex_format_tuples[static_cast<std::size_t>(pixel_format)];
|
auto tuple = tex_format_tuples[static_cast<std::size_t>(pixel_format)];
|
||||||
|
@ -280,7 +280,7 @@ VkShaderStageFlagBits ShaderStage(Tegra::Engines::ShaderType stage) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
VkPrimitiveTopology PrimitiveTopology([[maybe_unused]] const VKDevice& device,
|
VkPrimitiveTopology PrimitiveTopology([[maybe_unused]] const Device& device,
|
||||||
Maxwell::PrimitiveTopology topology) {
|
Maxwell::PrimitiveTopology topology) {
|
||||||
switch (topology) {
|
switch (topology) {
|
||||||
case Maxwell::PrimitiveTopology::Points:
|
case Maxwell::PrimitiveTopology::Points:
|
||||||
|
@ -526,7 +526,7 @@ VkCompareOp ComparisonOp(Maxwell::ComparisonOp comparison) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
VkIndexType IndexFormat(const VKDevice& device, Maxwell::IndexFormat index_format) {
|
VkIndexType IndexFormat(const Device& device, Maxwell::IndexFormat index_format) {
|
||||||
switch (index_format) {
|
switch (index_format) {
|
||||||
case Maxwell::IndexFormat::UnsignedByte:
|
case Maxwell::IndexFormat::UnsignedByte:
|
||||||
if (!device.IsExtIndexTypeUint8Supported()) {
|
if (!device.IsExtIndexTypeUint8Supported()) {
|
||||||
|
|
|
@ -22,7 +22,7 @@ VkFilter Filter(Tegra::Texture::TextureFilter filter);
|
||||||
|
|
||||||
VkSamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filter);
|
VkSamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filter);
|
||||||
|
|
||||||
VkSamplerAddressMode WrapMode(const VKDevice& device, Tegra::Texture::WrapMode wrap_mode,
|
VkSamplerAddressMode WrapMode(const Device& device, Tegra::Texture::WrapMode wrap_mode,
|
||||||
Tegra::Texture::TextureFilter filter);
|
Tegra::Texture::TextureFilter filter);
|
||||||
|
|
||||||
VkCompareOp DepthCompareFunction(Tegra::Texture::DepthCompareFunc depth_compare_func);
|
VkCompareOp DepthCompareFunction(Tegra::Texture::DepthCompareFunc depth_compare_func);
|
||||||
|
@ -35,17 +35,17 @@ struct FormatInfo {
|
||||||
bool storage;
|
bool storage;
|
||||||
};
|
};
|
||||||
|
|
||||||
FormatInfo SurfaceFormat(const VKDevice& device, FormatType format_type, PixelFormat pixel_format);
|
FormatInfo SurfaceFormat(const Device& device, FormatType format_type, PixelFormat pixel_format);
|
||||||
|
|
||||||
VkShaderStageFlagBits ShaderStage(Tegra::Engines::ShaderType stage);
|
VkShaderStageFlagBits ShaderStage(Tegra::Engines::ShaderType stage);
|
||||||
|
|
||||||
VkPrimitiveTopology PrimitiveTopology(const VKDevice& device, Maxwell::PrimitiveTopology topology);
|
VkPrimitiveTopology PrimitiveTopology(const Device& device, Maxwell::PrimitiveTopology topology);
|
||||||
|
|
||||||
VkFormat VertexFormat(Maxwell::VertexAttribute::Type type, Maxwell::VertexAttribute::Size size);
|
VkFormat VertexFormat(Maxwell::VertexAttribute::Type type, Maxwell::VertexAttribute::Size size);
|
||||||
|
|
||||||
VkCompareOp ComparisonOp(Maxwell::ComparisonOp comparison);
|
VkCompareOp ComparisonOp(Maxwell::ComparisonOp comparison);
|
||||||
|
|
||||||
VkIndexType IndexFormat(const VKDevice& device, Maxwell::IndexFormat index_format);
|
VkIndexType IndexFormat(const Device& device, Maxwell::IndexFormat index_format);
|
||||||
|
|
||||||
VkStencilOp StencilOp(Maxwell::StencilOp stencil_op);
|
VkStencilOp StencilOp(Maxwell::StencilOp stencil_op);
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ std::string GetReadableVersion(u32 version) {
|
||||||
VK_VERSION_PATCH(version));
|
VK_VERSION_PATCH(version));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GetDriverVersion(const VKDevice& device) {
|
std::string GetDriverVersion(const Device& device) {
|
||||||
// Extracted from
|
// Extracted from
|
||||||
// https://github.com/SaschaWillems/vulkan.gpuinfo.org/blob/5dddea46ea1120b0df14eef8f15ff8e318e35462/functions.php#L308-L314
|
// https://github.com/SaschaWillems/vulkan.gpuinfo.org/blob/5dddea46ea1120b0df14eef8f15ff8e318e35462/functions.php#L308-L314
|
||||||
const u32 version = device.GetDriverVersion();
|
const u32 version = device.GetDriverVersion();
|
||||||
|
@ -184,7 +184,7 @@ void RendererVulkan::InitializeDevice() {
|
||||||
throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED);
|
throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED);
|
||||||
}
|
}
|
||||||
const vk::PhysicalDevice physical_device(devices[static_cast<size_t>(device_index)], dld);
|
const vk::PhysicalDevice physical_device(devices[static_cast<size_t>(device_index)], dld);
|
||||||
device = std::make_unique<VKDevice>(*instance, physical_device, *surface, dld);
|
device = std::make_unique<Device>(*instance, physical_device, *surface, dld);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RendererVulkan::Report() const {
|
void RendererVulkan::Report() const {
|
||||||
|
|
|
@ -27,9 +27,9 @@ class GPU;
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
|
class Device;
|
||||||
class StateTracker;
|
class StateTracker;
|
||||||
class VKBlitScreen;
|
class VKBlitScreen;
|
||||||
class VKDevice;
|
|
||||||
class VKMemoryManager;
|
class VKMemoryManager;
|
||||||
class VKSwapchain;
|
class VKSwapchain;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
|
@ -74,7 +74,7 @@ private:
|
||||||
VKScreenInfo screen_info;
|
VKScreenInfo screen_info;
|
||||||
|
|
||||||
vk::DebugUtilsMessenger debug_callback;
|
vk::DebugUtilsMessenger debug_callback;
|
||||||
std::unique_ptr<VKDevice> device;
|
std::unique_ptr<Device> device;
|
||||||
std::unique_ptr<VKMemoryManager> memory_manager;
|
std::unique_ptr<VKMemoryManager> memory_manager;
|
||||||
std::unique_ptr<StateTracker> state_tracker;
|
std::unique_ptr<StateTracker> state_tracker;
|
||||||
std::unique_ptr<VKScheduler> scheduler;
|
std::unique_ptr<VKScheduler> scheduler;
|
||||||
|
|
|
@ -114,7 +114,7 @@ struct VKBlitScreen::BufferData {
|
||||||
|
|
||||||
VKBlitScreen::VKBlitScreen(Core::Memory::Memory& cpu_memory_,
|
VKBlitScreen::VKBlitScreen(Core::Memory::Memory& cpu_memory_,
|
||||||
Core::Frontend::EmuWindow& render_window_,
|
Core::Frontend::EmuWindow& render_window_,
|
||||||
VideoCore::RasterizerInterface& rasterizer_, const VKDevice& device_,
|
VideoCore::RasterizerInterface& rasterizer_, const Device& device_,
|
||||||
VKMemoryManager& memory_manager_, VKSwapchain& swapchain_,
|
VKMemoryManager& memory_manager_, VKSwapchain& swapchain_,
|
||||||
VKScheduler& scheduler_, const VKScreenInfo& screen_info_)
|
VKScheduler& scheduler_, const VKScreenInfo& screen_info_)
|
||||||
: cpu_memory{cpu_memory_}, render_window{render_window_}, rasterizer{rasterizer_},
|
: cpu_memory{cpu_memory_}, render_window{render_window_}, rasterizer{rasterizer_},
|
||||||
|
|
|
@ -33,8 +33,8 @@ namespace Vulkan {
|
||||||
|
|
||||||
struct ScreenInfo;
|
struct ScreenInfo;
|
||||||
|
|
||||||
|
class Device;
|
||||||
class RasterizerVulkan;
|
class RasterizerVulkan;
|
||||||
class VKDevice;
|
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
class VKSwapchain;
|
class VKSwapchain;
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ class VKBlitScreen final {
|
||||||
public:
|
public:
|
||||||
explicit VKBlitScreen(Core::Memory::Memory& cpu_memory,
|
explicit VKBlitScreen(Core::Memory::Memory& cpu_memory,
|
||||||
Core::Frontend::EmuWindow& render_window,
|
Core::Frontend::EmuWindow& render_window,
|
||||||
VideoCore::RasterizerInterface& rasterizer, const VKDevice& device,
|
VideoCore::RasterizerInterface& rasterizer, const Device& device,
|
||||||
VKMemoryManager& memory_manager, VKSwapchain& swapchain,
|
VKMemoryManager& memory_manager, VKSwapchain& swapchain,
|
||||||
VKScheduler& scheduler, const VKScreenInfo& screen_info);
|
VKScheduler& scheduler, const VKScreenInfo& screen_info);
|
||||||
~VKBlitScreen();
|
~VKBlitScreen();
|
||||||
|
@ -85,7 +85,7 @@ private:
|
||||||
Core::Memory::Memory& cpu_memory;
|
Core::Memory::Memory& cpu_memory;
|
||||||
Core::Frontend::EmuWindow& render_window;
|
Core::Frontend::EmuWindow& render_window;
|
||||||
VideoCore::RasterizerInterface& rasterizer;
|
VideoCore::RasterizerInterface& rasterizer;
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKMemoryManager& memory_manager;
|
VKMemoryManager& memory_manager;
|
||||||
VKSwapchain& swapchain;
|
VKSwapchain& swapchain;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
|
|
|
@ -34,13 +34,13 @@ constexpr VkAccessFlags UPLOAD_ACCESS_BARRIERS =
|
||||||
constexpr VkAccessFlags TRANSFORM_FEEDBACK_WRITE_ACCESS =
|
constexpr VkAccessFlags TRANSFORM_FEEDBACK_WRITE_ACCESS =
|
||||||
VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT | VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT;
|
VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT | VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT;
|
||||||
|
|
||||||
std::unique_ptr<VKStreamBuffer> CreateStreamBuffer(const VKDevice& device, VKScheduler& scheduler) {
|
std::unique_ptr<VKStreamBuffer> CreateStreamBuffer(const Device& device, VKScheduler& scheduler) {
|
||||||
return std::make_unique<VKStreamBuffer>(device, scheduler);
|
return std::make_unique<VKStreamBuffer>(device, scheduler);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
Buffer::Buffer(const VKDevice& device_, VKMemoryManager& memory_manager, VKScheduler& scheduler_,
|
Buffer::Buffer(const Device& device_, VKMemoryManager& memory_manager, VKScheduler& scheduler_,
|
||||||
VKStagingBufferPool& staging_pool_, VAddr cpu_addr_, std::size_t size_)
|
VKStagingBufferPool& staging_pool_, VAddr cpu_addr_, std::size_t size_)
|
||||||
: BufferBlock{cpu_addr_, size_}, device{device_}, scheduler{scheduler_}, staging_pool{
|
: BufferBlock{cpu_addr_, size_}, device{device_}, scheduler{scheduler_}, staging_pool{
|
||||||
staging_pool_} {
|
staging_pool_} {
|
||||||
|
@ -168,7 +168,7 @@ void Buffer::CopyFrom(const Buffer& src, std::size_t src_offset, std::size_t dst
|
||||||
|
|
||||||
VKBufferCache::VKBufferCache(VideoCore::RasterizerInterface& rasterizer_,
|
VKBufferCache::VKBufferCache(VideoCore::RasterizerInterface& rasterizer_,
|
||||||
Tegra::MemoryManager& gpu_memory_, Core::Memory::Memory& cpu_memory_,
|
Tegra::MemoryManager& gpu_memory_, Core::Memory::Memory& cpu_memory_,
|
||||||
const VKDevice& device_, VKMemoryManager& memory_manager_,
|
const Device& device_, VKMemoryManager& memory_manager_,
|
||||||
VKScheduler& scheduler_, VKStreamBuffer& stream_buffer_,
|
VKScheduler& scheduler_, VKStreamBuffer& stream_buffer_,
|
||||||
VKStagingBufferPool& staging_pool_)
|
VKStagingBufferPool& staging_pool_)
|
||||||
: VideoCommon::BufferCache<Buffer, VkBuffer, VKStreamBuffer>{rasterizer_, gpu_memory_,
|
: VideoCommon::BufferCache<Buffer, VkBuffer, VKStreamBuffer>{rasterizer_, gpu_memory_,
|
||||||
|
|
|
@ -15,13 +15,13 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
class VKMemoryManager;
|
class VKMemoryManager;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
|
|
||||||
class Buffer final : public VideoCommon::BufferBlock {
|
class Buffer final : public VideoCommon::BufferBlock {
|
||||||
public:
|
public:
|
||||||
explicit Buffer(const VKDevice& device, VKMemoryManager& memory_manager, VKScheduler& scheduler,
|
explicit Buffer(const Device& device, VKMemoryManager& memory_manager, VKScheduler& scheduler,
|
||||||
VKStagingBufferPool& staging_pool, VAddr cpu_addr_, std::size_t size_);
|
VKStagingBufferPool& staging_pool, VAddr cpu_addr_, std::size_t size_);
|
||||||
~Buffer();
|
~Buffer();
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
VKStagingBufferPool& staging_pool;
|
VKStagingBufferPool& staging_pool;
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ class VKBufferCache final : public VideoCommon::BufferCache<Buffer, VkBuffer, VK
|
||||||
public:
|
public:
|
||||||
explicit VKBufferCache(VideoCore::RasterizerInterface& rasterizer,
|
explicit VKBufferCache(VideoCore::RasterizerInterface& rasterizer,
|
||||||
Tegra::MemoryManager& gpu_memory, Core::Memory::Memory& cpu_memory,
|
Tegra::MemoryManager& gpu_memory, Core::Memory::Memory& cpu_memory,
|
||||||
const VKDevice& device, VKMemoryManager& memory_manager,
|
const Device& device, VKMemoryManager& memory_manager,
|
||||||
VKScheduler& scheduler, VKStreamBuffer& stream_buffer,
|
VKScheduler& scheduler, VKStreamBuffer& stream_buffer,
|
||||||
VKStagingBufferPool& staging_pool);
|
VKStagingBufferPool& staging_pool);
|
||||||
~VKBufferCache();
|
~VKBufferCache();
|
||||||
|
@ -63,7 +63,7 @@ protected:
|
||||||
std::shared_ptr<Buffer> CreateBlock(VAddr cpu_addr, std::size_t size) override;
|
std::shared_ptr<Buffer> CreateBlock(VAddr cpu_addr, std::size_t size) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKMemoryManager& memory_manager;
|
VKMemoryManager& memory_manager;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
VKStagingBufferPool& staging_pool;
|
VKStagingBufferPool& staging_pool;
|
||||||
|
|
|
@ -17,7 +17,7 @@ struct CommandPool::Pool {
|
||||||
vk::CommandBuffers cmdbufs;
|
vk::CommandBuffers cmdbufs;
|
||||||
};
|
};
|
||||||
|
|
||||||
CommandPool::CommandPool(MasterSemaphore& master_semaphore_, const VKDevice& device_)
|
CommandPool::CommandPool(MasterSemaphore& master_semaphore_, const Device& device_)
|
||||||
: ResourcePool(master_semaphore_, COMMAND_BUFFER_POOL_SIZE), device{device_} {}
|
: ResourcePool(master_semaphore_, COMMAND_BUFFER_POOL_SIZE), device{device_} {}
|
||||||
|
|
||||||
CommandPool::~CommandPool() = default;
|
CommandPool::~CommandPool() = default;
|
||||||
|
|
|
@ -12,12 +12,12 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
|
class Device;
|
||||||
class MasterSemaphore;
|
class MasterSemaphore;
|
||||||
class VKDevice;
|
|
||||||
|
|
||||||
class CommandPool final : public ResourcePool {
|
class CommandPool final : public ResourcePool {
|
||||||
public:
|
public:
|
||||||
explicit CommandPool(MasterSemaphore& master_semaphore_, const VKDevice& device_);
|
explicit CommandPool(MasterSemaphore& master_semaphore_, const Device& device_);
|
||||||
~CommandPool() override;
|
~CommandPool() override;
|
||||||
|
|
||||||
void Allocate(size_t begin, size_t end) override;
|
void Allocate(size_t begin, size_t end) override;
|
||||||
|
@ -27,7 +27,7 @@ public:
|
||||||
private:
|
private:
|
||||||
struct Pool;
|
struct Pool;
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
std::vector<Pool> pools;
|
std::vector<Pool> pools;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ VkDescriptorUpdateTemplateEntryKHR BuildInputOutputDescriptorUpdateTemplate() {
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
VKComputePass::VKComputePass(const VKDevice& device, VKDescriptorPool& descriptor_pool,
|
VKComputePass::VKComputePass(const Device& device, VKDescriptorPool& descriptor_pool,
|
||||||
vk::Span<VkDescriptorSetLayoutBinding> bindings,
|
vk::Span<VkDescriptorSetLayoutBinding> bindings,
|
||||||
vk::Span<VkDescriptorUpdateTemplateEntryKHR> templates,
|
vk::Span<VkDescriptorUpdateTemplateEntryKHR> templates,
|
||||||
vk::Span<VkPushConstantRange> push_constants,
|
vk::Span<VkPushConstantRange> push_constants,
|
||||||
|
@ -162,7 +162,7 @@ VkDescriptorSet VKComputePass::CommitDescriptorSet(
|
||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
|
||||||
QuadArrayPass::QuadArrayPass(const VKDevice& device_, VKScheduler& scheduler_,
|
QuadArrayPass::QuadArrayPass(const Device& device_, VKScheduler& scheduler_,
|
||||||
VKDescriptorPool& descriptor_pool_,
|
VKDescriptorPool& descriptor_pool_,
|
||||||
VKStagingBufferPool& staging_buffer_pool_,
|
VKStagingBufferPool& staging_buffer_pool_,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_)
|
VKUpdateDescriptorQueue& update_descriptor_queue_)
|
||||||
|
@ -211,7 +211,7 @@ std::pair<VkBuffer, VkDeviceSize> QuadArrayPass::Assemble(u32 num_vertices, u32
|
||||||
return {*buffer.handle, 0};
|
return {*buffer.handle, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
Uint8Pass::Uint8Pass(const VKDevice& device, VKScheduler& scheduler_,
|
Uint8Pass::Uint8Pass(const Device& device, VKScheduler& scheduler_,
|
||||||
VKDescriptorPool& descriptor_pool, VKStagingBufferPool& staging_buffer_pool_,
|
VKDescriptorPool& descriptor_pool, VKStagingBufferPool& staging_buffer_pool_,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_)
|
VKUpdateDescriptorQueue& update_descriptor_queue_)
|
||||||
: VKComputePass(device, descriptor_pool, BuildInputOutputDescriptorSetBindings(),
|
: VKComputePass(device, descriptor_pool, BuildInputOutputDescriptorSetBindings(),
|
||||||
|
@ -255,7 +255,7 @@ std::pair<VkBuffer, u64> Uint8Pass::Assemble(u32 num_vertices, VkBuffer src_buff
|
||||||
return {*buffer.handle, 0};
|
return {*buffer.handle, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
QuadIndexedPass::QuadIndexedPass(const VKDevice& device_, VKScheduler& scheduler_,
|
QuadIndexedPass::QuadIndexedPass(const Device& device_, VKScheduler& scheduler_,
|
||||||
VKDescriptorPool& descriptor_pool_,
|
VKDescriptorPool& descriptor_pool_,
|
||||||
VKStagingBufferPool& staging_buffer_pool_,
|
VKStagingBufferPool& staging_buffer_pool_,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_)
|
VKUpdateDescriptorQueue& update_descriptor_queue_)
|
||||||
|
|
|
@ -15,14 +15,14 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
class VKStagingBufferPool;
|
class VKStagingBufferPool;
|
||||||
class VKUpdateDescriptorQueue;
|
class VKUpdateDescriptorQueue;
|
||||||
|
|
||||||
class VKComputePass {
|
class VKComputePass {
|
||||||
public:
|
public:
|
||||||
explicit VKComputePass(const VKDevice& device, VKDescriptorPool& descriptor_pool,
|
explicit VKComputePass(const Device& device, VKDescriptorPool& descriptor_pool,
|
||||||
vk::Span<VkDescriptorSetLayoutBinding> bindings,
|
vk::Span<VkDescriptorSetLayoutBinding> bindings,
|
||||||
vk::Span<VkDescriptorUpdateTemplateEntryKHR> templates,
|
vk::Span<VkDescriptorUpdateTemplateEntryKHR> templates,
|
||||||
vk::Span<VkPushConstantRange> push_constants, std::span<const u32> code);
|
vk::Span<VkPushConstantRange> push_constants, std::span<const u32> code);
|
||||||
|
@ -43,7 +43,7 @@ private:
|
||||||
|
|
||||||
class QuadArrayPass final : public VKComputePass {
|
class QuadArrayPass final : public VKComputePass {
|
||||||
public:
|
public:
|
||||||
explicit QuadArrayPass(const VKDevice& device_, VKScheduler& scheduler_,
|
explicit QuadArrayPass(const Device& device_, VKScheduler& scheduler_,
|
||||||
VKDescriptorPool& descriptor_pool_,
|
VKDescriptorPool& descriptor_pool_,
|
||||||
VKStagingBufferPool& staging_buffer_pool_,
|
VKStagingBufferPool& staging_buffer_pool_,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_);
|
VKUpdateDescriptorQueue& update_descriptor_queue_);
|
||||||
|
@ -59,7 +59,7 @@ private:
|
||||||
|
|
||||||
class Uint8Pass final : public VKComputePass {
|
class Uint8Pass final : public VKComputePass {
|
||||||
public:
|
public:
|
||||||
explicit Uint8Pass(const VKDevice& device_, VKScheduler& scheduler_,
|
explicit Uint8Pass(const Device& device_, VKScheduler& scheduler_,
|
||||||
VKDescriptorPool& descriptor_pool_,
|
VKDescriptorPool& descriptor_pool_,
|
||||||
VKStagingBufferPool& staging_buffer_pool_,
|
VKStagingBufferPool& staging_buffer_pool_,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_);
|
VKUpdateDescriptorQueue& update_descriptor_queue_);
|
||||||
|
@ -75,7 +75,7 @@ private:
|
||||||
|
|
||||||
class QuadIndexedPass final : public VKComputePass {
|
class QuadIndexedPass final : public VKComputePass {
|
||||||
public:
|
public:
|
||||||
explicit QuadIndexedPass(const VKDevice& device_, VKScheduler& scheduler_,
|
explicit QuadIndexedPass(const Device& device_, VKScheduler& scheduler_,
|
||||||
VKDescriptorPool& descriptor_pool_,
|
VKDescriptorPool& descriptor_pool_,
|
||||||
VKStagingBufferPool& staging_buffer_pool_,
|
VKStagingBufferPool& staging_buffer_pool_,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_);
|
VKUpdateDescriptorQueue& update_descriptor_queue_);
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
VKComputePipeline::VKComputePipeline(const VKDevice& device_, VKScheduler& scheduler_,
|
VKComputePipeline::VKComputePipeline(const Device& device_, VKScheduler& scheduler_,
|
||||||
VKDescriptorPool& descriptor_pool_,
|
VKDescriptorPool& descriptor_pool_,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_,
|
VKUpdateDescriptorQueue& update_descriptor_queue_,
|
||||||
const SPIRVShader& shader_)
|
const SPIRVShader& shader_)
|
||||||
|
|
|
@ -11,13 +11,13 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
class VKUpdateDescriptorQueue;
|
class VKUpdateDescriptorQueue;
|
||||||
|
|
||||||
class VKComputePipeline final {
|
class VKComputePipeline final {
|
||||||
public:
|
public:
|
||||||
explicit VKComputePipeline(const VKDevice& device_, VKScheduler& scheduler_,
|
explicit VKComputePipeline(const Device& device_, VKScheduler& scheduler_,
|
||||||
VKDescriptorPool& descriptor_pool_,
|
VKDescriptorPool& descriptor_pool_,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_,
|
VKUpdateDescriptorQueue& update_descriptor_queue_,
|
||||||
const SPIRVShader& shader_);
|
const SPIRVShader& shader_);
|
||||||
|
@ -48,7 +48,7 @@ private:
|
||||||
|
|
||||||
vk::Pipeline CreatePipeline() const;
|
vk::Pipeline CreatePipeline() const;
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
ShaderEntries entries;
|
ShaderEntries entries;
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ void DescriptorAllocator::Allocate(std::size_t begin, std::size_t end) {
|
||||||
descriptors_allocations.push_back(descriptor_pool.AllocateDescriptors(layout, end - begin));
|
descriptors_allocations.push_back(descriptor_pool.AllocateDescriptors(layout, end - begin));
|
||||||
}
|
}
|
||||||
|
|
||||||
VKDescriptorPool::VKDescriptorPool(const VKDevice& device_, VKScheduler& scheduler)
|
VKDescriptorPool::VKDescriptorPool(const Device& device_, VKScheduler& scheduler)
|
||||||
: device{device_}, master_semaphore{scheduler.GetMasterSemaphore()}, active_pool{
|
: device{device_}, master_semaphore{scheduler.GetMasterSemaphore()}, active_pool{
|
||||||
AllocateNewPool()} {}
|
AllocateNewPool()} {}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
class VKDescriptorPool;
|
class VKDescriptorPool;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ class VKDescriptorPool final {
|
||||||
friend DescriptorAllocator;
|
friend DescriptorAllocator;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit VKDescriptorPool(const VKDevice& device, VKScheduler& scheduler);
|
explicit VKDescriptorPool(const Device& device, VKScheduler& scheduler);
|
||||||
~VKDescriptorPool();
|
~VKDescriptorPool();
|
||||||
|
|
||||||
VKDescriptorPool(const VKDescriptorPool&) = delete;
|
VKDescriptorPool(const VKDescriptorPool&) = delete;
|
||||||
|
@ -50,7 +50,7 @@ private:
|
||||||
|
|
||||||
vk::DescriptorSets AllocateDescriptors(VkDescriptorSetLayout layout, std::size_t count);
|
vk::DescriptorSets AllocateDescriptors(VkDescriptorSetLayout layout, std::size_t count);
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
MasterSemaphore& master_semaphore;
|
MasterSemaphore& master_semaphore;
|
||||||
|
|
||||||
std::vector<vk::DescriptorPool> pools;
|
std::vector<vk::DescriptorPool> pools;
|
||||||
|
|
|
@ -206,7 +206,7 @@ std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties(
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
VKDevice::VKDevice(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR surface,
|
Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR surface,
|
||||||
const vk::InstanceDispatch& dld_)
|
const vk::InstanceDispatch& dld_)
|
||||||
: instance{instance_}, dld{dld_}, physical{physical_}, properties{physical.GetProperties()},
|
: instance{instance_}, dld{dld_}, physical{physical_}, properties{physical.GetProperties()},
|
||||||
format_properties{GetFormatProperties(physical, dld)} {
|
format_properties{GetFormatProperties(physical, dld)} {
|
||||||
|
@ -449,9 +449,9 @@ VKDevice::VKDevice(VkInstance instance_, vk::PhysicalDevice physical_, VkSurface
|
||||||
use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue();
|
use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
VKDevice::~VKDevice() = default;
|
Device::~Device() = default;
|
||||||
|
|
||||||
VkFormat VKDevice::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage,
|
VkFormat Device::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage,
|
||||||
FormatType format_type) const {
|
FormatType format_type) const {
|
||||||
if (IsFormatSupported(wanted_format, wanted_usage, format_type)) {
|
if (IsFormatSupported(wanted_format, wanted_usage, format_type)) {
|
||||||
return wanted_format;
|
return wanted_format;
|
||||||
|
@ -483,18 +483,18 @@ VkFormat VKDevice::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFla
|
||||||
return wanted_format;
|
return wanted_format;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKDevice::ReportLoss() const {
|
void Device::ReportLoss() const {
|
||||||
LOG_CRITICAL(Render_Vulkan, "Device loss occurred!");
|
LOG_CRITICAL(Render_Vulkan, "Device loss occured!");
|
||||||
|
|
||||||
// Wait for the log to flush and for Nsight Aftermath to dump the results
|
// Wait for the log to flush and for Nsight Aftermath to dump the results
|
||||||
std::this_thread::sleep_for(std::chrono::seconds{15});
|
std::this_thread::sleep_for(std::chrono::seconds{15});
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKDevice::SaveShader(const std::vector<u32>& spirv) const {
|
void Device::SaveShader(const std::vector<u32>& spirv) const {
|
||||||
nsight_aftermath_tracker.SaveShader(spirv);
|
nsight_aftermath_tracker.SaveShader(spirv);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VKDevice::IsOptimalAstcSupported(const VkPhysicalDeviceFeatures& features) const {
|
bool Device::IsOptimalAstcSupported(const VkPhysicalDeviceFeatures& features) const {
|
||||||
// Disable for now to avoid converting ASTC twice.
|
// Disable for now to avoid converting ASTC twice.
|
||||||
static constexpr std::array astc_formats = {
|
static constexpr std::array astc_formats = {
|
||||||
VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
|
VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
|
||||||
|
@ -528,7 +528,7 @@ bool VKDevice::IsOptimalAstcSupported(const VkPhysicalDeviceFeatures& features)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VKDevice::TestDepthStencilBlits() const {
|
bool Device::TestDepthStencilBlits() const {
|
||||||
static constexpr VkFormatFeatureFlags required_features =
|
static constexpr VkFormatFeatureFlags required_features =
|
||||||
VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT;
|
VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT;
|
||||||
const auto test_features = [](VkFormatProperties props) {
|
const auto test_features = [](VkFormatProperties props) {
|
||||||
|
@ -538,7 +538,7 @@ bool VKDevice::TestDepthStencilBlits() const {
|
||||||
test_features(format_properties.at(VK_FORMAT_D24_UNORM_S8_UINT));
|
test_features(format_properties.at(VK_FORMAT_D24_UNORM_S8_UINT));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VKDevice::IsFormatSupported(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage,
|
bool Device::IsFormatSupported(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage,
|
||||||
FormatType format_type) const {
|
FormatType format_type) const {
|
||||||
const auto it = format_properties.find(wanted_format);
|
const auto it = format_properties.find(wanted_format);
|
||||||
if (it == format_properties.end()) {
|
if (it == format_properties.end()) {
|
||||||
|
@ -549,7 +549,7 @@ bool VKDevice::IsFormatSupported(VkFormat wanted_format, VkFormatFeatureFlags wa
|
||||||
return (supported_usage & wanted_usage) == wanted_usage;
|
return (supported_usage & wanted_usage) == wanted_usage;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKDevice::CheckSuitability() const {
|
void Device::CheckSuitability() const {
|
||||||
std::bitset<REQUIRED_EXTENSIONS.size()> available_extensions;
|
std::bitset<REQUIRED_EXTENSIONS.size()> available_extensions;
|
||||||
for (const VkExtensionProperties& property : physical.EnumerateDeviceExtensionProperties()) {
|
for (const VkExtensionProperties& property : physical.EnumerateDeviceExtensionProperties()) {
|
||||||
for (std::size_t i = 0; i < REQUIRED_EXTENSIONS.size(); ++i) {
|
for (std::size_t i = 0; i < REQUIRED_EXTENSIONS.size(); ++i) {
|
||||||
|
@ -614,7 +614,7 @@ void VKDevice::CheckSuitability() const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<const char*> VKDevice::LoadExtensions() {
|
std::vector<const char*> Device::LoadExtensions() {
|
||||||
std::vector<const char*> extensions;
|
std::vector<const char*> extensions;
|
||||||
extensions.reserve(7 + REQUIRED_EXTENSIONS.size());
|
extensions.reserve(7 + REQUIRED_EXTENSIONS.size());
|
||||||
extensions.insert(extensions.begin(), REQUIRED_EXTENSIONS.begin(), REQUIRED_EXTENSIONS.end());
|
extensions.insert(extensions.begin(), REQUIRED_EXTENSIONS.begin(), REQUIRED_EXTENSIONS.end());
|
||||||
|
@ -767,7 +767,7 @@ std::vector<const char*> VKDevice::LoadExtensions() {
|
||||||
return extensions;
|
return extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKDevice::SetupFamilies(VkSurfaceKHR surface) {
|
void Device::SetupFamilies(VkSurfaceKHR surface) {
|
||||||
const std::vector queue_family_properties = physical.GetQueueFamilyProperties();
|
const std::vector queue_family_properties = physical.GetQueueFamilyProperties();
|
||||||
std::optional<u32> graphics;
|
std::optional<u32> graphics;
|
||||||
std::optional<u32> present;
|
std::optional<u32> present;
|
||||||
|
@ -798,14 +798,14 @@ void VKDevice::SetupFamilies(VkSurfaceKHR surface) {
|
||||||
present_family = *present;
|
present_family = *present;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKDevice::SetupFeatures() {
|
void Device::SetupFeatures() {
|
||||||
const auto supported_features{physical.GetFeatures()};
|
const auto supported_features{physical.GetFeatures()};
|
||||||
is_formatless_image_load_supported = supported_features.shaderStorageImageReadWithoutFormat;
|
is_formatless_image_load_supported = supported_features.shaderStorageImageReadWithoutFormat;
|
||||||
is_blit_depth_stencil_supported = TestDepthStencilBlits();
|
is_blit_depth_stencil_supported = TestDepthStencilBlits();
|
||||||
is_optimal_astc_supported = IsOptimalAstcSupported(supported_features);
|
is_optimal_astc_supported = IsOptimalAstcSupported(supported_features);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKDevice::CollectTelemetryParameters() {
|
void Device::CollectTelemetryParameters() {
|
||||||
VkPhysicalDeviceDriverPropertiesKHR driver{
|
VkPhysicalDeviceDriverPropertiesKHR driver{
|
||||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR,
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR,
|
||||||
.pNext = nullptr,
|
.pNext = nullptr,
|
||||||
|
@ -832,7 +832,7 @@ void VKDevice::CollectTelemetryParameters() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKDevice::CollectToolingInfo() {
|
void Device::CollectToolingInfo() {
|
||||||
if (!ext_tooling_info) {
|
if (!ext_tooling_info) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -858,7 +858,7 @@ void VKDevice::CollectToolingInfo() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<VkDeviceQueueCreateInfo> VKDevice::GetDeviceQueueCreateInfos() const {
|
std::vector<VkDeviceQueueCreateInfo> Device::GetDeviceQueueCreateInfos() const {
|
||||||
static constexpr float QUEUE_PRIORITY = 1.0f;
|
static constexpr float QUEUE_PRIORITY = 1.0f;
|
||||||
|
|
||||||
std::unordered_set<u32> unique_queue_families{graphics_family, present_family};
|
std::unordered_set<u32> unique_queue_families{graphics_family, present_family};
|
||||||
|
|
|
@ -22,11 +22,11 @@ enum class FormatType { Linear, Optimal, Buffer };
|
||||||
const u32 GuestWarpSize = 32;
|
const u32 GuestWarpSize = 32;
|
||||||
|
|
||||||
/// Handles data specific to a physical device.
|
/// Handles data specific to a physical device.
|
||||||
class VKDevice final {
|
class Device final {
|
||||||
public:
|
public:
|
||||||
explicit VKDevice(VkInstance instance, vk::PhysicalDevice physical, VkSurfaceKHR surface,
|
explicit Device(VkInstance instance, vk::PhysicalDevice physical, VkSurfaceKHR surface,
|
||||||
const vk::InstanceDispatch& dld);
|
const vk::InstanceDispatch& dld);
|
||||||
~VKDevice();
|
~Device();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a format supported by the device for the passed requeriments.
|
* Returns a format supported by the device for the passed requeriments.
|
||||||
|
|
|
@ -14,11 +14,11 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
InnerFence::InnerFence(const VKDevice& device_, VKScheduler& scheduler_, u32 payload_,
|
InnerFence::InnerFence(const Device& device_, VKScheduler& scheduler_, u32 payload_,
|
||||||
bool is_stubbed_)
|
bool is_stubbed_)
|
||||||
: FenceBase{payload_, is_stubbed_}, device{device_}, scheduler{scheduler_} {}
|
: FenceBase{payload_, is_stubbed_}, device{device_}, scheduler{scheduler_} {}
|
||||||
|
|
||||||
InnerFence::InnerFence(const VKDevice& device_, VKScheduler& scheduler_, GPUVAddr address_,
|
InnerFence::InnerFence(const Device& device_, VKScheduler& scheduler_, GPUVAddr address_,
|
||||||
u32 payload_, bool is_stubbed_)
|
u32 payload_, bool is_stubbed_)
|
||||||
: FenceBase{address_, payload_, is_stubbed_}, device{device_}, scheduler{scheduler_} {}
|
: FenceBase{address_, payload_, is_stubbed_}, device{device_}, scheduler{scheduler_} {}
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ bool InnerFence::IsEventSignalled() const {
|
||||||
VKFenceManager::VKFenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_,
|
VKFenceManager::VKFenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_,
|
||||||
Tegra::MemoryManager& memory_manager_, TextureCache& texture_cache_,
|
Tegra::MemoryManager& memory_manager_, TextureCache& texture_cache_,
|
||||||
VKBufferCache& buffer_cache_, VKQueryCache& query_cache_,
|
VKBufferCache& buffer_cache_, VKQueryCache& query_cache_,
|
||||||
const VKDevice& device_, VKScheduler& scheduler_)
|
const Device& device_, VKScheduler& scheduler_)
|
||||||
: GenericFenceManager{rasterizer_, gpu_, texture_cache_, buffer_cache_, query_cache_},
|
: GenericFenceManager{rasterizer_, gpu_, texture_cache_, buffer_cache_, query_cache_},
|
||||||
device{device_}, scheduler{scheduler_} {}
|
device{device_}, scheduler{scheduler_} {}
|
||||||
|
|
||||||
|
|
|
@ -21,16 +21,16 @@ class RasterizerInterface;
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
|
class Device;
|
||||||
class VKBufferCache;
|
class VKBufferCache;
|
||||||
class VKDevice;
|
|
||||||
class VKQueryCache;
|
class VKQueryCache;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
|
|
||||||
class InnerFence : public VideoCommon::FenceBase {
|
class InnerFence : public VideoCommon::FenceBase {
|
||||||
public:
|
public:
|
||||||
explicit InnerFence(const VKDevice& device_, VKScheduler& scheduler_, u32 payload_,
|
explicit InnerFence(const Device& device_, VKScheduler& scheduler_, u32 payload_,
|
||||||
bool is_stubbed_);
|
bool is_stubbed_);
|
||||||
explicit InnerFence(const VKDevice& device_, VKScheduler& scheduler_, GPUVAddr address_,
|
explicit InnerFence(const Device& device_, VKScheduler& scheduler_, GPUVAddr address_,
|
||||||
u32 payload_, bool is_stubbed_);
|
u32 payload_, bool is_stubbed_);
|
||||||
~InnerFence();
|
~InnerFence();
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ public:
|
||||||
private:
|
private:
|
||||||
bool IsEventSignalled() const;
|
bool IsEventSignalled() const;
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
vk::Event event;
|
vk::Event event;
|
||||||
u64 ticks = 0;
|
u64 ticks = 0;
|
||||||
|
@ -58,7 +58,7 @@ public:
|
||||||
explicit VKFenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_,
|
explicit VKFenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_,
|
||||||
Tegra::MemoryManager& memory_manager_, TextureCache& texture_cache_,
|
Tegra::MemoryManager& memory_manager_, TextureCache& texture_cache_,
|
||||||
VKBufferCache& buffer_cache_, VKQueryCache& query_cache_,
|
VKBufferCache& buffer_cache_, VKQueryCache& query_cache_,
|
||||||
const VKDevice& device_, VKScheduler& scheduler_);
|
const Device& device_, VKScheduler& scheduler_);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Fence CreateFence(u32 value, bool is_stubbed) override;
|
Fence CreateFence(u32 value, bool is_stubbed) override;
|
||||||
|
@ -68,7 +68,7 @@ protected:
|
||||||
void WaitFence(Fence& fence) override;
|
void WaitFence(Fence& fence) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ VkSampleCountFlagBits ConvertMsaaMode(Tegra::Texture::MsaaMode msaa_mode) {
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
VKGraphicsPipeline::VKGraphicsPipeline(const VKDevice& device_, VKScheduler& scheduler_,
|
VKGraphicsPipeline::VKGraphicsPipeline(const Device& device_, VKScheduler& scheduler_,
|
||||||
VKDescriptorPool& descriptor_pool_,
|
VKDescriptorPool& descriptor_pool_,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_,
|
VKUpdateDescriptorQueue& update_descriptor_queue_,
|
||||||
const GraphicsPipelineCacheKey& key,
|
const GraphicsPipelineCacheKey& key,
|
||||||
|
|
|
@ -40,8 +40,8 @@ static_assert(std::has_unique_object_representations_v<GraphicsPipelineCacheKey>
|
||||||
static_assert(std::is_trivially_copyable_v<GraphicsPipelineCacheKey>);
|
static_assert(std::is_trivially_copyable_v<GraphicsPipelineCacheKey>);
|
||||||
static_assert(std::is_trivially_constructible_v<GraphicsPipelineCacheKey>);
|
static_assert(std::is_trivially_constructible_v<GraphicsPipelineCacheKey>);
|
||||||
|
|
||||||
|
class Device;
|
||||||
class VKDescriptorPool;
|
class VKDescriptorPool;
|
||||||
class VKDevice;
|
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
class VKUpdateDescriptorQueue;
|
class VKUpdateDescriptorQueue;
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ using SPIRVProgram = std::array<std::optional<SPIRVShader>, Maxwell::MaxShaderSt
|
||||||
|
|
||||||
class VKGraphicsPipeline final {
|
class VKGraphicsPipeline final {
|
||||||
public:
|
public:
|
||||||
explicit VKGraphicsPipeline(const VKDevice& device_, VKScheduler& scheduler_,
|
explicit VKGraphicsPipeline(const Device& device_, VKScheduler& scheduler_,
|
||||||
VKDescriptorPool& descriptor_pool,
|
VKDescriptorPool& descriptor_pool,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_,
|
VKUpdateDescriptorQueue& update_descriptor_queue_,
|
||||||
const GraphicsPipelineCacheKey& key,
|
const GraphicsPipelineCacheKey& key,
|
||||||
|
@ -85,7 +85,7 @@ private:
|
||||||
vk::Pipeline CreatePipeline(const SPIRVProgram& program, VkRenderPass renderpass,
|
vk::Pipeline CreatePipeline(const SPIRVProgram& program, VkRenderPass renderpass,
|
||||||
u32 num_color_buffers) const;
|
u32 num_color_buffers) const;
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
const GraphicsPipelineCacheKey cache_key;
|
const GraphicsPipelineCacheKey cache_key;
|
||||||
const u64 hash;
|
const u64 hash;
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace Vulkan {
|
||||||
|
|
||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
MasterSemaphore::MasterSemaphore(const VKDevice& device) {
|
MasterSemaphore::MasterSemaphore(const Device& device) {
|
||||||
static constexpr VkSemaphoreTypeCreateInfoKHR semaphore_type_ci{
|
static constexpr VkSemaphoreTypeCreateInfoKHR semaphore_type_ci{
|
||||||
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR,
|
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR,
|
||||||
.pNext = nullptr,
|
.pNext = nullptr,
|
||||||
|
|
|
@ -12,11 +12,11 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
|
|
||||||
class MasterSemaphore {
|
class MasterSemaphore {
|
||||||
public:
|
public:
|
||||||
explicit MasterSemaphore(const VKDevice& device);
|
explicit MasterSemaphore(const Device& device);
|
||||||
~MasterSemaphore();
|
~MasterSemaphore();
|
||||||
|
|
||||||
/// Returns the current logical tick.
|
/// Returns the current logical tick.
|
||||||
|
|
|
@ -29,7 +29,7 @@ u64 GetAllocationChunkSize(u64 required_size) {
|
||||||
|
|
||||||
class VKMemoryAllocation final {
|
class VKMemoryAllocation final {
|
||||||
public:
|
public:
|
||||||
explicit VKMemoryAllocation(const VKDevice& device_, vk::DeviceMemory memory_,
|
explicit VKMemoryAllocation(const Device& device_, vk::DeviceMemory memory_,
|
||||||
VkMemoryPropertyFlags properties_, u64 allocation_size_, u32 type_)
|
VkMemoryPropertyFlags properties_, u64 allocation_size_, u32 type_)
|
||||||
: device{device_}, memory{std::move(memory_)}, properties{properties_},
|
: device{device_}, memory{std::move(memory_)}, properties{properties_},
|
||||||
allocation_size{allocation_size_}, shifted_type{ShiftType(type_)} {}
|
allocation_size{allocation_size_}, shifted_type{ShiftType(type_)} {}
|
||||||
|
@ -104,7 +104,7 @@ private:
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
const VKDevice& device; ///< Vulkan device.
|
const Device& device; ///< Vulkan device.
|
||||||
const vk::DeviceMemory memory; ///< Vulkan memory allocation handler.
|
const vk::DeviceMemory memory; ///< Vulkan memory allocation handler.
|
||||||
const VkMemoryPropertyFlags properties; ///< Vulkan properties.
|
const VkMemoryPropertyFlags properties; ///< Vulkan properties.
|
||||||
const u64 allocation_size; ///< Size of this allocation.
|
const u64 allocation_size; ///< Size of this allocation.
|
||||||
|
@ -117,7 +117,7 @@ private:
|
||||||
std::vector<const VKMemoryCommitImpl*> commits;
|
std::vector<const VKMemoryCommitImpl*> commits;
|
||||||
};
|
};
|
||||||
|
|
||||||
VKMemoryManager::VKMemoryManager(const VKDevice& device_)
|
VKMemoryManager::VKMemoryManager(const Device& device_)
|
||||||
: device{device_}, properties{device_.GetPhysical().GetMemoryProperties()} {}
|
: device{device_}, properties{device_.GetPhysical().GetMemoryProperties()} {}
|
||||||
|
|
||||||
VKMemoryManager::~VKMemoryManager() = default;
|
VKMemoryManager::~VKMemoryManager() = default;
|
||||||
|
@ -207,7 +207,7 @@ VKMemoryCommit VKMemoryManager::TryAllocCommit(const VkMemoryRequirements& requi
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
VKMemoryCommitImpl::VKMemoryCommitImpl(const VKDevice& device_, VKMemoryAllocation* allocation_,
|
VKMemoryCommitImpl::VKMemoryCommitImpl(const Device& device_, VKMemoryAllocation* allocation_,
|
||||||
const vk::DeviceMemory& memory_, u64 begin_, u64 end_)
|
const vk::DeviceMemory& memory_, u64 begin_, u64 end_)
|
||||||
: device{device_}, memory{memory_}, interval{begin_, end_}, allocation{allocation_} {}
|
: device{device_}, memory{memory_}, interval{begin_, end_}, allocation{allocation_} {}
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
|
class Device;
|
||||||
class MemoryMap;
|
class MemoryMap;
|
||||||
class VKDevice;
|
|
||||||
class VKMemoryAllocation;
|
class VKMemoryAllocation;
|
||||||
class VKMemoryCommitImpl;
|
class VKMemoryCommitImpl;
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ using VKMemoryCommit = std::unique_ptr<VKMemoryCommitImpl>;
|
||||||
|
|
||||||
class VKMemoryManager final {
|
class VKMemoryManager final {
|
||||||
public:
|
public:
|
||||||
explicit VKMemoryManager(const VKDevice& device_);
|
explicit VKMemoryManager(const Device& device_);
|
||||||
VKMemoryManager(const VKMemoryManager&) = delete;
|
VKMemoryManager(const VKMemoryManager&) = delete;
|
||||||
~VKMemoryManager();
|
~VKMemoryManager();
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ private:
|
||||||
VKMemoryCommit TryAllocCommit(const VkMemoryRequirements& requirements,
|
VKMemoryCommit TryAllocCommit(const VkMemoryRequirements& requirements,
|
||||||
VkMemoryPropertyFlags wanted_properties);
|
VkMemoryPropertyFlags wanted_properties);
|
||||||
|
|
||||||
const VKDevice& device; ///< Device handler.
|
const Device& device; ///< Device handler.
|
||||||
const VkPhysicalDeviceMemoryProperties properties; ///< Physical device properties.
|
const VkPhysicalDeviceMemoryProperties properties; ///< Physical device properties.
|
||||||
std::vector<std::unique_ptr<VKMemoryAllocation>> allocations; ///< Current allocations.
|
std::vector<std::unique_ptr<VKMemoryAllocation>> allocations; ///< Current allocations.
|
||||||
};
|
};
|
||||||
|
@ -59,7 +59,7 @@ class VKMemoryCommitImpl final {
|
||||||
friend MemoryMap;
|
friend MemoryMap;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit VKMemoryCommitImpl(const VKDevice& device_, VKMemoryAllocation* allocation_,
|
explicit VKMemoryCommitImpl(const Device& device_, VKMemoryAllocation* allocation_,
|
||||||
const vk::DeviceMemory& memory_, u64 begin_, u64 end_);
|
const vk::DeviceMemory& memory_, u64 begin_, u64 end_);
|
||||||
~VKMemoryCommitImpl();
|
~VKMemoryCommitImpl();
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ private:
|
||||||
/// Unmaps memory.
|
/// Unmaps memory.
|
||||||
void Unmap() const;
|
void Unmap() const;
|
||||||
|
|
||||||
const VKDevice& device; ///< Vulkan device.
|
const Device& device; ///< Vulkan device.
|
||||||
const vk::DeviceMemory& memory; ///< Vulkan device memory handler.
|
const vk::DeviceMemory& memory; ///< Vulkan device memory handler.
|
||||||
std::pair<u64, u64> interval{}; ///< Interval where the commit exists.
|
std::pair<u64, u64> interval{}; ///< Interval where the commit exists.
|
||||||
VKMemoryAllocation* allocation{}; ///< Pointer to the large memory allocation.
|
VKMemoryAllocation* allocation{}; ///< Pointer to the large memory allocation.
|
||||||
|
|
|
@ -149,7 +149,7 @@ Shader::~Shader() = default;
|
||||||
VKPipelineCache::VKPipelineCache(RasterizerVulkan& rasterizer_, Tegra::GPU& gpu_,
|
VKPipelineCache::VKPipelineCache(RasterizerVulkan& rasterizer_, Tegra::GPU& gpu_,
|
||||||
Tegra::Engines::Maxwell3D& maxwell3d_,
|
Tegra::Engines::Maxwell3D& maxwell3d_,
|
||||||
Tegra::Engines::KeplerCompute& kepler_compute_,
|
Tegra::Engines::KeplerCompute& kepler_compute_,
|
||||||
Tegra::MemoryManager& gpu_memory_, const VKDevice& device_,
|
Tegra::MemoryManager& gpu_memory_, const Device& device_,
|
||||||
VKScheduler& scheduler_, VKDescriptorPool& descriptor_pool_,
|
VKScheduler& scheduler_, VKDescriptorPool& descriptor_pool_,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue_)
|
VKUpdateDescriptorQueue& update_descriptor_queue_)
|
||||||
: VideoCommon::ShaderCache<Shader>{rasterizer_}, gpu{gpu_}, maxwell3d{maxwell3d_},
|
: VideoCommon::ShaderCache<Shader>{rasterizer_}, gpu{gpu_}, maxwell3d{maxwell3d_},
|
||||||
|
|
|
@ -33,10 +33,10 @@ class System;
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
|
class Device;
|
||||||
class RasterizerVulkan;
|
class RasterizerVulkan;
|
||||||
class VKComputePipeline;
|
class VKComputePipeline;
|
||||||
class VKDescriptorPool;
|
class VKDescriptorPool;
|
||||||
class VKDevice;
|
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
class VKUpdateDescriptorQueue;
|
class VKUpdateDescriptorQueue;
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ public:
|
||||||
explicit VKPipelineCache(RasterizerVulkan& rasterizer, Tegra::GPU& gpu,
|
explicit VKPipelineCache(RasterizerVulkan& rasterizer, Tegra::GPU& gpu,
|
||||||
Tegra::Engines::Maxwell3D& maxwell3d,
|
Tegra::Engines::Maxwell3D& maxwell3d,
|
||||||
Tegra::Engines::KeplerCompute& kepler_compute,
|
Tegra::Engines::KeplerCompute& kepler_compute,
|
||||||
Tegra::MemoryManager& gpu_memory, const VKDevice& device,
|
Tegra::MemoryManager& gpu_memory, const Device& device,
|
||||||
VKScheduler& scheduler, VKDescriptorPool& descriptor_pool,
|
VKScheduler& scheduler, VKDescriptorPool& descriptor_pool,
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue);
|
VKUpdateDescriptorQueue& update_descriptor_queue);
|
||||||
~VKPipelineCache() override;
|
~VKPipelineCache() override;
|
||||||
|
@ -148,7 +148,7 @@ private:
|
||||||
Tegra::Engines::KeplerCompute& kepler_compute;
|
Tegra::Engines::KeplerCompute& kepler_compute;
|
||||||
Tegra::MemoryManager& gpu_memory;
|
Tegra::MemoryManager& gpu_memory;
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
VKDescriptorPool& descriptor_pool;
|
VKDescriptorPool& descriptor_pool;
|
||||||
VKUpdateDescriptorQueue& update_descriptor_queue;
|
VKUpdateDescriptorQueue& update_descriptor_queue;
|
||||||
|
|
|
@ -27,7 +27,7 @@ constexpr VkQueryType GetTarget(QueryType type) {
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
QueryPool::QueryPool(const VKDevice& device_, VKScheduler& scheduler, QueryType type_)
|
QueryPool::QueryPool(const Device& device_, VKScheduler& scheduler, QueryType type_)
|
||||||
: ResourcePool{scheduler.GetMasterSemaphore(), GROW_STEP}, device{device_}, type{type_} {}
|
: ResourcePool{scheduler.GetMasterSemaphore(), GROW_STEP}, device{device_}, type{type_} {}
|
||||||
|
|
||||||
QueryPool::~QueryPool() = default;
|
QueryPool::~QueryPool() = default;
|
||||||
|
@ -68,7 +68,7 @@ void QueryPool::Reserve(std::pair<VkQueryPool, u32> query) {
|
||||||
|
|
||||||
VKQueryCache::VKQueryCache(VideoCore::RasterizerInterface& rasterizer_,
|
VKQueryCache::VKQueryCache(VideoCore::RasterizerInterface& rasterizer_,
|
||||||
Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_,
|
Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_,
|
||||||
const VKDevice& device_, VKScheduler& scheduler_)
|
const Device& device_, VKScheduler& scheduler_)
|
||||||
: QueryCacheBase{rasterizer_, maxwell3d_, gpu_memory_}, device{device_}, scheduler{scheduler_},
|
: QueryCacheBase{rasterizer_, maxwell3d_, gpu_memory_}, device{device_}, scheduler{scheduler_},
|
||||||
query_pools{
|
query_pools{
|
||||||
QueryPool{device_, scheduler_, QueryType::SamplesPassed},
|
QueryPool{device_, scheduler_, QueryType::SamplesPassed},
|
||||||
|
@ -96,9 +96,9 @@ void VKQueryCache::Reserve(QueryType type, std::pair<VkQueryPool, u32> query) {
|
||||||
HostCounter::HostCounter(VKQueryCache& cache_, std::shared_ptr<HostCounter> dependency_,
|
HostCounter::HostCounter(VKQueryCache& cache_, std::shared_ptr<HostCounter> dependency_,
|
||||||
QueryType type_)
|
QueryType type_)
|
||||||
: HostCounterBase{std::move(dependency_)}, cache{cache_}, type{type_},
|
: HostCounterBase{std::move(dependency_)}, cache{cache_}, type{type_},
|
||||||
query{cache_.AllocateQuery(type_)}, tick{cache_.Scheduler().CurrentTick()} {
|
query{cache_.AllocateQuery(type_)}, tick{cache_.GetScheduler().CurrentTick()} {
|
||||||
const vk::Device* logical = &cache_.Device().GetLogical();
|
const vk::Device* logical = &cache.GetDevice().GetLogical();
|
||||||
cache_.Scheduler().Record([logical, query = query](vk::CommandBuffer cmdbuf) {
|
cache.GetScheduler().Record([logical, query = query](vk::CommandBuffer cmdbuf) {
|
||||||
logical->ResetQueryPoolEXT(query.first, query.second, 1);
|
logical->ResetQueryPoolEXT(query.first, query.second, 1);
|
||||||
cmdbuf.BeginQuery(query.first, query.second, VK_QUERY_CONTROL_PRECISE_BIT);
|
cmdbuf.BeginQuery(query.first, query.second, VK_QUERY_CONTROL_PRECISE_BIT);
|
||||||
});
|
});
|
||||||
|
@ -109,17 +109,17 @@ HostCounter::~HostCounter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void HostCounter::EndQuery() {
|
void HostCounter::EndQuery() {
|
||||||
cache.Scheduler().Record(
|
cache.GetScheduler().Record(
|
||||||
[query = query](vk::CommandBuffer cmdbuf) { cmdbuf.EndQuery(query.first, query.second); });
|
[query = query](vk::CommandBuffer cmdbuf) { cmdbuf.EndQuery(query.first, query.second); });
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 HostCounter::BlockingQuery() const {
|
u64 HostCounter::BlockingQuery() const {
|
||||||
if (tick >= cache.Scheduler().CurrentTick()) {
|
if (tick >= cache.GetScheduler().CurrentTick()) {
|
||||||
cache.Scheduler().Flush();
|
cache.GetScheduler().Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 data;
|
u64 data;
|
||||||
const VkResult query_result = cache.Device().GetLogical().GetQueryResults(
|
const VkResult query_result = cache.GetDevice().GetLogical().GetQueryResults(
|
||||||
query.first, query.second, 1, sizeof(data), &data, sizeof(data),
|
query.first, query.second, 1, sizeof(data), &data, sizeof(data),
|
||||||
VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);
|
VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ u64 HostCounter::BlockingQuery() const {
|
||||||
case VK_SUCCESS:
|
case VK_SUCCESS:
|
||||||
return data;
|
return data;
|
||||||
case VK_ERROR_DEVICE_LOST:
|
case VK_ERROR_DEVICE_LOST:
|
||||||
cache.Device().ReportLoss();
|
cache.GetDevice().ReportLoss();
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
default:
|
default:
|
||||||
throw vk::Exception(query_result);
|
throw vk::Exception(query_result);
|
||||||
|
|
|
@ -21,8 +21,8 @@ class RasterizerInterface;
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class CachedQuery;
|
class CachedQuery;
|
||||||
|
class Device;
|
||||||
class HostCounter;
|
class HostCounter;
|
||||||
class VKDevice;
|
|
||||||
class VKQueryCache;
|
class VKQueryCache;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ using CounterStream = VideoCommon::CounterStreamBase<VKQueryCache, HostCounter>;
|
||||||
|
|
||||||
class QueryPool final : public ResourcePool {
|
class QueryPool final : public ResourcePool {
|
||||||
public:
|
public:
|
||||||
explicit QueryPool(const VKDevice& device, VKScheduler& scheduler, VideoCore::QueryType type);
|
explicit QueryPool(const Device& device, VKScheduler& scheduler, VideoCore::QueryType type);
|
||||||
~QueryPool() override;
|
~QueryPool() override;
|
||||||
|
|
||||||
std::pair<VkQueryPool, u32> Commit();
|
std::pair<VkQueryPool, u32> Commit();
|
||||||
|
@ -43,7 +43,7 @@ protected:
|
||||||
private:
|
private:
|
||||||
static constexpr std::size_t GROW_STEP = 512;
|
static constexpr std::size_t GROW_STEP = 512;
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
const VideoCore::QueryType type;
|
const VideoCore::QueryType type;
|
||||||
|
|
||||||
std::vector<vk::QueryPool> pools;
|
std::vector<vk::QueryPool> pools;
|
||||||
|
@ -55,23 +55,23 @@ class VKQueryCache final
|
||||||
public:
|
public:
|
||||||
explicit VKQueryCache(VideoCore::RasterizerInterface& rasterizer_,
|
explicit VKQueryCache(VideoCore::RasterizerInterface& rasterizer_,
|
||||||
Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_,
|
Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_,
|
||||||
const VKDevice& device_, VKScheduler& scheduler_);
|
const Device& device_, VKScheduler& scheduler_);
|
||||||
~VKQueryCache();
|
~VKQueryCache();
|
||||||
|
|
||||||
std::pair<VkQueryPool, u32> AllocateQuery(VideoCore::QueryType type);
|
std::pair<VkQueryPool, u32> AllocateQuery(VideoCore::QueryType type);
|
||||||
|
|
||||||
void Reserve(VideoCore::QueryType type, std::pair<VkQueryPool, u32> query);
|
void Reserve(VideoCore::QueryType type, std::pair<VkQueryPool, u32> query);
|
||||||
|
|
||||||
const VKDevice& Device() const noexcept {
|
const Device& GetDevice() const noexcept {
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
VKScheduler& Scheduler() const noexcept {
|
VKScheduler& GetScheduler() const noexcept {
|
||||||
return scheduler;
|
return scheduler;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
std::array<QueryPool, VideoCore::NumQueryTypes> query_pools;
|
std::array<QueryPool, VideoCore::NumQueryTypes> query_pools;
|
||||||
};
|
};
|
||||||
|
|
|
@ -62,7 +62,7 @@ namespace {
|
||||||
|
|
||||||
constexpr auto COMPUTE_SHADER_INDEX = static_cast<size_t>(Tegra::Engines::ShaderType::Compute);
|
constexpr auto COMPUTE_SHADER_INDEX = static_cast<size_t>(Tegra::Engines::ShaderType::Compute);
|
||||||
|
|
||||||
VkViewport GetViewportState(const VKDevice& device, const Maxwell& regs, size_t index) {
|
VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index) {
|
||||||
const auto& src = regs.viewport_transform[index];
|
const auto& src = regs.viewport_transform[index];
|
||||||
const float width = src.scale_x * 2.0f;
|
const float width = src.scale_x * 2.0f;
|
||||||
const float height = src.scale_y * 2.0f;
|
const float height = src.scale_y * 2.0f;
|
||||||
|
@ -239,7 +239,7 @@ public:
|
||||||
index.type = type;
|
index.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bind(const VKDevice& device, VKScheduler& scheduler) const {
|
void Bind(const Device& device, VKScheduler& scheduler) const {
|
||||||
// Use this large switch case to avoid dispatching more memory in the record lambda than
|
// Use this large switch case to avoid dispatching more memory in the record lambda than
|
||||||
// what we need. It looks horrible, but it's the best we can do on standard C++.
|
// what we need. It looks horrible, but it's the best we can do on standard C++.
|
||||||
switch (vertex.num_buffers) {
|
switch (vertex.num_buffers) {
|
||||||
|
@ -330,7 +330,7 @@ private:
|
||||||
} index;
|
} index;
|
||||||
|
|
||||||
template <size_t N>
|
template <size_t N>
|
||||||
void BindStatic(const VKDevice& device, VKScheduler& scheduler) const {
|
void BindStatic(const Device& device, VKScheduler& scheduler) const {
|
||||||
if (device.IsExtExtendedDynamicStateSupported()) {
|
if (device.IsExtExtendedDynamicStateSupported()) {
|
||||||
if (index.buffer) {
|
if (index.buffer) {
|
||||||
BindStatic<N, true, true>(scheduler);
|
BindStatic<N, true, true>(scheduler);
|
||||||
|
@ -409,7 +409,7 @@ void RasterizerVulkan::DrawParameters::Draw(vk::CommandBuffer cmdbuf) const {
|
||||||
RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
|
RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
|
||||||
Tegra::MemoryManager& gpu_memory_,
|
Tegra::MemoryManager& gpu_memory_,
|
||||||
Core::Memory::Memory& cpu_memory_, VKScreenInfo& screen_info_,
|
Core::Memory::Memory& cpu_memory_, VKScreenInfo& screen_info_,
|
||||||
const VKDevice& device_, VKMemoryManager& memory_manager_,
|
const Device& device_, VKMemoryManager& memory_manager_,
|
||||||
StateTracker& state_tracker_, VKScheduler& scheduler_)
|
StateTracker& state_tracker_, VKScheduler& scheduler_)
|
||||||
: RasterizerAccelerated{cpu_memory_}, gpu{gpu_},
|
: RasterizerAccelerated{cpu_memory_}, gpu{gpu_},
|
||||||
gpu_memory{gpu_memory_}, maxwell3d{gpu.Maxwell3D()}, kepler_compute{gpu.KeplerCompute()},
|
gpu_memory{gpu_memory_}, maxwell3d{gpu.Maxwell3D()}, kepler_compute{gpu.KeplerCompute()},
|
||||||
|
|
|
@ -55,7 +55,7 @@ class RasterizerVulkan final : public VideoCore::RasterizerAccelerated {
|
||||||
public:
|
public:
|
||||||
explicit RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
|
explicit RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
|
||||||
Tegra::MemoryManager& gpu_memory_, Core::Memory::Memory& cpu_memory_,
|
Tegra::MemoryManager& gpu_memory_, Core::Memory::Memory& cpu_memory_,
|
||||||
VKScreenInfo& screen_info_, const VKDevice& device_,
|
VKScreenInfo& screen_info_, const Device& device_,
|
||||||
VKMemoryManager& memory_manager_, StateTracker& state_tracker_,
|
VKMemoryManager& memory_manager_, StateTracker& state_tracker_,
|
||||||
VKScheduler& scheduler_);
|
VKScheduler& scheduler_);
|
||||||
~RasterizerVulkan() override;
|
~RasterizerVulkan() override;
|
||||||
|
@ -212,7 +212,7 @@ private:
|
||||||
Tegra::Engines::KeplerCompute& kepler_compute;
|
Tegra::Engines::KeplerCompute& kepler_compute;
|
||||||
|
|
||||||
VKScreenInfo& screen_info;
|
VKScreenInfo& screen_info;
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKMemoryManager& memory_manager;
|
VKMemoryManager& memory_manager;
|
||||||
StateTracker& state_tracker;
|
StateTracker& state_tracker;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
|
|
|
@ -37,7 +37,7 @@ void VKScheduler::CommandChunk::ExecuteAll(vk::CommandBuffer cmdbuf) {
|
||||||
last = nullptr;
|
last = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
VKScheduler::VKScheduler(const VKDevice& device_, StateTracker& state_tracker_)
|
VKScheduler::VKScheduler(const Device& device_, StateTracker& state_tracker_)
|
||||||
: device{device_}, state_tracker{state_tracker_},
|
: device{device_}, state_tracker{state_tracker_},
|
||||||
master_semaphore{std::make_unique<MasterSemaphore>(device)},
|
master_semaphore{std::make_unique<MasterSemaphore>(device)},
|
||||||
command_pool{std::make_unique<CommandPool>(*master_semaphore, device)} {
|
command_pool{std::make_unique<CommandPool>(*master_semaphore, device)} {
|
||||||
|
|
|
@ -17,17 +17,17 @@
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class CommandPool;
|
class CommandPool;
|
||||||
|
class Device;
|
||||||
class Framebuffer;
|
class Framebuffer;
|
||||||
class MasterSemaphore;
|
class MasterSemaphore;
|
||||||
class StateTracker;
|
class StateTracker;
|
||||||
class VKDevice;
|
|
||||||
class VKQueryCache;
|
class VKQueryCache;
|
||||||
|
|
||||||
/// The scheduler abstracts command buffer and fence management with an interface that's able to do
|
/// The scheduler abstracts command buffer and fence management with an interface that's able to do
|
||||||
/// OpenGL-like operations on Vulkan command buffers.
|
/// OpenGL-like operations on Vulkan command buffers.
|
||||||
class VKScheduler {
|
class VKScheduler {
|
||||||
public:
|
public:
|
||||||
explicit VKScheduler(const VKDevice& device, StateTracker& state_tracker);
|
explicit VKScheduler(const Device& device, StateTracker& state_tracker);
|
||||||
~VKScheduler();
|
~VKScheduler();
|
||||||
|
|
||||||
/// Returns the current command buffer tick.
|
/// Returns the current command buffer tick.
|
||||||
|
@ -179,7 +179,7 @@ private:
|
||||||
|
|
||||||
void AcquireNewChunk();
|
void AcquireNewChunk();
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
StateTracker& state_tracker;
|
StateTracker& state_tracker;
|
||||||
|
|
||||||
std::unique_ptr<MasterSemaphore> master_semaphore;
|
std::unique_ptr<MasterSemaphore> master_semaphore;
|
||||||
|
|
|
@ -274,7 +274,7 @@ bool IsPrecise(Operation operand) {
|
||||||
|
|
||||||
class SPIRVDecompiler final : public Sirit::Module {
|
class SPIRVDecompiler final : public Sirit::Module {
|
||||||
public:
|
public:
|
||||||
explicit SPIRVDecompiler(const VKDevice& device_, const ShaderIR& ir_, ShaderType stage_,
|
explicit SPIRVDecompiler(const Device& device_, const ShaderIR& ir_, ShaderType stage_,
|
||||||
const Registry& registry_, const Specialization& specialization_)
|
const Registry& registry_, const Specialization& specialization_)
|
||||||
: Module(0x00010300), device{device_}, ir{ir_}, stage{stage_}, header{ir_.GetHeader()},
|
: Module(0x00010300), device{device_}, ir{ir_}, stage{stage_}, header{ir_.GetHeader()},
|
||||||
registry{registry_}, specialization{specialization_} {
|
registry{registry_}, specialization{specialization_} {
|
||||||
|
@ -2742,7 +2742,7 @@ private:
|
||||||
};
|
};
|
||||||
static_assert(operation_decompilers.size() == static_cast<std::size_t>(OperationCode::Amount));
|
static_assert(operation_decompilers.size() == static_cast<std::size_t>(OperationCode::Amount));
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
const ShaderIR& ir;
|
const ShaderIR& ir;
|
||||||
const ShaderType stage;
|
const ShaderType stage;
|
||||||
const Tegra::Shader::Header header;
|
const Tegra::Shader::Header header;
|
||||||
|
@ -3130,7 +3130,7 @@ ShaderEntries GenerateShaderEntries(const VideoCommon::Shader::ShaderIR& ir) {
|
||||||
return entries;
|
return entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<u32> Decompile(const VKDevice& device, const VideoCommon::Shader::ShaderIR& ir,
|
std::vector<u32> Decompile(const Device& device, const VideoCommon::Shader::ShaderIR& ir,
|
||||||
ShaderType stage, const VideoCommon::Shader::Registry& registry,
|
ShaderType stage, const VideoCommon::Shader::Registry& registry,
|
||||||
const Specialization& specialization) {
|
const Specialization& specialization) {
|
||||||
return SPIRVDecompiler(device, ir, stage, registry, specialization).Assemble();
|
return SPIRVDecompiler(device, ir, stage, registry, specialization).Assemble();
|
||||||
|
|
|
@ -15,10 +15,8 @@
|
||||||
#include "video_core/shader/shader_ir.h"
|
#include "video_core/shader/shader_ir.h"
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
class VKDevice;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace Vulkan {
|
class Device;
|
||||||
|
|
||||||
using Maxwell = Tegra::Engines::Maxwell3D::Regs;
|
using Maxwell = Tegra::Engines::Maxwell3D::Regs;
|
||||||
using UniformTexelEntry = VideoCommon::Shader::SamplerEntry;
|
using UniformTexelEntry = VideoCommon::Shader::SamplerEntry;
|
||||||
|
@ -109,7 +107,7 @@ struct SPIRVShader {
|
||||||
|
|
||||||
ShaderEntries GenerateShaderEntries(const VideoCommon::Shader::ShaderIR& ir);
|
ShaderEntries GenerateShaderEntries(const VideoCommon::Shader::ShaderIR& ir);
|
||||||
|
|
||||||
std::vector<u32> Decompile(const VKDevice& device, const VideoCommon::Shader::ShaderIR& ir,
|
std::vector<u32> Decompile(const Device& device, const VideoCommon::Shader::ShaderIR& ir,
|
||||||
Tegra::Engines::ShaderType stage,
|
Tegra::Engines::ShaderType stage,
|
||||||
const VideoCommon::Shader::Registry& registry,
|
const VideoCommon::Shader::Registry& registry,
|
||||||
const Specialization& specialization);
|
const Specialization& specialization);
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
vk::ShaderModule BuildShader(const VKDevice& device, std::span<const u32> code) {
|
vk::ShaderModule BuildShader(const Device& device, std::span<const u32> code) {
|
||||||
return device.GetLogical().CreateShaderModule({
|
return device.GetLogical().CreateShaderModule({
|
||||||
.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
|
||||||
.pNext = nullptr,
|
.pNext = nullptr,
|
||||||
|
|
|
@ -11,8 +11,8 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
|
|
||||||
vk::ShaderModule BuildShader(const VKDevice& device, std::span<const u32> code);
|
vk::ShaderModule BuildShader(const Device& device, std::span<const u32> code);
|
||||||
|
|
||||||
} // namespace Vulkan
|
} // namespace Vulkan
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace Vulkan {
|
||||||
VKStagingBufferPool::StagingBuffer::StagingBuffer(std::unique_ptr<VKBuffer> buffer_)
|
VKStagingBufferPool::StagingBuffer::StagingBuffer(std::unique_ptr<VKBuffer> buffer_)
|
||||||
: buffer{std::move(buffer_)} {}
|
: buffer{std::move(buffer_)} {}
|
||||||
|
|
||||||
VKStagingBufferPool::VKStagingBufferPool(const VKDevice& device_, VKMemoryManager& memory_manager_,
|
VKStagingBufferPool::VKStagingBufferPool(const Device& device_, VKMemoryManager& memory_manager_,
|
||||||
VKScheduler& scheduler_)
|
VKScheduler& scheduler_)
|
||||||
: device{device_}, memory_manager{memory_manager_}, scheduler{scheduler_} {}
|
: device{device_}, memory_manager{memory_manager_}, scheduler{scheduler_} {}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
|
|
||||||
struct VKBuffer final {
|
struct VKBuffer final {
|
||||||
|
@ -24,7 +24,7 @@ struct VKBuffer final {
|
||||||
|
|
||||||
class VKStagingBufferPool final {
|
class VKStagingBufferPool final {
|
||||||
public:
|
public:
|
||||||
explicit VKStagingBufferPool(const VKDevice& device, VKMemoryManager& memory_manager,
|
explicit VKStagingBufferPool(const Device& device, VKMemoryManager& memory_manager,
|
||||||
VKScheduler& scheduler);
|
VKScheduler& scheduler);
|
||||||
~VKStagingBufferPool();
|
~VKStagingBufferPool();
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ private:
|
||||||
|
|
||||||
u64 ReleaseLevel(StagingBuffersCache& cache, std::size_t log2);
|
u64 ReleaseLevel(StagingBuffersCache& cache, std::size_t log2);
|
||||||
|
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKMemoryManager& memory_manager;
|
VKMemoryManager& memory_manager;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ u32 GetMemoryType(const VkPhysicalDeviceMemoryProperties& properties,
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
VKStreamBuffer::VKStreamBuffer(const VKDevice& device_, VKScheduler& scheduler_)
|
VKStreamBuffer::VKStreamBuffer(const Device& device_, VKScheduler& scheduler_)
|
||||||
: device{device_}, scheduler{scheduler_} {
|
: device{device_}, scheduler{scheduler_} {
|
||||||
CreateBuffers();
|
CreateBuffers();
|
||||||
ReserveWatches(current_watches, WATCHES_INITIAL_RESERVE);
|
ReserveWatches(current_watches, WATCHES_INITIAL_RESERVE);
|
||||||
|
|
|
@ -13,13 +13,13 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
class VKFenceWatch;
|
class VKFenceWatch;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
|
|
||||||
class VKStreamBuffer final {
|
class VKStreamBuffer final {
|
||||||
public:
|
public:
|
||||||
explicit VKStreamBuffer(const VKDevice& device, VKScheduler& scheduler);
|
explicit VKStreamBuffer(const Device& device, VKScheduler& scheduler);
|
||||||
~VKStreamBuffer();
|
~VKStreamBuffer();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -54,7 +54,7 @@ private:
|
||||||
|
|
||||||
void WaitPendingOperations(u64 requested_upper_bound);
|
void WaitPendingOperations(u64 requested_upper_bound);
|
||||||
|
|
||||||
const VKDevice& device; ///< Vulkan device manager.
|
const Device& device; ///< Vulkan device manager.
|
||||||
VKScheduler& scheduler; ///< Command scheduler.
|
VKScheduler& scheduler; ///< Command scheduler.
|
||||||
|
|
||||||
vk::Buffer buffer; ///< Mapped buffer.
|
vk::Buffer buffer; ///< Mapped buffer.
|
||||||
|
|
|
@ -56,7 +56,7 @@ VkExtent2D ChooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities, u32 wi
|
||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
VKSwapchain::VKSwapchain(VkSurfaceKHR surface_, const VKDevice& device_, VKScheduler& scheduler_)
|
VKSwapchain::VKSwapchain(VkSurfaceKHR surface_, const Device& device_, VKScheduler& scheduler_)
|
||||||
: surface{surface_}, device{device_}, scheduler{scheduler_} {}
|
: surface{surface_}, device{device_}, scheduler{scheduler_} {}
|
||||||
|
|
||||||
VKSwapchain::~VKSwapchain() = default;
|
VKSwapchain::~VKSwapchain() = default;
|
||||||
|
|
|
@ -15,12 +15,12 @@ struct FramebufferLayout;
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
|
|
||||||
class VKSwapchain {
|
class VKSwapchain {
|
||||||
public:
|
public:
|
||||||
explicit VKSwapchain(VkSurfaceKHR surface, const VKDevice& device, VKScheduler& scheduler);
|
explicit VKSwapchain(VkSurfaceKHR surface, const Device& device, VKScheduler& scheduler);
|
||||||
~VKSwapchain();
|
~VKSwapchain();
|
||||||
|
|
||||||
/// Creates (or recreates) the swapchain with a given size.
|
/// Creates (or recreates) the swapchain with a given size.
|
||||||
|
@ -73,7 +73,7 @@ private:
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|
||||||
const VkSurfaceKHR surface;
|
const VkSurfaceKHR surface;
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
|
|
||||||
vk::SwapchainKHR swapchain;
|
vk::SwapchainKHR swapchain;
|
||||||
|
|
|
@ -93,7 +93,7 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] VkImageCreateInfo MakeImageCreateInfo(const VKDevice& device, const ImageInfo& info) {
|
[[nodiscard]] VkImageCreateInfo MakeImageCreateInfo(const Device& device, const ImageInfo& info) {
|
||||||
const auto format_info = MaxwellToVK::SurfaceFormat(device, FormatType::Optimal, info.format);
|
const auto format_info = MaxwellToVK::SurfaceFormat(device, FormatType::Optimal, info.format);
|
||||||
VkImageCreateFlags flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
|
VkImageCreateFlags flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
|
||||||
if (info.type == ImageType::e2D && info.resources.layers >= 6 &&
|
if (info.type == ImageType::e2D && info.resources.layers >= 6 &&
|
||||||
|
@ -146,14 +146,14 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] vk::Image MakeImage(const VKDevice& device, const ImageInfo& info) {
|
[[nodiscard]] vk::Image MakeImage(const Device& device, const ImageInfo& info) {
|
||||||
if (info.type == ImageType::Buffer) {
|
if (info.type == ImageType::Buffer) {
|
||||||
return vk::Image{};
|
return vk::Image{};
|
||||||
}
|
}
|
||||||
return device.GetLogical().CreateImage(MakeImageCreateInfo(device, info));
|
return device.GetLogical().CreateImage(MakeImageCreateInfo(device, info));
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] vk::Buffer MakeBuffer(const VKDevice& device, const ImageInfo& info) {
|
[[nodiscard]] vk::Buffer MakeBuffer(const Device& device, const ImageInfo& info) {
|
||||||
if (info.type != ImageType::Buffer) {
|
if (info.type != ImageType::Buffer) {
|
||||||
return vk::Buffer{};
|
return vk::Buffer{};
|
||||||
}
|
}
|
||||||
|
@ -205,7 +205,7 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] VkAttachmentDescription AttachmentDescription(const VKDevice& device,
|
[[nodiscard]] VkAttachmentDescription AttachmentDescription(const Device& device,
|
||||||
const ImageView* image_view) {
|
const ImageView* image_view) {
|
||||||
const auto pixel_format = image_view->format;
|
const auto pixel_format = image_view->format;
|
||||||
return VkAttachmentDescription{
|
return VkAttachmentDescription{
|
||||||
|
|
|
@ -19,11 +19,11 @@ using VideoCommon::Offset2D;
|
||||||
using VideoCommon::RenderTargets;
|
using VideoCommon::RenderTargets;
|
||||||
using VideoCore::Surface::PixelFormat;
|
using VideoCore::Surface::PixelFormat;
|
||||||
|
|
||||||
class VKDevice;
|
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
class VKStagingBufferPool;
|
class VKStagingBufferPool;
|
||||||
|
|
||||||
class BlitImageHelper;
|
class BlitImageHelper;
|
||||||
|
class Device;
|
||||||
class Image;
|
class Image;
|
||||||
class ImageView;
|
class ImageView;
|
||||||
class Framebuffer;
|
class Framebuffer;
|
||||||
|
@ -68,7 +68,7 @@ struct ImageBufferMap {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TextureCacheRuntime {
|
struct TextureCacheRuntime {
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
VKMemoryManager& memory_manager;
|
VKMemoryManager& memory_manager;
|
||||||
VKStagingBufferPool& staging_buffer_pool;
|
VKStagingBufferPool& staging_buffer_pool;
|
||||||
|
@ -177,7 +177,7 @@ public:
|
||||||
private:
|
private:
|
||||||
[[nodiscard]] vk::ImageView MakeDepthStencilView(VkImageAspectFlags aspect_mask);
|
[[nodiscard]] vk::ImageView MakeDepthStencilView(VkImageAspectFlags aspect_mask);
|
||||||
|
|
||||||
const VKDevice* device = nullptr;
|
const Device* device = nullptr;
|
||||||
std::array<vk::ImageView, VideoCommon::NUM_IMAGE_VIEW_TYPES> image_views;
|
std::array<vk::ImageView, VideoCommon::NUM_IMAGE_VIEW_TYPES> image_views;
|
||||||
vk::ImageView depth_view;
|
vk::ImageView depth_view;
|
||||||
vk::ImageView stencil_view;
|
vk::ImageView stencil_view;
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
VKUpdateDescriptorQueue::VKUpdateDescriptorQueue(const VKDevice& device_, VKScheduler& scheduler_)
|
VKUpdateDescriptorQueue::VKUpdateDescriptorQueue(const Device& device_, VKScheduler& scheduler_)
|
||||||
: device{device_}, scheduler{scheduler_} {}
|
: device{device_}, scheduler{scheduler_} {}
|
||||||
|
|
||||||
VKUpdateDescriptorQueue::~VKUpdateDescriptorQueue() = default;
|
VKUpdateDescriptorQueue::~VKUpdateDescriptorQueue() = default;
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
namespace Vulkan {
|
namespace Vulkan {
|
||||||
|
|
||||||
class VKDevice;
|
class Device;
|
||||||
class VKScheduler;
|
class VKScheduler;
|
||||||
|
|
||||||
struct DescriptorUpdateEntry {
|
struct DescriptorUpdateEntry {
|
||||||
|
@ -31,7 +31,7 @@ struct DescriptorUpdateEntry {
|
||||||
|
|
||||||
class VKUpdateDescriptorQueue final {
|
class VKUpdateDescriptorQueue final {
|
||||||
public:
|
public:
|
||||||
explicit VKUpdateDescriptorQueue(const VKDevice& device_, VKScheduler& scheduler_);
|
explicit VKUpdateDescriptorQueue(const Device& device_, VKScheduler& scheduler_);
|
||||||
~VKUpdateDescriptorQueue();
|
~VKUpdateDescriptorQueue();
|
||||||
|
|
||||||
void TickFrame();
|
void TickFrame();
|
||||||
|
@ -69,7 +69,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const VKDevice& device;
|
const Device& device;
|
||||||
VKScheduler& scheduler;
|
VKScheduler& scheduler;
|
||||||
|
|
||||||
const DescriptorUpdateEntry* upload_start = nullptr;
|
const DescriptorUpdateEntry* upload_start = nullptr;
|
||||||
|
|
|
@ -134,7 +134,7 @@ void AsyncShaders::QueueOpenGLShader(const OpenGL::Device& device,
|
||||||
}
|
}
|
||||||
|
|
||||||
void AsyncShaders::QueueVulkanShader(Vulkan::VKPipelineCache* pp_cache,
|
void AsyncShaders::QueueVulkanShader(Vulkan::VKPipelineCache* pp_cache,
|
||||||
const Vulkan::VKDevice& device, Vulkan::VKScheduler& scheduler,
|
const Vulkan::Device& device, Vulkan::VKScheduler& scheduler,
|
||||||
Vulkan::VKDescriptorPool& descriptor_pool,
|
Vulkan::VKDescriptorPool& descriptor_pool,
|
||||||
Vulkan::VKUpdateDescriptorQueue& update_descriptor_queue,
|
Vulkan::VKUpdateDescriptorQueue& update_descriptor_queue,
|
||||||
std::vector<VkDescriptorSetLayoutBinding> bindings,
|
std::vector<VkDescriptorSetLayoutBinding> bindings,
|
||||||
|
|
|
@ -94,7 +94,7 @@ public:
|
||||||
CompilerSettings compiler_settings, const Registry& registry,
|
CompilerSettings compiler_settings, const Registry& registry,
|
||||||
VAddr cpu_addr);
|
VAddr cpu_addr);
|
||||||
|
|
||||||
void QueueVulkanShader(Vulkan::VKPipelineCache* pp_cache, const Vulkan::VKDevice& device,
|
void QueueVulkanShader(Vulkan::VKPipelineCache* pp_cache, const Vulkan::Device& device,
|
||||||
Vulkan::VKScheduler& scheduler,
|
Vulkan::VKScheduler& scheduler,
|
||||||
Vulkan::VKDescriptorPool& descriptor_pool,
|
Vulkan::VKDescriptorPool& descriptor_pool,
|
||||||
Vulkan::VKUpdateDescriptorQueue& update_descriptor_queue,
|
Vulkan::VKUpdateDescriptorQueue& update_descriptor_queue,
|
||||||
|
@ -123,7 +123,7 @@ private:
|
||||||
|
|
||||||
// For Vulkan
|
// For Vulkan
|
||||||
Vulkan::VKPipelineCache* pp_cache;
|
Vulkan::VKPipelineCache* pp_cache;
|
||||||
const Vulkan::VKDevice* vk_device;
|
const Vulkan::Device* vk_device;
|
||||||
Vulkan::VKScheduler* scheduler;
|
Vulkan::VKScheduler* scheduler;
|
||||||
Vulkan::VKDescriptorPool* descriptor_pool;
|
Vulkan::VKDescriptorPool* descriptor_pool;
|
||||||
Vulkan::VKUpdateDescriptorQueue* update_descriptor_queue;
|
Vulkan::VKUpdateDescriptorQueue* update_descriptor_queue;
|
||||||
|
|
Loading…
Reference in a new issue