nir/spirv: Add support for device groups
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
This commit is contained in:
@@ -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?
|
||||||
*
|
*
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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),
|
||||||
};
|
};
|
||||||
|
@@ -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,
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user