#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
use crate::empty::{RafxDescriptorSetArrayEmpty, RafxDescriptorSetHandleEmpty};
#[cfg(feature = "rafx-metal")]
use crate::metal::{RafxDescriptorSetArrayMetal, RafxDescriptorSetHandleMetal};
#[cfg(feature = "rafx-vulkan")]
use crate::vulkan::{RafxDescriptorSetArrayVulkan, RafxDescriptorSetHandleVulkan};
use crate::{RafxDescriptorUpdate, RafxResult, RafxRootSignature};
#[derive(Clone, Debug)]
pub enum RafxDescriptorSetHandle {
#[cfg(feature = "rafx-vulkan")]
Vk(RafxDescriptorSetHandleVulkan),
#[cfg(feature = "rafx-metal")]
Metal(RafxDescriptorSetHandleMetal),
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
Empty(RafxDescriptorSetHandleEmpty),
}
impl RafxDescriptorSetHandle {
#[cfg(feature = "rafx-vulkan")]
pub fn vk_descriptor_set_handle(&self) -> Option<&RafxDescriptorSetHandleVulkan> {
match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetHandle::Vk(inner) => Some(inner),
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetHandle::Metal(_inner) => None,
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetHandle::Empty(_inner) => None,
}
}
#[cfg(feature = "rafx-metal")]
pub fn metal_descriptor_set_handle(&self) -> Option<&RafxDescriptorSetHandleMetal> {
match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetHandle::Vk(_inner) => None,
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetHandle::Metal(inner) => Some(inner),
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetHandle::Empty(_inner) => None,
}
}
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
pub fn empty_descriptor_set_handle(&self) -> Option<&RafxDescriptorSetHandleEmpty> {
match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetHandle::Vk(_inner) => None,
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetHandle::Metal(_inner) => None,
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetHandle::Empty(inner) => Some(inner),
}
}
}
#[derive(Debug)]
pub enum RafxDescriptorSetArray {
#[cfg(feature = "rafx-vulkan")]
Vk(RafxDescriptorSetArrayVulkan),
#[cfg(feature = "rafx-metal")]
Metal(RafxDescriptorSetArrayMetal),
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
Empty(RafxDescriptorSetArrayEmpty),
}
impl RafxDescriptorSetArray {
pub fn handle(
&self,
index: u32,
) -> Option<RafxDescriptorSetHandle> {
Some(match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetArray::Vk(inner) => RafxDescriptorSetHandle::Vk(inner.handle(index)?),
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetArray::Metal(inner) => {
RafxDescriptorSetHandle::Metal(inner.handle(index)?)
}
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetArray::Empty(inner) => {
RafxDescriptorSetHandle::Empty(inner.handle(index)?)
}
})
}
pub fn root_signature(&self) -> &RafxRootSignature {
match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetArray::Vk(inner) => inner.root_signature(),
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetArray::Metal(inner) => inner.root_signature(),
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetArray::Empty(inner) => inner.root_signature(),
}
}
pub fn update_descriptor_set(
&mut self,
params: &[RafxDescriptorUpdate],
) -> RafxResult<()> {
match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetArray::Vk(inner) => inner.update_descriptor_set(params),
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetArray::Metal(inner) => inner.update_descriptor_set(params),
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetArray::Empty(inner) => inner.update_descriptor_set(params),
}
}
pub fn queue_descriptor_set_update(
&mut self,
update: &RafxDescriptorUpdate,
) -> RafxResult<()> {
match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetArray::Vk(inner) => inner.queue_descriptor_set_update(update),
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetArray::Metal(inner) => inner.queue_descriptor_set_update(update),
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetArray::Empty(inner) => inner.queue_descriptor_set_update(update),
}
}
pub fn flush_descriptor_set_updates(&mut self) -> RafxResult<()> {
match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetArray::Vk(inner) => inner.flush_descriptor_set_updates(),
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetArray::Metal(inner) => inner.flush_descriptor_set_updates(),
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetArray::Empty(inner) => inner.flush_descriptor_set_updates(),
}
}
#[cfg(feature = "rafx-vulkan")]
pub fn vk_descriptor_set_array(&self) -> Option<&RafxDescriptorSetArrayVulkan> {
match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetArray::Vk(inner) => Some(inner),
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetArray::Metal(_inner) => None,
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetArray::Empty(_inner) => None,
}
}
#[cfg(feature = "rafx-metal")]
pub fn metal_descriptor_set_array(&self) -> Option<&RafxDescriptorSetArrayMetal> {
match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetArray::Vk(_inner) => None,
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetArray::Metal(inner) => Some(inner),
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetArray::Empty(_inner) => None,
}
}
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
pub fn empty_descriptor_set_array(&self) -> Option<&RafxDescriptorSetArrayEmpty> {
match self {
#[cfg(feature = "rafx-vulkan")]
RafxDescriptorSetArray::Vk(_inner) => None,
#[cfg(feature = "rafx-metal")]
RafxDescriptorSetArray::Metal(_inner) => None,
#[cfg(any(
feature = "rafx-empty",
not(any(feature = "rafx-metal", feature = "rafx-vulkan"))
))]
RafxDescriptorSetArray::Empty(inner) => Some(inner),
}
}
}