spirv: Add SpvMemoryModelVulkan and related capabilities
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
@@ -75,6 +75,8 @@ struct spirv_supported_capabilities {
|
||||
bool tessellation;
|
||||
bool transform_feedback;
|
||||
bool variable_pointers;
|
||||
bool vk_memory_model;
|
||||
bool vk_memory_model_device_scope;
|
||||
bool float16;
|
||||
bool amd_gcn_shader;
|
||||
bool amd_shader_ballot;
|
||||
|
||||
@@ -3792,6 +3792,14 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
|
||||
|
||||
case SpvCapabilityShaderClockKHR:
|
||||
spv_check_supported(shader_clock, cap);
|
||||
break;
|
||||
|
||||
case SpvCapabilityVulkanMemoryModel:
|
||||
spv_check_supported(vk_memory_model, cap);
|
||||
break;
|
||||
|
||||
case SpvCapabilityVulkanMemoryModelDeviceScope:
|
||||
spv_check_supported(vk_memory_model_device_scope, cap);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -3842,9 +3850,20 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
|
||||
break;
|
||||
}
|
||||
|
||||
vtn_assert(w[2] == SpvMemoryModelSimple ||
|
||||
w[2] == SpvMemoryModelGLSL450 ||
|
||||
w[2] == SpvMemoryModelOpenCL);
|
||||
switch (w[2]) {
|
||||
case SpvMemoryModelSimple:
|
||||
case SpvMemoryModelGLSL450:
|
||||
case SpvMemoryModelOpenCL:
|
||||
break;
|
||||
case SpvMemoryModelVulkan:
|
||||
vtn_fail_if(!b->options->caps.vk_memory_model,
|
||||
"Vulkan memory model is unsupported by this driver");
|
||||
break;
|
||||
default:
|
||||
vtn_fail("Unsupported memory model: %s",
|
||||
spirv_memorymodel_to_string(w[2]));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case SpvOpEntryPoint:
|
||||
|
||||
Reference in New Issue
Block a user