spirv: Add support for DerivativeGroup capabilities
As defined in SPV_NV_compute_shader_derivatives. These control how the invocations are arranged in a CS when doing derivative and related operations (which are also enabled by the extension). Since we expect valid SPIR-V, we don't need to do more work at SPIR-V level to enable the derivative and related operations to be called. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -35,6 +35,7 @@ extern "C" {
|
|||||||
struct spirv_supported_capabilities {
|
struct spirv_supported_capabilities {
|
||||||
bool address;
|
bool address;
|
||||||
bool atomic_storage;
|
bool atomic_storage;
|
||||||
|
bool derivative_group;
|
||||||
bool descriptor_array_dynamic_indexing;
|
bool descriptor_array_dynamic_indexing;
|
||||||
bool device_group;
|
bool device_group;
|
||||||
bool draw_parameters;
|
bool draw_parameters;
|
||||||
|
@@ -3776,6 +3776,11 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
|
|||||||
spv_check_supported(physical_storage_buffer_address, cap);
|
spv_check_supported(physical_storage_buffer_address, cap);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SpvCapabilityComputeDerivativeGroupQuadsNV:
|
||||||
|
case SpvCapabilityComputeDerivativeGroupLinearNV:
|
||||||
|
spv_check_supported(derivative_group, cap);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
vtn_fail("Unhandled capability");
|
vtn_fail("Unhandled capability");
|
||||||
}
|
}
|
||||||
@@ -4019,6 +4024,16 @@ vtn_handle_execution_mode(struct vtn_builder *b, struct vtn_value *entry_point,
|
|||||||
vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
|
vtn_assert(b->shader->info.stage == MESA_SHADER_FRAGMENT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SpvExecutionModeDerivativeGroupQuadsNV:
|
||||||
|
vtn_assert(b->shader->info.stage == MESA_SHADER_COMPUTE);
|
||||||
|
b->shader->info.cs.derivative_group = DERIVATIVE_GROUP_QUADS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SpvExecutionModeDerivativeGroupLinearNV:
|
||||||
|
vtn_assert(b->shader->info.stage == MESA_SHADER_COMPUTE);
|
||||||
|
b->shader->info.cs.derivative_group = DERIVATIVE_GROUP_LINEAR;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
vtn_fail("Unhandled execution mode");
|
vtn_fail("Unhandled execution mode");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user