@@ -4,7 +4,7 @@ use crate::{
44 binding_model:: { self , BindGroup , BindGroupLayout , BindGroupLayoutEntryError } ,
55 command, conv,
66 device:: {
7- bgl,
7+ bgl, create_validator ,
88 life:: { LifetimeTracker , WaitIdleError } ,
99 queue:: PendingWrites ,
1010 AttachmentData , DeviceLostInvocation , MissingDownlevelFlags , MissingFeatures ,
@@ -20,7 +20,7 @@ use crate::{
2020 } ,
2121 instance:: Adapter ,
2222 lock:: { rank, Mutex , MutexGuard , RwLock } ,
23- pipeline:: { self } ,
23+ pipeline,
2424 pool:: ResourcePool ,
2525 registry:: Registry ,
2626 resource:: {
@@ -1485,16 +1485,19 @@ impl<A: HalApi> Device<A> {
14851485 None
14861486 } ;
14871487
1488- let info = self
1489- . create_validator ( naga:: valid:: ValidationFlags :: all ( ) )
1490- . validate ( & module)
1491- . map_err ( |inner| {
1492- pipeline:: CreateShaderModuleError :: Validation ( naga:: error:: ShaderError {
1493- source,
1494- label : desc. label . as_ref ( ) . map ( |l| l. to_string ( ) ) ,
1495- inner : Box :: new ( inner) ,
1496- } )
1497- } ) ?;
1488+ let info = create_validator (
1489+ self . features ,
1490+ self . downlevel . flags ,
1491+ naga:: valid:: ValidationFlags :: all ( ) ,
1492+ )
1493+ . validate ( & module)
1494+ . map_err ( |inner| {
1495+ pipeline:: CreateShaderModuleError :: Validation ( naga:: error:: ShaderError {
1496+ source,
1497+ label : desc. label . as_ref ( ) . map ( |l| l. to_string ( ) ) ,
1498+ inner : Box :: new ( inner) ,
1499+ } )
1500+ } ) ?;
14981501
14991502 let interface =
15001503 validation:: Interface :: new ( & module, & info, self . limits . clone ( ) , self . features ) ;
@@ -1536,111 +1539,6 @@ impl<A: HalApi> Device<A> {
15361539 } )
15371540 }
15381541
1539- /// Create a validator with the given validation flags.
1540- pub fn create_validator (
1541- self : & Arc < Self > ,
1542- flags : naga:: valid:: ValidationFlags ,
1543- ) -> naga:: valid:: Validator {
1544- use naga:: valid:: Capabilities as Caps ;
1545- let mut caps = Caps :: empty ( ) ;
1546- caps. set (
1547- Caps :: PUSH_CONSTANT ,
1548- self . features . contains ( wgt:: Features :: PUSH_CONSTANTS ) ,
1549- ) ;
1550- caps. set (
1551- Caps :: FLOAT64 ,
1552- self . features . contains ( wgt:: Features :: SHADER_F64 ) ,
1553- ) ;
1554- caps. set (
1555- Caps :: PRIMITIVE_INDEX ,
1556- self . features
1557- . contains ( wgt:: Features :: SHADER_PRIMITIVE_INDEX ) ,
1558- ) ;
1559- caps. set (
1560- Caps :: SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING ,
1561- self . features . contains (
1562- wgt:: Features :: SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING ,
1563- ) ,
1564- ) ;
1565- caps. set (
1566- Caps :: UNIFORM_BUFFER_AND_STORAGE_TEXTURE_ARRAY_NON_UNIFORM_INDEXING ,
1567- self . features . contains (
1568- wgt:: Features :: UNIFORM_BUFFER_AND_STORAGE_TEXTURE_ARRAY_NON_UNIFORM_INDEXING ,
1569- ) ,
1570- ) ;
1571- // TODO: This needs a proper wgpu feature
1572- caps. set (
1573- Caps :: SAMPLER_NON_UNIFORM_INDEXING ,
1574- self . features . contains (
1575- wgt:: Features :: SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING ,
1576- ) ,
1577- ) ;
1578- caps. set (
1579- Caps :: STORAGE_TEXTURE_16BIT_NORM_FORMATS ,
1580- self . features
1581- . contains ( wgt:: Features :: TEXTURE_FORMAT_16BIT_NORM ) ,
1582- ) ;
1583- caps. set (
1584- Caps :: MULTIVIEW ,
1585- self . features . contains ( wgt:: Features :: MULTIVIEW ) ,
1586- ) ;
1587- caps. set (
1588- Caps :: EARLY_DEPTH_TEST ,
1589- self . features
1590- . contains ( wgt:: Features :: SHADER_EARLY_DEPTH_TEST ) ,
1591- ) ;
1592- caps. set (
1593- Caps :: SHADER_INT64 ,
1594- self . features . contains ( wgt:: Features :: SHADER_INT64 ) ,
1595- ) ;
1596- caps. set (
1597- Caps :: MULTISAMPLED_SHADING ,
1598- self . downlevel
1599- . flags
1600- . contains ( wgt:: DownlevelFlags :: MULTISAMPLED_SHADING ) ,
1601- ) ;
1602- caps. set (
1603- Caps :: DUAL_SOURCE_BLENDING ,
1604- self . features . contains ( wgt:: Features :: DUAL_SOURCE_BLENDING ) ,
1605- ) ;
1606- caps. set (
1607- Caps :: CUBE_ARRAY_TEXTURES ,
1608- self . downlevel
1609- . flags
1610- . contains ( wgt:: DownlevelFlags :: CUBE_ARRAY_TEXTURES ) ,
1611- ) ;
1612- caps. set (
1613- Caps :: SUBGROUP ,
1614- self . features
1615- . intersects ( wgt:: Features :: SUBGROUP | wgt:: Features :: SUBGROUP_VERTEX ) ,
1616- ) ;
1617- caps. set (
1618- Caps :: SUBGROUP_BARRIER ,
1619- self . features . intersects ( wgt:: Features :: SUBGROUP_BARRIER ) ,
1620- ) ;
1621-
1622- let mut subgroup_stages = naga:: valid:: ShaderStages :: empty ( ) ;
1623- subgroup_stages. set (
1624- naga:: valid:: ShaderStages :: COMPUTE | naga:: valid:: ShaderStages :: FRAGMENT ,
1625- self . features . contains ( wgt:: Features :: SUBGROUP ) ,
1626- ) ;
1627- subgroup_stages. set (
1628- naga:: valid:: ShaderStages :: VERTEX ,
1629- self . features . contains ( wgt:: Features :: SUBGROUP_VERTEX ) ,
1630- ) ;
1631-
1632- let subgroup_operations = if caps. contains ( Caps :: SUBGROUP ) {
1633- use naga:: valid:: SubgroupOperationSet as S ;
1634- S :: BASIC | S :: VOTE | S :: ARITHMETIC | S :: BALLOT | S :: SHUFFLE | S :: SHUFFLE_RELATIVE
1635- } else {
1636- naga:: valid:: SubgroupOperationSet :: empty ( )
1637- } ;
1638- let mut validator = naga:: valid:: Validator :: new ( flags, caps) ;
1639- validator. subgroup_stages ( subgroup_stages) ;
1640- validator. subgroup_operations ( subgroup_operations) ;
1641- validator
1642- }
1643-
16441542 #[ allow( unused_unsafe) ]
16451543 pub ( crate ) unsafe fn create_shader_module_spirv < ' a > (
16461544 self : & Arc < Self > ,
0 commit comments