nir/spirv: Add support for device groups

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
This commit is contained in:
Jason Ekstrand
2017-09-21 15:51:55 -07:00
parent ddc4069122
commit ff9db1a4cc
7 changed files with 20 additions and 0 deletions

View File

@@ -1888,6 +1888,8 @@ typedef struct nir_shader_compiler_options {
bool lower_cs_local_index_from_id; bool lower_cs_local_index_from_id;
bool lower_device_index_to_zero;
/** /**
* Should nir_lower_io() create load_interpolated_input intrinsics? * Should nir_lower_io() create load_interpolated_input intrinsics?
* *

View File

@@ -133,6 +133,11 @@ convert_block(nir_block *block, nir_builder *b)
break; break;
} }
case SYSTEM_VALUE_DEVICE_INDEX:
if (b->shader->options->lower_device_index_to_zero)
sysval = nir_imm_int(b, 0);
break;
default: default:
break; break;
} }

View File

@@ -232,6 +232,7 @@ gl_system_value_name(gl_system_value sysval)
ENUM(SYSTEM_VALUE_GLOBAL_INVOCATION_ID), ENUM(SYSTEM_VALUE_GLOBAL_INVOCATION_ID),
ENUM(SYSTEM_VALUE_WORK_GROUP_ID), ENUM(SYSTEM_VALUE_WORK_GROUP_ID),
ENUM(SYSTEM_VALUE_NUM_WORK_GROUPS), ENUM(SYSTEM_VALUE_NUM_WORK_GROUPS),
ENUM(SYSTEM_VALUE_DEVICE_INDEX),
ENUM(SYSTEM_VALUE_VIEW_INDEX), ENUM(SYSTEM_VALUE_VIEW_INDEX),
ENUM(SYSTEM_VALUE_VERTEX_CNT), ENUM(SYSTEM_VALUE_VERTEX_CNT),
}; };

View File

@@ -558,6 +558,9 @@ typedef enum
SYSTEM_VALUE_LOCAL_GROUP_SIZE, SYSTEM_VALUE_LOCAL_GROUP_SIZE,
/*@}*/ /*@}*/
/** Required for VK_KHR_device_group */
SYSTEM_VALUE_DEVICE_INDEX,
/** Required for VK_KHX_multiview */ /** Required for VK_KHX_multiview */
SYSTEM_VALUE_VIEW_INDEX, SYSTEM_VALUE_VIEW_INDEX,

View File

@@ -36,6 +36,7 @@ struct spirv_supported_capabilities {
bool float64; bool float64;
bool image_ms_array; bool image_ms_array;
bool tessellation; bool tessellation;
bool device_group;
bool draw_parameters; bool draw_parameters;
bool image_read_without_format; bool image_read_without_format;
bool image_write_without_format; bool image_write_without_format;

View File

@@ -3283,6 +3283,10 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
spv_check_supported(image_write_without_format, cap); spv_check_supported(image_write_without_format, cap);
break; break;
case SpvCapabilityDeviceGroup:
spv_check_supported(device_group, cap);
break;
case SpvCapabilityMultiView: case SpvCapabilityMultiView:
spv_check_supported(multiview, cap); spv_check_supported(multiview, cap);
break; break;

View File

@@ -1293,6 +1293,10 @@ vtn_get_builtin_location(struct vtn_builder *b,
*location = SYSTEM_VALUE_DRAW_ID; *location = SYSTEM_VALUE_DRAW_ID;
set_mode_system_value(b, mode); set_mode_system_value(b, mode);
break; break;
case SpvBuiltInDeviceIndex:
*location = SYSTEM_VALUE_DEVICE_INDEX;
set_mode_system_value(b, mode);
break;
case SpvBuiltInViewIndex: case SpvBuiltInViewIndex:
*location = SYSTEM_VALUE_VIEW_INDEX; *location = SYSTEM_VALUE_VIEW_INDEX;
set_mode_system_value(b, mode); set_mode_system_value(b, mode);