Support a number of SPIRV capability related features. (#1382)

This commit is contained in:
Richard Diamond 2020-06-08 21:00:56 -05:00 committed by GitHub
parent 737016c047
commit cf669bb6be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 127 additions and 0 deletions

View File

@ -1,5 +1,12 @@
# Unreleased
- Added support for:
+ `PhysicalDeviceVariablePointersFeatures`
+ `PhysicalDeviceShaderAtomicInt64Features`
+ `PhysicalDevice8BitStorageFeatures`
+ `PhysicalDevice16BitStorageFeatures`
+ `PhysicalDeviceShaderFloat16Int8Features`
# Version 0.5.2 (2020-06-01)
- Added support for the physical storage buffer access.

View File

@ -1,6 +1,7 @@
# Unreleased
- Added a `properties` method to `Format`.
- Added additional device feature flags for enabling SPIR-V related capabilities.
# Version 0.19.0 (2020-06-01)

View File

@ -198,6 +198,11 @@ pub const STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR: u32 = 100014600
pub const STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT: u32 = 1000255000;
pub const STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT: u32 = 1000244000;
pub const STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO: u32 = 1000244001;
pub const STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES: u32 = 1000120000;
pub const STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES: u32 = 1000180000;
pub const STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES: u32 = 1000177000;
pub const STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES: u32 = 1000083000;
pub const STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES: u32 = 1000082000;
pub type SystemAllocationScope = u32;
pub const SYSTEM_ALLOCATION_SCOPE_COMMAND: u32 = 0;
@ -2599,6 +2604,49 @@ pub struct PhysicalDeviceBufferAddressFeaturesEXT {
pub bufferDeviceAddressMultiDevice: Bool32,
}
#[repr(C)]
pub struct PhysicalDeviceVariablePointersFeatures {
pub sType: StructureType,
pub pNext: *const c_void,
pub variablePointersStorageBuffer: Bool32,
pub variablePointers: Bool32,
}
#[repr(C)]
pub struct PhysicalDeviceShaderAtomicInt64Features {
pub sType: StructureType,
pub pNext: *const c_void,
pub shaderBufferInt64Atomics: Bool32,
pub shaderSharedInt64Atomics: Bool32,
}
#[repr(C)]
pub struct PhysicalDevice8BitStorageFeatures {
pub sType: StructureType,
pub pNext: *const c_void,
pub storageBuffer8BitAccess: Bool32,
pub uniformAndStorageBuffer8BitAccess: Bool32,
pub storagePushConstant8: Bool32,
}
#[repr(C)]
pub struct PhysicalDevice16BitStorageFeatures {
pub sType: StructureType,
pub pNext: *const c_void,
pub storageBuffer16BitAccess: Bool32,
pub uniformAndStorageBuffer16BitAccess: Bool32,
pub storagePushConstant16: Bool32,
pub storageInputOutput16: Bool32,
}
#[repr(C)]
pub struct PhysicalDeviceShaderFloat16Int8Features {
pub sType: StructureType,
pub pNext: *const c_void,
pub shaderFloat16: Bool32,
pub shaderInt8: Bool32,
}
pub type ViSurfaceCreateFlagsNN = Flags;
#[repr(C)]

View File

@ -262,12 +262,35 @@ pub struct Features {
pub buffer_device_address: bool,
pub buffer_device_address_capture_replay: bool,
pub buffer_device_address_multi_device: bool,
pub variable_pointers_storage_buffer: bool,
pub variable_pointers: bool,
pub shader_buffer_int64_atomics: bool,
pub shader_shared_int64_atomics: bool,
pub storage_buffer_8bit: bool,
pub storage_uniform_8bit: bool,
pub storage_push_constant_8bit: bool,
pub storage_buffer_16bit: bool,
pub storage_uniform_16bit: bool,
pub storage_push_constant_16bit: bool,
pub storage_input_output_16bit: bool,
pub shader_float16: bool,
pub shader_int8: bool,
}
pub(crate) struct FeaturesFfi {
_pinned: PhantomPinned,
pub(crate) main: vk::PhysicalDeviceFeatures2KHR,
phys_dev_buf_addr: vk::PhysicalDeviceBufferAddressFeaturesEXT,
variable_pointers: vk::PhysicalDeviceVariablePointersFeatures,
shader_atomic_i64: vk::PhysicalDeviceShaderAtomicInt64Features,
i8_storage: vk::PhysicalDevice8BitStorageFeatures,
i16_storage: vk::PhysicalDevice16BitStorageFeatures,
f16_i8: vk::PhysicalDeviceShaderFloat16Int8Features,
}
macro_rules! features {
@ -483,4 +506,52 @@ features! {
buffer_device_address_multi_device => bufferDeviceAddressMultiDevice,
],
},
extension {
ty: vk::PhysicalDeviceVariablePointersFeatures,
ffi_name: variable_pointers,
sType: vk::STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
fields: [
variable_pointers_storage_buffer => variablePointersStorageBuffer,
variable_pointers => variablePointers,
],
},
extension {
ty: vk::PhysicalDeviceShaderAtomicInt64Features,
ffi_name: shader_atomic_i64,
sType: vk::STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES,
fields: [
shader_buffer_int64_atomics => shaderBufferInt64Atomics,
shader_shared_int64_atomics => shaderSharedInt64Atomics,
],
},
extension {
ty: vk::PhysicalDevice8BitStorageFeatures,
ffi_name: i8_storage,
sType: vk::STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES,
fields: [
storage_buffer_8bit => storageBuffer8BitAccess,
storage_uniform_8bit => uniformAndStorageBuffer8BitAccess,
storage_push_constant_8bit => storagePushConstant8,
],
},
extension {
ty: vk::PhysicalDevice16BitStorageFeatures,
ffi_name: i16_storage,
sType: vk::STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,
fields: [
storage_buffer_16bit => storageBuffer16BitAccess,
storage_uniform_16bit => uniformAndStorageBuffer16BitAccess,
storage_push_constant_16bit => storagePushConstant16,
storage_input_output_16bit => storageInputOutput16,
],
},
extension {
ty: vk::PhysicalDeviceShaderFloat16Int8Features,
ffi_name: f16_i8,
sType: vk::STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES,
fields: [
shader_float16 => shaderFloat16,
shader_int8 => shaderInt8,
],
},
}