mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-09 22:58:54 +02:00
[vulkan] Adjusted VK_EXT_Custom_Border_Color implementation
This commit is contained in:
parent
adb8ecfec5
commit
b20773db0e
2 changed files with 9 additions and 23 deletions
|
|
@ -2300,23 +2300,18 @@ vk::ImageView ImageView::MakeView(VkFormat vk_format, VkImageAspectFlags aspect_
|
||||||
|
|
||||||
Sampler::Sampler(TextureCacheRuntime& runtime, const Tegra::Texture::TSCEntry& tsc) {
|
Sampler::Sampler(TextureCacheRuntime& runtime, const Tegra::Texture::TSCEntry& tsc) {
|
||||||
const auto& device = runtime.device;
|
const auto& device = runtime.device;
|
||||||
// Check if custom border colors are supported
|
const bool has_custom_border_extension = runtime.device.IsExtCustomBorderColorSupported();
|
||||||
const bool has_custom_border_colors = runtime.device.IsCustomBorderColorsSupported();
|
const bool has_format_undefined =
|
||||||
const bool has_format_undefined = runtime.device.IsCustomBorderColorWithoutFormatSupported();
|
has_custom_border_extension && runtime.device.IsCustomBorderColorWithoutFormatSupported();
|
||||||
|
const bool has_custom_border_colors =
|
||||||
|
has_format_undefined && runtime.device.IsCustomBorderColorsSupported();
|
||||||
const auto color = tsc.BorderColor();
|
const auto color = tsc.BorderColor();
|
||||||
|
|
||||||
// Determine border format based on available features:
|
|
||||||
// - If customBorderColorWithoutFormat is available: use VK_FORMAT_UNDEFINED (most flexible)
|
|
||||||
// - If only customBorderColors is available: use concrete format (R8G8B8A8_UNORM)
|
|
||||||
// - If neither is available: use standard border colors (handled by ConvertBorderColor)
|
|
||||||
const VkFormat border_format = has_format_undefined ? VK_FORMAT_UNDEFINED
|
|
||||||
: VK_FORMAT_R8G8B8A8_UNORM;
|
|
||||||
|
|
||||||
const VkSamplerCustomBorderColorCreateInfoEXT border_ci{
|
const VkSamplerCustomBorderColorCreateInfoEXT border_ci{
|
||||||
.sType = VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT,
|
.sType = VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT,
|
||||||
.pNext = nullptr,
|
.pNext = nullptr,
|
||||||
.customBorderColor = std::bit_cast<VkClearColorValue>(color),
|
.customBorderColor = std::bit_cast<VkClearColorValue>(color),
|
||||||
.format = border_format,
|
.format = VK_FORMAT_UNDEFINED,
|
||||||
};
|
};
|
||||||
const void* pnext = nullptr;
|
const void* pnext = nullptr;
|
||||||
if (has_custom_border_colors) {
|
if (has_custom_border_colors) {
|
||||||
|
|
|
||||||
|
|
@ -1131,8 +1131,6 @@ bool Device::GetSuitability(bool requires_swapchain) {
|
||||||
|
|
||||||
if (u32(Settings::values.dyna_state.GetValue()) == 0) {
|
if (u32(Settings::values.dyna_state.GetValue()) == 0) {
|
||||||
LOG_INFO(Render_Vulkan, "Extended Dynamic State disabled by user setting, clearing all EDS features");
|
LOG_INFO(Render_Vulkan, "Extended Dynamic State disabled by user setting, clearing all EDS features");
|
||||||
features.custom_border_color.customBorderColors = false;
|
|
||||||
features.custom_border_color.customBorderColorWithoutFormat = false;
|
|
||||||
features.extended_dynamic_state.extendedDynamicState = false;
|
features.extended_dynamic_state.extendedDynamicState = false;
|
||||||
features.extended_dynamic_state2.extendedDynamicState2 = false;
|
features.extended_dynamic_state2.extendedDynamicState2 = false;
|
||||||
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false;
|
features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false;
|
||||||
|
|
@ -1148,17 +1146,10 @@ bool Device::GetSuitability(bool requires_swapchain) {
|
||||||
|
|
||||||
void Device::RemoveUnsuitableExtensions() {
|
void Device::RemoveUnsuitableExtensions() {
|
||||||
// VK_EXT_custom_border_color
|
// VK_EXT_custom_border_color
|
||||||
// Enable extension if driver supports it, then check individual features
|
|
||||||
// - customBorderColors: Required to use VK_BORDER_COLOR_FLOAT_CUSTOM_EXT
|
|
||||||
// - customBorderColorWithoutFormat: Optional, allows VK_FORMAT_UNDEFINED
|
|
||||||
// If only customBorderColors is available, we must provide a specific format
|
|
||||||
if (extensions.custom_border_color) {
|
if (extensions.custom_border_color) {
|
||||||
// Verify that at least customBorderColors is available
|
extensions.custom_border_color =
|
||||||
if (!features.custom_border_color.customBorderColors) {
|
features.custom_border_color.customBorderColors &&
|
||||||
LOG_WARNING(Render_Vulkan,
|
features.custom_border_color.customBorderColorWithoutFormat;
|
||||||
"VK_EXT_custom_border_color reported but customBorderColors feature not available, disabling");
|
|
||||||
extensions.custom_border_color = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
RemoveExtensionFeatureIfUnsuitable(extensions.custom_border_color, features.custom_border_color,
|
RemoveExtensionFeatureIfUnsuitable(extensions.custom_border_color, features.custom_border_color,
|
||||||
VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME);
|
VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue