mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-05-26 13:50:37 +00:00
Enable VK_EXT_image_2d_view_of_3d and create 2D view compatible images if supported (#4397)
This commit is contained in:
committed by
GitHub
parent
89b886348e
commit
b3bb383982
@@ -203,7 +203,8 @@ bool Instance::CreateDevice() {
|
||||
vk::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT,
|
||||
vk::PhysicalDevicePortabilitySubsetFeaturesKHR,
|
||||
vk::PhysicalDeviceShaderAtomicFloat2FeaturesEXT,
|
||||
vk::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>();
|
||||
vk::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR,
|
||||
vk::PhysicalDeviceImage2DViewOf3DFeaturesEXT>();
|
||||
features = feature_chain.get().features;
|
||||
|
||||
const vk::StructureChain properties_chain = physical_device.getProperties2<
|
||||
@@ -313,6 +314,15 @@ bool Instance::CreateDevice() {
|
||||
Render_Vulkan, "- workgroupMemoryExplicitLayout16BitAccess: {}",
|
||||
workgroup_memory_explicit_layout_features.workgroupMemoryExplicitLayout16BitAccess);
|
||||
}
|
||||
image_2d_view_of_3d = add_extension(VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME);
|
||||
if (image_2d_view_of_3d) {
|
||||
image_2d_view_of_3d_features =
|
||||
feature_chain.get<vk::PhysicalDeviceImage2DViewOf3DFeaturesEXT>();
|
||||
LOG_INFO(Render_Vulkan, "- image2DViewOf3D: {}",
|
||||
image_2d_view_of_3d_features.image2DViewOf3D);
|
||||
LOG_INFO(Render_Vulkan, "- sampler2DViewOf3D: {}",
|
||||
image_2d_view_of_3d_features.sampler2DViewOf3D);
|
||||
}
|
||||
const bool calibrated_timestamps =
|
||||
TRACY_GPU_ENABLED ? add_extension(VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME) : false;
|
||||
|
||||
@@ -490,6 +500,10 @@ bool Instance::CreateDevice() {
|
||||
.workgroupMemoryExplicitLayout16BitAccess =
|
||||
workgroup_memory_explicit_layout_features.workgroupMemoryExplicitLayout16BitAccess,
|
||||
},
|
||||
vk::PhysicalDeviceImage2DViewOf3DFeaturesEXT{
|
||||
.image2DViewOf3D = image_2d_view_of_3d_features.image2DViewOf3D,
|
||||
.sampler2DViewOf3D = image_2d_view_of_3d_features.sampler2DViewOf3D,
|
||||
},
|
||||
#ifdef __APPLE__
|
||||
vk::PhysicalDevicePortabilitySubsetFeaturesKHR{
|
||||
.constantAlphaColorBlendFactors = portability_features.constantAlphaColorBlendFactors,
|
||||
@@ -556,6 +570,9 @@ bool Instance::CreateDevice() {
|
||||
if (!workgroup_memory_explicit_layout) {
|
||||
device_chain.unlink<vk::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>();
|
||||
}
|
||||
if (!image_2d_view_of_3d) {
|
||||
device_chain.unlink<vk::PhysicalDeviceImage2DViewOf3DFeaturesEXT>();
|
||||
}
|
||||
|
||||
auto [device_result, dev] = physical_device.createDeviceUnique(device_chain.get());
|
||||
if (device_result != vk::Result::eSuccess) {
|
||||
|
||||
@@ -427,6 +427,12 @@ public:
|
||||
return supports_block_texel_view;
|
||||
}
|
||||
|
||||
/// Returns whether VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT is supported on 3D images
|
||||
bool Is2dViewOf3dSupported() const {
|
||||
return image_2d_view_of_3d && image_2d_view_of_3d_features.image2DViewOf3D &&
|
||||
image_2d_view_of_3d_features.sampler2DViewOf3D;
|
||||
}
|
||||
|
||||
/// Returns whether the device can report memory usage.
|
||||
bool CanReportMemoryUsage() const {
|
||||
return supports_memory_budget;
|
||||
@@ -478,6 +484,7 @@ private:
|
||||
vk::PhysicalDeviceShaderAtomicFloat2FeaturesEXT shader_atomic_float2_features;
|
||||
vk::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
|
||||
workgroup_memory_explicit_layout_features;
|
||||
vk::PhysicalDeviceImage2DViewOf3DFeaturesEXT image_2d_view_of_3d_features;
|
||||
vk::DriverIdKHR driver_id;
|
||||
vk::UniqueDebugUtilsMessengerEXT debug_callback{};
|
||||
std::string vendor_name;
|
||||
@@ -513,6 +520,7 @@ private:
|
||||
bool portability_subset{};
|
||||
bool maintenance_8{};
|
||||
bool attachment_feedback_loop{};
|
||||
bool image_2d_view_of_3d{};
|
||||
bool supports_memory_budget{};
|
||||
bool supports_block_texel_view{};
|
||||
u64 total_memory_budget{};
|
||||
|
||||
@@ -126,6 +126,9 @@ Image::Image(const Vulkan::Instance& instance_, Vulkan::Scheduler& scheduler_,
|
||||
vk::ImageCreateFlagBits::eExtendedUsage};
|
||||
if (info.props.is_volume) {
|
||||
flags |= vk::ImageCreateFlagBits::e2DArrayCompatible;
|
||||
if (instance->Is2dViewOf3dSupported()) {
|
||||
flags |= vk::ImageCreateFlagBits::e2DViewCompatibleEXT;
|
||||
}
|
||||
}
|
||||
if (info.props.is_block && instance->IsBlockTexelViewSupported()) {
|
||||
flags |= vk::ImageCreateFlagBits::eBlockTexelViewCompatible;
|
||||
|
||||
Reference in New Issue
Block a user