Merge pull request #69204 from Chaosus/rd_texture_usage_bits
This commit is contained in:
commit
e29b982dbf
7 changed files with 34 additions and 34 deletions
|
@ -35,7 +35,7 @@
|
|||
</member>
|
||||
<member name="texture_type" type="int" setter="set_texture_type" getter="get_texture_type" enum="RenderingDevice.TextureType" default="1">
|
||||
</member>
|
||||
<member name="usage_bits" type="int" setter="set_usage_bits" getter="get_usage_bits" default="0">
|
||||
<member name="usage_bits" type="int" setter="set_usage_bits" getter="get_usage_bits" enum="RenderingDevice.TextureUsageBits" default="0">
|
||||
</member>
|
||||
<member name="width" type="int" setter="set_width" getter="get_width" default="1">
|
||||
</member>
|
||||
|
|
|
@ -589,7 +589,7 @@
|
|||
<method name="texture_is_format_supported_for_usage" qualifiers="const">
|
||||
<return type="bool" />
|
||||
<param index="0" name="format" type="int" enum="RenderingDevice.DataFormat" />
|
||||
<param index="1" name="usage_flags" type="int" />
|
||||
<param index="1" name="usage_flags" type="int" enum="RenderingDevice.TextureUsageBits" />
|
||||
<description>
|
||||
</description>
|
||||
</method>
|
||||
|
@ -1193,25 +1193,25 @@
|
|||
</constant>
|
||||
<constant name="TEXTURE_SAMPLES_MAX" value="7" enum="TextureSamples">
|
||||
</constant>
|
||||
<constant name="TEXTURE_USAGE_SAMPLING_BIT" value="1" enum="TextureUsageBits">
|
||||
<constant name="TEXTURE_USAGE_SAMPLING_BIT" value="1" enum="TextureUsageBits" is_bitfield="true">
|
||||
</constant>
|
||||
<constant name="TEXTURE_USAGE_COLOR_ATTACHMENT_BIT" value="2" enum="TextureUsageBits">
|
||||
<constant name="TEXTURE_USAGE_COLOR_ATTACHMENT_BIT" value="2" enum="TextureUsageBits" is_bitfield="true">
|
||||
</constant>
|
||||
<constant name="TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT" value="4" enum="TextureUsageBits">
|
||||
<constant name="TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT" value="4" enum="TextureUsageBits" is_bitfield="true">
|
||||
</constant>
|
||||
<constant name="TEXTURE_USAGE_STORAGE_BIT" value="8" enum="TextureUsageBits">
|
||||
<constant name="TEXTURE_USAGE_STORAGE_BIT" value="8" enum="TextureUsageBits" is_bitfield="true">
|
||||
</constant>
|
||||
<constant name="TEXTURE_USAGE_STORAGE_ATOMIC_BIT" value="16" enum="TextureUsageBits">
|
||||
<constant name="TEXTURE_USAGE_STORAGE_ATOMIC_BIT" value="16" enum="TextureUsageBits" is_bitfield="true">
|
||||
</constant>
|
||||
<constant name="TEXTURE_USAGE_CPU_READ_BIT" value="32" enum="TextureUsageBits">
|
||||
<constant name="TEXTURE_USAGE_CPU_READ_BIT" value="32" enum="TextureUsageBits" is_bitfield="true">
|
||||
</constant>
|
||||
<constant name="TEXTURE_USAGE_CAN_UPDATE_BIT" value="64" enum="TextureUsageBits">
|
||||
<constant name="TEXTURE_USAGE_CAN_UPDATE_BIT" value="64" enum="TextureUsageBits" is_bitfield="true">
|
||||
</constant>
|
||||
<constant name="TEXTURE_USAGE_CAN_COPY_FROM_BIT" value="128" enum="TextureUsageBits">
|
||||
<constant name="TEXTURE_USAGE_CAN_COPY_FROM_BIT" value="128" enum="TextureUsageBits" is_bitfield="true">
|
||||
</constant>
|
||||
<constant name="TEXTURE_USAGE_CAN_COPY_TO_BIT" value="256" enum="TextureUsageBits">
|
||||
<constant name="TEXTURE_USAGE_CAN_COPY_TO_BIT" value="256" enum="TextureUsageBits" is_bitfield="true">
|
||||
</constant>
|
||||
<constant name="TEXTURE_USAGE_INPUT_ATTACHMENT_BIT" value="512" enum="TextureUsageBits">
|
||||
<constant name="TEXTURE_USAGE_INPUT_ATTACHMENT_BIT" value="512" enum="TextureUsageBits" is_bitfield="true">
|
||||
</constant>
|
||||
<constant name="TEXTURE_SWIZZLE_IDENTITY" value="0" enum="TextureSwizzle">
|
||||
</constant>
|
||||
|
|
|
@ -3355,7 +3355,7 @@ Error RenderingDeviceVulkan::texture_clear(RID p_texture, const Color &p_color,
|
|||
return OK;
|
||||
}
|
||||
|
||||
bool RenderingDeviceVulkan::texture_is_format_supported_for_usage(DataFormat p_format, uint32_t p_usage) const {
|
||||
bool RenderingDeviceVulkan::texture_is_format_supported_for_usage(DataFormat p_format, BitField<RenderingDevice::TextureUsageBits> p_usage) const {
|
||||
ERR_FAIL_INDEX_V(p_format, DATA_FORMAT_MAX, false);
|
||||
|
||||
_THREAD_SAFE_METHOD_
|
||||
|
@ -3365,34 +3365,34 @@ bool RenderingDeviceVulkan::texture_is_format_supported_for_usage(DataFormat p_f
|
|||
vkGetPhysicalDeviceFormatProperties(context->get_physical_device(), vulkan_formats[p_format], &properties);
|
||||
VkFormatFeatureFlags flags;
|
||||
|
||||
if (p_usage & TEXTURE_USAGE_CPU_READ_BIT) {
|
||||
if (p_usage.has_flag(TEXTURE_USAGE_CPU_READ_BIT)) {
|
||||
flags = properties.linearTilingFeatures;
|
||||
} else {
|
||||
flags = properties.optimalTilingFeatures;
|
||||
}
|
||||
|
||||
if (p_usage & TEXTURE_USAGE_SAMPLING_BIT && !(flags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) {
|
||||
if (p_usage.has_flag(TEXTURE_USAGE_SAMPLING_BIT) && !(flags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (p_usage & TEXTURE_USAGE_COLOR_ATTACHMENT_BIT && !(flags & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)) {
|
||||
if (p_usage.has_flag(TEXTURE_USAGE_COLOR_ATTACHMENT_BIT) && !(flags & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (p_usage & TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT && !(flags & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)) {
|
||||
if (p_usage.has_flag(TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) && !(flags & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (p_usage & TEXTURE_USAGE_STORAGE_BIT && !(flags & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)) {
|
||||
if (p_usage.has_flag(TEXTURE_USAGE_STORAGE_BIT) && !(flags & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (p_usage & TEXTURE_USAGE_STORAGE_ATOMIC_BIT && !(flags & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)) {
|
||||
if (p_usage.has_flag(TEXTURE_USAGE_STORAGE_ATOMIC_BIT) && !(flags & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Validation via VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR fails if VRS attachment is not supported.
|
||||
if (p_usage & TEXTURE_USAGE_VRS_ATTACHMENT_BIT && p_format != DATA_FORMAT_R8_UINT) {
|
||||
if (p_usage.has_flag(TEXTURE_USAGE_VRS_ATTACHMENT_BIT) && p_format != DATA_FORMAT_R8_UINT) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1055,7 +1055,7 @@ public:
|
|||
virtual Error texture_update(RID p_texture, uint32_t p_layer, const Vector<uint8_t> &p_data, BitField<BarrierMask> p_post_barrier = BARRIER_MASK_ALL_BARRIERS);
|
||||
virtual Vector<uint8_t> texture_get_data(RID p_texture, uint32_t p_layer);
|
||||
|
||||
virtual bool texture_is_format_supported_for_usage(DataFormat p_format, uint32_t p_usage) const;
|
||||
virtual bool texture_is_format_supported_for_usage(DataFormat p_format, BitField<RenderingDevice::TextureUsageBits> p_usage) const;
|
||||
virtual bool texture_is_shared(RID p_texture);
|
||||
virtual bool texture_is_valid(RID p_texture);
|
||||
virtual Size2i texture_size(RID p_texture);
|
||||
|
|
|
@ -759,16 +759,16 @@ void RenderingDevice::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(TEXTURE_SAMPLES_64);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_SAMPLES_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(TEXTURE_USAGE_SAMPLING_BIT);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_USAGE_COLOR_ATTACHMENT_BIT);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_USAGE_STORAGE_BIT);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_USAGE_STORAGE_ATOMIC_BIT);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_USAGE_CPU_READ_BIT);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_USAGE_CAN_UPDATE_BIT);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_USAGE_CAN_COPY_FROM_BIT);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_USAGE_CAN_COPY_TO_BIT);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_USAGE_INPUT_ATTACHMENT_BIT);
|
||||
BIND_BITFIELD_FLAG(TEXTURE_USAGE_SAMPLING_BIT);
|
||||
BIND_BITFIELD_FLAG(TEXTURE_USAGE_COLOR_ATTACHMENT_BIT);
|
||||
BIND_BITFIELD_FLAG(TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT);
|
||||
BIND_BITFIELD_FLAG(TEXTURE_USAGE_STORAGE_BIT);
|
||||
BIND_BITFIELD_FLAG(TEXTURE_USAGE_STORAGE_ATOMIC_BIT);
|
||||
BIND_BITFIELD_FLAG(TEXTURE_USAGE_CPU_READ_BIT);
|
||||
BIND_BITFIELD_FLAG(TEXTURE_USAGE_CAN_UPDATE_BIT);
|
||||
BIND_BITFIELD_FLAG(TEXTURE_USAGE_CAN_COPY_FROM_BIT);
|
||||
BIND_BITFIELD_FLAG(TEXTURE_USAGE_CAN_COPY_TO_BIT);
|
||||
BIND_BITFIELD_FLAG(TEXTURE_USAGE_INPUT_ATTACHMENT_BIT);
|
||||
|
||||
BIND_ENUM_CONSTANT(TEXTURE_SWIZZLE_IDENTITY);
|
||||
BIND_ENUM_CONSTANT(TEXTURE_SWIZZLE_ZERO);
|
||||
|
|
|
@ -535,7 +535,7 @@ public:
|
|||
virtual Error texture_update(RID p_texture, uint32_t p_layer, const Vector<uint8_t> &p_data, BitField<BarrierMask> p_post_barrier = BARRIER_MASK_ALL_BARRIERS) = 0;
|
||||
virtual Vector<uint8_t> texture_get_data(RID p_texture, uint32_t p_layer) = 0; // CPU textures will return immediately, while GPU textures will most likely force a flush
|
||||
|
||||
virtual bool texture_is_format_supported_for_usage(DataFormat p_format, uint32_t p_usage) const = 0;
|
||||
virtual bool texture_is_format_supported_for_usage(DataFormat p_format, BitField<RenderingDevice::TextureUsageBits> p_usage) const = 0;
|
||||
virtual bool texture_is_shared(RID p_texture) = 0;
|
||||
virtual bool texture_is_valid(RID p_texture) = 0;
|
||||
virtual Size2i texture_size(RID p_texture) = 0;
|
||||
|
@ -1340,7 +1340,7 @@ VARIANT_ENUM_CAST(RenderingDevice::DataFormat)
|
|||
VARIANT_BITFIELD_CAST(RenderingDevice::BarrierMask);
|
||||
VARIANT_ENUM_CAST(RenderingDevice::TextureType)
|
||||
VARIANT_ENUM_CAST(RenderingDevice::TextureSamples)
|
||||
VARIANT_ENUM_CAST(RenderingDevice::TextureUsageBits)
|
||||
VARIANT_BITFIELD_CAST(RenderingDevice::TextureUsageBits)
|
||||
VARIANT_ENUM_CAST(RenderingDevice::TextureSwizzle)
|
||||
VARIANT_ENUM_CAST(RenderingDevice::TextureSliceType)
|
||||
VARIANT_ENUM_CAST(RenderingDevice::SamplerFilter)
|
||||
|
|
|
@ -66,7 +66,7 @@ public:
|
|||
RD_SETGET(uint32_t, mipmaps)
|
||||
RD_SETGET(RD::TextureType, texture_type)
|
||||
RD_SETGET(RD::TextureSamples, samples)
|
||||
RD_SETGET(uint32_t, usage_bits)
|
||||
RD_SETGET(BitField<RenderingDevice::TextureUsageBits>, usage_bits)
|
||||
|
||||
void add_shareable_format(RD::DataFormat p_format) { base.shareable_formats.push_back(p_format); }
|
||||
void remove_shareable_format(RD::DataFormat p_format) { base.shareable_formats.erase(p_format); }
|
||||
|
|
Loading…
Reference in a new issue