~mmach/netext73/spirv-tools

« back to all changes in this revision

Viewing changes to source/val/validate_scopes.cpp

  • Committer: mmach
  • Date: 2022-08-26 06:41:59 UTC
  • Revision ID: netbit73@gmail.com-20220826064159-00f072z4uek8w8e3
2022.3.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
220
220
 
221
221
  // Vulkan Specific rules
222
222
  if (spvIsVulkanEnv(_.context()->target_env)) {
223
 
    if (value == SpvScopeCrossDevice) {
224
 
      return _.diag(SPV_ERROR_INVALID_DATA, inst)
225
 
             << _.VkErrorID(4638) << spvOpcodeString(opcode)
226
 
             << ": in Vulkan environment, Memory Scope cannot be CrossDevice";
227
 
    }
228
 
    // Vulkan 1.0 specific rules
229
 
    if (_.context()->target_env == SPV_ENV_VULKAN_1_0 &&
230
 
        value != SpvScopeDevice && value != SpvScopeWorkgroup &&
231
 
        value != SpvScopeInvocation) {
232
 
      return _.diag(SPV_ERROR_INVALID_DATA, inst)
233
 
             << _.VkErrorID(4638) << spvOpcodeString(opcode)
234
 
             << ": in Vulkan 1.0 environment Memory Scope is limited to "
235
 
             << "Device, Workgroup and Invocation";
236
 
    }
237
 
    // Vulkan 1.1 specific rules
238
 
    if ((_.context()->target_env == SPV_ENV_VULKAN_1_1 ||
239
 
         _.context()->target_env == SPV_ENV_VULKAN_1_2) &&
240
 
        value != SpvScopeDevice && value != SpvScopeWorkgroup &&
 
223
    if (value != SpvScopeDevice && value != SpvScopeWorkgroup &&
241
224
        value != SpvScopeSubgroup && value != SpvScopeInvocation &&
242
 
        value != SpvScopeShaderCallKHR) {
 
225
        value != SpvScopeShaderCallKHR && value != SpvScopeQueueFamily) {
243
226
      return _.diag(SPV_ERROR_INVALID_DATA, inst)
244
227
             << _.VkErrorID(4638) << spvOpcodeString(opcode)
245
 
             << ": in Vulkan 1.1 and 1.2 environment Memory Scope is limited "
246
 
             << "to Device, Workgroup, Invocation, and ShaderCall";
 
228
             << ": in Vulkan environment Memory Scope is limited to Device, "
 
229
                "QueueFamily, Workgroup, ShaderCallKHR, Subgroup, or "
 
230
                "Invocation";
 
231
    } else if (_.context()->target_env == SPV_ENV_VULKAN_1_0 &&
 
232
               value == SpvScopeSubgroup &&
 
233
               !_.HasCapability(SpvCapabilitySubgroupBallotKHR) &&
 
234
               !_.HasCapability(SpvCapabilitySubgroupVoteKHR)) {
 
235
      return _.diag(SPV_ERROR_INVALID_DATA, inst)
 
236
             << _.VkErrorID(6997) << spvOpcodeString(opcode)
 
237
             << ": in Vulkan 1.0 environment Memory Scope is can not be "
 
238
                "Subgroup without SubgroupBallotKHR or SubgroupVoteKHR "
 
239
                "declared";
247
240
    }
248
241
 
249
242
    if (value == SpvScopeShaderCallKHR) {