mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-03-26 20:58:32 -06:00
renderer_vulkan: Force subgroup size to 64 when possible (#4111)
This commit is contained in:
parent
e16ba06ab0
commit
df6bb8562e
@ -21,7 +21,11 @@ ComputePipeline::ComputePipeline(const Instance& instance, Scheduler& scheduler,
|
||||
info = &info_;
|
||||
const auto debug_str = GetDebugString();
|
||||
|
||||
const vk::PipelineShaderStageRequiredSubgroupSizeCreateInfo subgroup_size_ci = {
|
||||
.requiredSubgroupSize = 64,
|
||||
};
|
||||
const vk::PipelineShaderStageCreateInfo shader_ci = {
|
||||
.pNext = instance.IsSubgroupSize64Supported() ? &subgroup_size_ci : nullptr,
|
||||
.stage = vk::ShaderStageFlagBits::eCompute,
|
||||
.module = module,
|
||||
.pName = "main",
|
||||
|
||||
@ -220,9 +220,11 @@ bool Instance::CreateDevice() {
|
||||
|
||||
const vk::StructureChain properties_chain = physical_device.getProperties2<
|
||||
vk::PhysicalDeviceProperties2, vk::PhysicalDeviceVulkan11Properties,
|
||||
vk::PhysicalDeviceVulkan12Properties, vk::PhysicalDevicePushDescriptorPropertiesKHR>();
|
||||
vk::PhysicalDeviceVulkan12Properties, vk::PhysicalDeviceVulkan13Properties,
|
||||
vk::PhysicalDevicePushDescriptorPropertiesKHR>();
|
||||
vk11_props = properties_chain.get<vk::PhysicalDeviceVulkan11Properties>();
|
||||
vk12_props = properties_chain.get<vk::PhysicalDeviceVulkan12Properties>();
|
||||
vk13_props = properties_chain.get<vk::PhysicalDeviceVulkan13Properties>();
|
||||
push_descriptor_props = properties_chain.get<vk::PhysicalDevicePushDescriptorPropertiesKHR>();
|
||||
LOG_INFO(Render_Vulkan, "Physical device subgroup size {}", vk11_props.subgroupSize);
|
||||
|
||||
@ -367,7 +369,7 @@ bool Instance::CreateDevice() {
|
||||
feature_chain.get<vk::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>();
|
||||
const auto vk11_features = feature_chain.get<vk::PhysicalDeviceVulkan11Features>();
|
||||
vk12_features = feature_chain.get<vk::PhysicalDeviceVulkan12Features>();
|
||||
const auto vk13_features = feature_chain.get<vk::PhysicalDeviceVulkan13Features>();
|
||||
vk13_features = feature_chain.get<vk::PhysicalDeviceVulkan13Features>();
|
||||
vk::StructureChain device_chain = {
|
||||
vk::DeviceCreateInfo{
|
||||
.queueCreateInfoCount = 1u,
|
||||
@ -429,6 +431,7 @@ bool Instance::CreateDevice() {
|
||||
vk::PhysicalDeviceVulkan13Features{
|
||||
.robustImageAccess = vk13_features.robustImageAccess,
|
||||
.shaderDemoteToHelperInvocation = vk13_features.shaderDemoteToHelperInvocation,
|
||||
.subgroupSizeControl = vk13_features.subgroupSizeControl,
|
||||
.synchronization2 = vk13_features.synchronization2,
|
||||
.dynamicRendering = vk13_features.dynamicRendering,
|
||||
.maintenance4 = vk13_features.maintenance4,
|
||||
|
||||
@ -233,6 +233,11 @@ public:
|
||||
return vk12_features.shaderSharedInt64Atomics;
|
||||
}
|
||||
|
||||
/// Returns true if the subgroup size can be set to match guest subgroup size
|
||||
bool IsSubgroupSize64Supported() const {
|
||||
return vk13_features.subgroupSizeControl && vk13_props.maxSubgroupSize >= 64;
|
||||
}
|
||||
|
||||
/// Returns true when VK_KHR_workgroup_memory_explicit_layout is supported.
|
||||
bool IsWorkgroupMemoryExplicitLayoutSupported() const {
|
||||
return workgroup_memory_explicit_layout &&
|
||||
@ -455,9 +460,11 @@ private:
|
||||
vk::PhysicalDeviceMemoryProperties memory_properties;
|
||||
vk::PhysicalDeviceVulkan11Properties vk11_props;
|
||||
vk::PhysicalDeviceVulkan12Properties vk12_props;
|
||||
vk::PhysicalDeviceVulkan13Properties vk13_props;
|
||||
vk::PhysicalDevicePushDescriptorPropertiesKHR push_descriptor_props;
|
||||
vk::PhysicalDeviceFeatures features;
|
||||
vk::PhysicalDeviceVulkan12Features vk12_features;
|
||||
vk::PhysicalDeviceVulkan13Features vk13_features;
|
||||
vk::PhysicalDevicePortabilitySubsetFeaturesKHR portability_features;
|
||||
vk::PhysicalDeviceExtendedDynamicState3FeaturesEXT dynamic_state_3_features;
|
||||
vk::PhysicalDeviceRobustness2FeaturesEXT robustness2_features;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user