mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-13 16:08:50 +01:00
[dxvk] Add format feature queries to DxvkDevice
This commit is contained in:
parent
61025c0079
commit
cc8010fb7c
@ -60,6 +60,19 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DxvkFormatFeatures DxvkAdapter::getFormatFeatures(VkFormat format) const {
|
||||||
|
VkFormatProperties3 properties3 = { VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3 };
|
||||||
|
VkFormatProperties2 properties2 = { VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, &properties3 };
|
||||||
|
m_vki->vkGetPhysicalDeviceFormatProperties2(m_handle, format, &properties2);
|
||||||
|
|
||||||
|
DxvkFormatFeatures result;
|
||||||
|
result.optimal = properties3.optimalTilingFeatures;
|
||||||
|
result.linear = properties3.linearTilingFeatures;
|
||||||
|
result.buffer = properties3.bufferFeatures;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
VkFormatProperties DxvkAdapter::formatProperties(VkFormat format) const {
|
VkFormatProperties DxvkAdapter::formatProperties(VkFormat format) const {
|
||||||
VkFormatProperties formatProperties;
|
VkFormatProperties formatProperties;
|
||||||
m_vki->vkGetPhysicalDeviceFormatProperties(m_handle, format, &formatProperties);
|
m_vki->vkGetPhysicalDeviceFormatProperties(m_handle, format, &formatProperties);
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "dxvk_device_info.h"
|
#include "dxvk_device_info.h"
|
||||||
#include "dxvk_extensions.h"
|
#include "dxvk_extensions.h"
|
||||||
#include "dxvk_include.h"
|
#include "dxvk_include.h"
|
||||||
|
#include "dxvk_format.h"
|
||||||
|
|
||||||
namespace dxvk {
|
namespace dxvk {
|
||||||
|
|
||||||
@ -135,6 +136,15 @@ namespace dxvk {
|
|||||||
*/
|
*/
|
||||||
VkPhysicalDeviceMemoryProperties memoryProperties() const;
|
VkPhysicalDeviceMemoryProperties memoryProperties() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Queries format feature support
|
||||||
|
*
|
||||||
|
* \param [in] format Format to query
|
||||||
|
* \returns Format feature bits
|
||||||
|
*/
|
||||||
|
DxvkFormatFeatures getFormatFeatures(
|
||||||
|
VkFormat format) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Queries format support
|
* \brief Queries format support
|
||||||
*
|
*
|
||||||
|
@ -43,6 +43,39 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::optional<DxvkFormatLimits> DxvkDevice::getFormatLimits(
|
||||||
|
VkFormat format,
|
||||||
|
VkImageType type,
|
||||||
|
VkImageTiling tiling,
|
||||||
|
VkImageUsageFlags usage,
|
||||||
|
VkImageCreateFlags flags) const {
|
||||||
|
auto vk = m_adapter->vki();
|
||||||
|
|
||||||
|
VkPhysicalDeviceImageFormatInfo2 info = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 };
|
||||||
|
info.format = format;
|
||||||
|
info.type = type;
|
||||||
|
info.tiling = tiling;
|
||||||
|
info.usage = usage;
|
||||||
|
info.flags = flags;
|
||||||
|
|
||||||
|
VkImageFormatProperties2 properties = { VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 };
|
||||||
|
|
||||||
|
VkResult vr = vk->vkGetPhysicalDeviceImageFormatProperties2(
|
||||||
|
m_adapter->handle(), &info, &properties);
|
||||||
|
|
||||||
|
if (vr != VK_SUCCESS)
|
||||||
|
return std::nullopt;
|
||||||
|
|
||||||
|
DxvkFormatLimits result;
|
||||||
|
result.maxExtent = properties.imageFormatProperties.maxExtent;
|
||||||
|
result.maxMipLevels = properties.imageFormatProperties.maxMipLevels;
|
||||||
|
result.maxArrayLayers = properties.imageFormatProperties.maxArrayLayers;
|
||||||
|
result.sampleCounts = properties.imageFormatProperties.sampleCounts;
|
||||||
|
result.maxResourceSize = properties.imageFormatProperties.maxResourceSize;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool DxvkDevice::isUnifiedMemoryArchitecture() const {
|
bool DxvkDevice::isUnifiedMemoryArchitecture() const {
|
||||||
return m_adapter->isUnifiedMemoryArchitecture();
|
return m_adapter->isUnifiedMemoryArchitecture();
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
#include "dxvk_adapter.h"
|
#include "dxvk_adapter.h"
|
||||||
#include "dxvk_buffer.h"
|
#include "dxvk_buffer.h"
|
||||||
#include "dxvk_compute.h"
|
#include "dxvk_compute.h"
|
||||||
@ -178,6 +180,33 @@ namespace dxvk {
|
|||||||
return m_properties;
|
return m_properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Queries format feature support
|
||||||
|
*
|
||||||
|
* \param [in] format Format to query
|
||||||
|
* \returns Format feature bits
|
||||||
|
*/
|
||||||
|
DxvkFormatFeatures getFormatFeatures(VkFormat format) const {
|
||||||
|
return m_adapter->getFormatFeatures(format);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Queries format limits
|
||||||
|
*
|
||||||
|
* \param [in] format Image format to quers
|
||||||
|
* \param [in] type Image type
|
||||||
|
* \param [in] tiling Image tiling
|
||||||
|
* \param [in] usage Image usage flags
|
||||||
|
* \param [in] flags Image create flags
|
||||||
|
* \returns Format limits if the given image is supported
|
||||||
|
*/
|
||||||
|
std::optional<DxvkFormatLimits> getFormatLimits(
|
||||||
|
VkFormat format,
|
||||||
|
VkImageType type,
|
||||||
|
VkImageTiling tiling,
|
||||||
|
VkImageUsageFlags usage,
|
||||||
|
VkImageCreateFlags flags) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Get device status
|
* \brief Get device status
|
||||||
*
|
*
|
||||||
|
@ -13,7 +13,27 @@ namespace dxvk {
|
|||||||
};
|
};
|
||||||
|
|
||||||
using DxvkFormatFlags = Flags<DxvkFormatFlag>;
|
using DxvkFormatFlags = Flags<DxvkFormatFlag>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Format support info
|
||||||
|
*/
|
||||||
|
struct DxvkFormatFeatures {
|
||||||
|
VkFormatFeatureFlags2 optimal;
|
||||||
|
VkFormatFeatureFlags2 linear;
|
||||||
|
VkFormatFeatureFlags2 buffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Format support limits for a given set of image usage flags
|
||||||
|
*/
|
||||||
|
struct DxvkFormatLimits {
|
||||||
|
VkExtent3D maxExtent;
|
||||||
|
uint32_t maxMipLevels;
|
||||||
|
uint32_t maxArrayLayers;
|
||||||
|
VkSampleCountFlags sampleCounts;
|
||||||
|
VkDeviceSize maxResourceSize;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Planar format info
|
* \brief Planar format info
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user