Remove some dead accesors

This commit is contained in:
CamilleLaVey
2026-09-18 01:18:03 -04:00
parent 10528f1ceb
commit 17adc28b2c
8 changed files with 61 additions and 73 deletions
@@ -70,12 +70,14 @@ VkSamplerAddressMode WrapMode(const Device& device,
} }
ASSERT(false); ASSERT(false);
return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
case Tegra::Texture::WrapMode::MirrorOnceClampToEdge:
return VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE;
case Tegra::Texture::WrapMode::MirrorOnceBorder: case Tegra::Texture::WrapMode::MirrorOnceBorder:
UNIMPLEMENTED(); UNIMPLEMENTED();
return VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; [[fallthrough]];
case Tegra::Texture::WrapMode::MirrorOnceClampToEdge:
case Tegra::Texture::WrapMode::MirrorOnceClampOGL: case Tegra::Texture::WrapMode::MirrorOnceClampOGL:
if (!device.IsKhrSamplerMirrorClampToEdgeSupported()) {
return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
}
return VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE; return VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE;
default: default:
UNIMPLEMENTED_MSG("Unimplemented wrap mode={}", wrap_mode); UNIMPLEMENTED_MSG("Unimplemented wrap mode={}", wrap_mode);
@@ -740,7 +740,7 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
.vertexBindingDivisorCount = static_cast<u32>(vertex_binding_divisors.size()), .vertexBindingDivisorCount = static_cast<u32>(vertex_binding_divisors.size()),
.pVertexBindingDivisors = vertex_binding_divisors.data(), .pVertexBindingDivisors = vertex_binding_divisors.data(),
}; };
if (!vertex_binding_divisors.empty()) { if (!vertex_binding_divisors.empty() && device.IsExtVertexAttributeDivisorSupported()) {
vertex_input_ci.pNext = &input_divisor_ci; vertex_input_ci.pNext = &input_divisor_ci;
} }
const bool has_tess_stages = spv_modules[1] || spv_modules[2]; const bool has_tess_stages = spv_modules[1] || spv_modules[2];
@@ -32,8 +32,6 @@ MultiRangeBufferCache::MultiRangeBufferCache(const Device& device) {
VkDeviceSize MultiRangeBufferCache::QueryBlockSize(const Device& device, VkDeviceSize MultiRangeBufferCache::QueryBlockSize(const Device& device,
u32& memory_type_bits) const { u32& memory_type_bits) const {
const VkDevice logical = *device.GetLogical();
const auto& dld = device.GetDispatchLoader();
const VkBufferCreateInfo probe_ci{ const VkBufferCreateInfo probe_ci{
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
.pNext = nullptr, .pNext = nullptr,
@@ -44,6 +42,14 @@ VkDeviceSize MultiRangeBufferCache::QueryBlockSize(const Device& device,
.queueFamilyIndexCount = 0, .queueFamilyIndexCount = 0,
.pQueueFamilyIndices = nullptr, .pQueueFamilyIndices = nullptr,
}; };
if (device.IsKhrMaintenance4Supported()) {
const VkMemoryRequirements reqs =
device.GetLogical().GetDeviceBufferMemoryRequirements(probe_ci);
memory_type_bits = reqs.memoryTypeBits;
return reqs.alignment;
}
const VkDevice logical = *device.GetLogical();
const auto& dld = device.GetDispatchLoader();
VkBuffer probe{}; VkBuffer probe{};
if (dld.vkCreateBuffer(logical, &probe_ci, nullptr, &probe) != VK_SUCCESS) { if (dld.vkCreateBuffer(logical, &probe_ci, nullptr, &probe) != VK_SUCCESS) {
return 0; return 0;
@@ -326,6 +326,9 @@ void RasterizerVulkan::DrawIndirect() {
return; return;
} }
if (params.include_count) { if (params.include_count) {
if (!device.IsDrawIndirectCountSupported()) {
return;
}
const auto count = buffer_cache.GetDrawIndirectCount(); const auto count = buffer_cache.GetDrawIndirectCount();
const auto& draw_buffer = count.first; const auto& draw_buffer = count.first;
const auto& offset_base = count.second; const auto& offset_base = count.second;
+2 -24
View File
@@ -949,6 +949,8 @@ bool Device::GetSuitability(bool requires_swapchain) {
extensions.depth_stencil_resolve = extensions.depth_stencil_resolve =
extensions.depth_stencil_resolve && extensions.depth_stencil_resolve &&
(instance_version >= VK_API_VERSION_1_2 || extensions.create_renderpass2); (instance_version >= VK_API_VERSION_1_2 || extensions.create_renderpass2);
extensions.draw_indirect_count =
extensions.draw_indirect_count || instance_version >= VK_API_VERSION_1_2;
RemoveExtensionIfUnsuitable(extensions.depth_stencil_resolve, RemoveExtensionIfUnsuitable(extensions.depth_stencil_resolve,
VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME); VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME);
@@ -1408,18 +1410,6 @@ void Device::RemoveUnsuitableExtensions() {
features.workgroup_memory_explicit_layout, features.workgroup_memory_explicit_layout,
VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME); VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME);
// VK_KHR_maintenance1
extensions.maintenance1 = loaded_extensions.contains(VK_KHR_MAINTENANCE_1_EXTENSION_NAME);
RemoveExtensionIfUnsuitable(extensions.maintenance1, VK_KHR_MAINTENANCE_1_EXTENSION_NAME);
// VK_KHR_maintenance2
extensions.maintenance2 = loaded_extensions.contains(VK_KHR_MAINTENANCE_2_EXTENSION_NAME);
RemoveExtensionIfUnsuitable(extensions.maintenance2, VK_KHR_MAINTENANCE_2_EXTENSION_NAME);
// VK_KHR_maintenance3
extensions.maintenance3 = loaded_extensions.contains(VK_KHR_MAINTENANCE_3_EXTENSION_NAME);
RemoveExtensionIfUnsuitable(extensions.maintenance3, VK_KHR_MAINTENANCE_3_EXTENSION_NAME);
// VK_KHR_maintenance4 // VK_KHR_maintenance4
extensions.maintenance4 = features.maintenance4.maintenance4; extensions.maintenance4 = features.maintenance4.maintenance4;
RemoveExtensionFeatureIfUnsuitable(extensions.maintenance4, features.maintenance4, RemoveExtensionFeatureIfUnsuitable(extensions.maintenance4, features.maintenance4,
@@ -1430,18 +1420,6 @@ void Device::RemoveUnsuitableExtensions() {
RemoveExtensionFeatureIfUnsuitable(extensions.maintenance5, features.maintenance5, RemoveExtensionFeatureIfUnsuitable(extensions.maintenance5, features.maintenance5,
VK_KHR_MAINTENANCE_5_EXTENSION_NAME); VK_KHR_MAINTENANCE_5_EXTENSION_NAME);
// VK_KHR_maintenance6
extensions.maintenance6 = features.maintenance6.maintenance6;
RemoveExtensionFeatureIfUnsuitable(extensions.maintenance6, features.maintenance6,
VK_KHR_MAINTENANCE_6_EXTENSION_NAME);
// VK_KHR_maintenance7
extensions.maintenance7 = loaded_extensions.contains(VK_KHR_MAINTENANCE_7_EXTENSION_NAME);
RemoveExtensionIfUnsuitable(extensions.maintenance7, VK_KHR_MAINTENANCE_7_EXTENSION_NAME);
// VK_KHR_maintenance8
extensions.maintenance8 = loaded_extensions.contains(VK_KHR_MAINTENANCE_8_EXTENSION_NAME);
RemoveExtensionIfUnsuitable(extensions.maintenance8, VK_KHR_MAINTENANCE_8_EXTENSION_NAME);
// VK_KHR_synchronization2 // VK_KHR_synchronization2
extensions.synchronization2 = features.synchronization2.synchronization2; extensions.synchronization2 = features.synchronization2.synchronization2;
+16 -43
View File
@@ -72,7 +72,6 @@ VK_DEFINE_HANDLE(VmaAllocator)
FEATURE(EXT, TransformFeedback, TRANSFORM_FEEDBACK, transform_feedback) \ FEATURE(EXT, TransformFeedback, TRANSFORM_FEEDBACK, transform_feedback) \
FEATURE(EXT, VertexInputDynamicState, VERTEX_INPUT_DYNAMIC_STATE, vertex_input_dynamic_state) \ FEATURE(EXT, VertexInputDynamicState, VERTEX_INPUT_DYNAMIC_STATE, vertex_input_dynamic_state) \
FEATURE(KHR, Maintenance5, MAINTENANCE_5, maintenance5) \ FEATURE(KHR, Maintenance5, MAINTENANCE_5, maintenance5) \
FEATURE(KHR, Maintenance6, MAINTENANCE_6, maintenance6) \
FEATURE(KHR, PipelineExecutableProperties, PIPELINE_EXECUTABLE_PROPERTIES, \ FEATURE(KHR, PipelineExecutableProperties, PIPELINE_EXECUTABLE_PROPERTIES, \
pipeline_executable_properties) \ pipeline_executable_properties) \
FEATURE(KHR, ShaderQuadControl, SHADER_QUAD_CONTROL, shader_quad_control) \ FEATURE(KHR, ShaderQuadControl, SHADER_QUAD_CONTROL, shader_quad_control) \
@@ -104,17 +103,11 @@ VK_DEFINE_HANDLE(VmaAllocator)
EXTENSION(KHR, SWAPCHAIN, swapchain) \ EXTENSION(KHR, SWAPCHAIN, swapchain) \
EXTENSION(KHR, SWAPCHAIN_MUTABLE_FORMAT, swapchain_mutable_format) \ EXTENSION(KHR, SWAPCHAIN_MUTABLE_FORMAT, swapchain_mutable_format) \
EXTENSION(KHR, IMAGE_FORMAT_LIST, image_format_list) \ EXTENSION(KHR, IMAGE_FORMAT_LIST, image_format_list) \
EXTENSION(KHR, MAINTENANCE_1, maintenance1) \
EXTENSION(KHR, MAINTENANCE_2, maintenance2) \
EXTENSION(KHR, MAINTENANCE_3, maintenance3) \
EXTENSION(KHR, MAINTENANCE_7, maintenance7) \
EXTENSION(KHR, MAINTENANCE_8, maintenance8) \
EXTENSION(NV, DEVICE_DIAGNOSTICS_CONFIG, device_diagnostics_config) \ EXTENSION(NV, DEVICE_DIAGNOSTICS_CONFIG, device_diagnostics_config) \
EXTENSION(NV, GEOMETRY_SHADER_PASSTHROUGH, geometry_shader_passthrough) \ EXTENSION(NV, GEOMETRY_SHADER_PASSTHROUGH, geometry_shader_passthrough) \
EXTENSION(NV, VIEWPORT_ARRAY2, viewport_array2) \ EXTENSION(NV, VIEWPORT_ARRAY2, viewport_array2) \
EXTENSION(NV, VIEWPORT_SWIZZLE, viewport_swizzle) \ EXTENSION(NV, VIEWPORT_SWIZZLE, viewport_swizzle) \
EXTENSION(EXT, FILTER_CUBIC, filter_cubic) \ EXTENSION(EXT, FILTER_CUBIC, filter_cubic) \
EXTENSION(IMG, FILTER_CUBIC, filter_cubic_img) \
EXTENSION(QCOM, FILTER_CUBIC_WEIGHTS, filter_cubic_weights) EXTENSION(QCOM, FILTER_CUBIC_WEIGHTS, filter_cubic_weights)
// Define extensions which must be supported. // Define extensions which must be supported.
@@ -549,11 +542,6 @@ FN_MAX_LIMIT_LIST
return extensions.geometry_shader_passthrough; return extensions.geometry_shader_passthrough;
} }
/// Returns true if the device supports VK_KHR_uniform_buffer_standard_layout.
bool IsKhrUniformBufferStandardLayoutSupported() const {
return extensions.uniform_buffer_standard_layout;
}
/// Returns true if the device supports VK_KHR_push_descriptor. /// Returns true if the device supports VK_KHR_push_descriptor.
bool IsKhrPushDescriptorSupported() const { bool IsKhrPushDescriptorSupported() const {
return extensions.push_descriptor; return extensions.push_descriptor;
@@ -1004,27 +992,27 @@ FN_MAX_LIMIT_LIST
return features2.features.multiViewport; return features2.features.multiViewport;
} }
/// Returns true if the device supports VK_KHR_maintenance1. /// Returns true if the device supports VK_KHR_maintenance5.
bool IsKhrMaintenance1Supported() const {
return extensions.maintenance1;
}
/// Returns true if the device supports VK_KHR_maintenance2.
bool IsKhrMaintenance2Supported() const {
return extensions.maintenance2;
}
/// Returns true if the device supports VK_KHR_maintenance3.
bool IsKhrMaintenance3Supported() const {
return extensions.maintenance3;
}
/// Returns true if the device supports VK_KHR_maintenance4. /// Returns true if the device supports VK_KHR_maintenance4.
bool IsKhrMaintenance4Supported() const { bool IsKhrMaintenance4Supported() const {
return extensions.maintenance4; return extensions.maintenance4;
} }
/// Returns true if the device supports VK_KHR_maintenance5. /// Returns true if the device can read the draw count from a buffer.
bool IsDrawIndirectCountSupported() const {
return extensions.draw_indirect_count;
}
/// Returns true if the device supports VK_EXT_vertex_attribute_divisor.
bool IsExtVertexAttributeDivisorSupported() const {
return extensions.vertex_attribute_divisor;
}
/// Returns true if the device supports VK_KHR_sampler_mirror_clamp_to_edge.
bool IsKhrSamplerMirrorClampToEdgeSupported() const {
return extensions.sampler_mirror_clamp_to_edge;
}
bool IsKhrMaintenance5Supported() const { bool IsKhrMaintenance5Supported() const {
return extensions.maintenance5; return extensions.maintenance5;
} }
@@ -1046,21 +1034,6 @@ FN_MAX_LIMIT_LIST
properties.maintenance5.earlyFragmentSampleMaskTestBeforeSampleCounting; properties.maintenance5.earlyFragmentSampleMaskTestBeforeSampleCounting;
} }
/// Returns true if the device supports VK_KHR_maintenance6.
bool IsKhrMaintenance6Supported() const {
return extensions.maintenance6;
}
/// Returns true if the device supports VK_KHR_maintenance7.
bool IsKhrMaintenance7Supported() const {
return extensions.maintenance7;
}
/// Returns true if the device supports VK_KHR_maintenance8.
bool IsKhrMaintenance8Supported() const {
return extensions.maintenance8;
}
/// Returns true if the device supports UINT8 index buffer conversion via compute shader. /// Returns true if the device supports UINT8 index buffer conversion via compute shader.
bool SupportsUint8Indices() const { bool SupportsUint8Indices() const {
return features.bit8_storage.storageBuffer8BitAccess && return features.bit8_storage.storageBuffer8BitAccess &&
@@ -216,6 +216,7 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
X(vkFreeDescriptorSets); X(vkFreeDescriptorSets);
X(vkFreeMemory); X(vkFreeMemory);
X(vkGetBufferMemoryRequirements2); X(vkGetBufferMemoryRequirements2);
X(vkGetDeviceBufferMemoryRequirements);
X(vkGetDeviceQueue); X(vkGetDeviceQueue);
X(vkGetEventStatus); X(vkGetEventStatus);
X(vkGetFenceStatus); X(vkGetFenceStatus);
@@ -266,6 +267,12 @@ void Load(VkDevice device, DeviceDispatch& dld) noexcept {
Proc(dld.vkCmdDrawIndexedIndirectCount, dld, "vkCmdDrawIndexedIndirectCountKHR", device); Proc(dld.vkCmdDrawIndexedIndirectCount, dld, "vkCmdDrawIndexedIndirectCountKHR", device);
} }
// Maintenance4 queries are core in Vulkan 1.3, otherwise require VK_KHR_maintenance4
if (!dld.vkGetDeviceBufferMemoryRequirements) {
Proc(dld.vkGetDeviceBufferMemoryRequirements, dld,
"vkGetDeviceBufferMemoryRequirementsKHR", device);
}
// Synchronization2 is core in Vulkan 1.3, otherwise requires VK_KHR_synchronization2 // Synchronization2 is core in Vulkan 1.3, otherwise requires VK_KHR_synchronization2
if (!dld.vkCmdPipelineBarrier2) { if (!dld.vkCmdPipelineBarrier2) {
Proc(dld.vkCmdPipelineBarrier2, dld, "vkCmdPipelineBarrier2KHR", device); Proc(dld.vkCmdPipelineBarrier2, dld, "vkCmdPipelineBarrier2KHR", device);
@@ -874,6 +881,22 @@ VkMemoryRequirements Device::GetBufferMemoryRequirements(VkBuffer buffer,
return requirements.memoryRequirements; return requirements.memoryRequirements;
} }
VkMemoryRequirements Device::GetDeviceBufferMemoryRequirements(
const VkBufferCreateInfo& ci) const noexcept {
const VkDeviceBufferMemoryRequirements info{
.sType = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS,
.pNext = nullptr,
.pCreateInfo = &ci,
};
VkMemoryRequirements2 requirements{
.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
.pNext = nullptr,
.memoryRequirements{},
};
dld->vkGetDeviceBufferMemoryRequirements(handle, &info, &requirements);
return requirements.memoryRequirements;
}
VkMemoryRequirements Device::GetImageMemoryRequirements(VkImage image) const noexcept { VkMemoryRequirements Device::GetImageMemoryRequirements(VkImage image) const noexcept {
VkMemoryRequirements requirements; VkMemoryRequirements requirements;
dld->vkGetImageMemoryRequirements(handle, image, &requirements); dld->vkGetImageMemoryRequirements(handle, image, &requirements);
@@ -332,6 +332,7 @@ struct DeviceDispatch : InstanceDispatch {
PFN_vkFreeDescriptorSets vkFreeDescriptorSets{}; PFN_vkFreeDescriptorSets vkFreeDescriptorSets{};
PFN_vkFreeMemory vkFreeMemory{}; PFN_vkFreeMemory vkFreeMemory{};
PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2{}; PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2{};
PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements{};
PFN_vkGetDeviceQueue vkGetDeviceQueue{}; PFN_vkGetDeviceQueue vkGetDeviceQueue{};
PFN_vkGetEventStatus vkGetEventStatus{}; PFN_vkGetEventStatus vkGetEventStatus{};
PFN_vkGetFenceStatus vkGetFenceStatus{}; PFN_vkGetFenceStatus vkGetFenceStatus{};
@@ -1105,6 +1106,8 @@ public:
VkMemoryRequirements GetBufferMemoryRequirements(VkBuffer buffer, VkMemoryRequirements GetBufferMemoryRequirements(VkBuffer buffer,
void* pnext = nullptr) const noexcept; void* pnext = nullptr) const noexcept;
VkMemoryRequirements GetDeviceBufferMemoryRequirements(const VkBufferCreateInfo& ci) const noexcept;
VkMemoryRequirements GetImageMemoryRequirements(VkImage image) const noexcept; VkMemoryRequirements GetImageMemoryRequirements(VkImage image) const noexcept;
std::vector<VkPipelineExecutablePropertiesKHR> GetPipelineExecutablePropertiesKHR( std::vector<VkPipelineExecutablePropertiesKHR> GetPipelineExecutablePropertiesKHR(