mesa: Use the new spirv_capabilities struct

Also, re-organize a bit to match the spec better.  There are now
capabilities which need to be set to constant true which we didn't have
to se in the old caps struct and this makes it all more obvious.

Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Iván Briano <ivan.briano@intel.com>
Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28905>
This commit is contained in:
Faith Ekstrand 2024-04-24 09:07:20 -05:00 committed by Marge Bot
parent 4203d7339c
commit 22171d16f8
4 changed files with 74 additions and 36 deletions

View file

@ -236,7 +236,11 @@ spirv_verify_gl_specialization_constants(
* need to print the warnings now, would be done later, on the real
* spirv_to_nir
*/
const struct spirv_to_nir_options options = { .debug.func = NULL};
const struct spirv_capabilities spirv_caps = { false, };
const struct spirv_to_nir_options options = {
.capabilities = &spirv_caps,
.debug.func = NULL,
};
const uint32_t *word_end = words + word_count;
struct vtn_builder *b = vtn_create_builder(words, word_count,

View file

@ -29,6 +29,7 @@
#include "compiler/nir/nir.h"
#include "compiler/spirv/nir_spirv.h"
#include "compiler/spirv/spirv_info.h"
#include "program/program.h"
@ -261,13 +262,13 @@ _mesa_spirv_to_nir(struct gl_context *ctx,
spec_entries[i].defined_on_module = false;
}
struct spirv_supported_capabilities spirv_caps;
struct spirv_capabilities spirv_caps;
_mesa_fill_supported_spirv_capabilities(&spirv_caps, &ctx->Const,
&ctx->Extensions);
struct spirv_to_nir_options spirv_options = {
.environment = NIR_SPIRV_OPENGL,
.caps = spirv_caps,
.capabilities = &spirv_caps,
.subgroup_size = SUBGROUP_SIZE_UNIFORM,
.ubo_addr_format = nir_address_format_32bit_index_offset,
.ssbo_addr_format = nir_address_format_32bit_index_offset,

View file

@ -27,43 +27,76 @@
*/
#include "spirv_capabilities.h"
#include "compiler/shader_info.h"
#include "compiler/spirv/spirv_info.h"
void
_mesa_fill_supported_spirv_capabilities(struct spirv_supported_capabilities *caps,
_mesa_fill_supported_spirv_capabilities(struct spirv_capabilities *caps,
struct gl_constants *consts,
const struct gl_extensions *gl_exts)
{
const struct spirv_supported_extensions *spirv_exts = consts->SpirVExtensions;
*caps = (struct spirv_supported_capabilities) {
.atomic_storage = gl_exts->ARB_shader_atomic_counters,
.demote_to_helper_invocation = gl_exts->EXT_demote_to_helper_invocation,
.draw_parameters =
gl_exts->ARB_shader_draw_parameters &&
spirv_exts->supported[SPV_KHR_shader_draw_parameters],
.derivative_group = gl_exts->NV_compute_shader_derivatives,
.float64 = gl_exts->ARB_gpu_shader_fp64,
.geometry_streams = gl_exts->ARB_gpu_shader5,
.image_ms_array = gl_exts->ARB_shader_image_load_store &&
consts->MaxImageSamples > 1,
.image_read_without_format = gl_exts->EXT_shader_image_load_formatted,
.image_write_without_format = gl_exts->ARB_shader_image_load_store,
.int64 = gl_exts->ARB_gpu_shader_int64,
.int64_atomics = gl_exts->NV_shader_atomic_int64,
.post_depth_coverage = gl_exts->ARB_post_depth_coverage,
.shader_clock = gl_exts->ARB_shader_clock,
.shader_viewport_index_layer = gl_exts->ARB_shader_viewport_layer_array,
.stencil_export = gl_exts->ARB_shader_stencil_export,
.storage_image_ms = gl_exts->ARB_shader_image_load_store &&
consts->MaxImageSamples > 1,
.subgroup_ballot =
gl_exts->ARB_shader_ballot && spirv_exts->supported[SPV_KHR_shader_ballot],
.subgroup_vote =
gl_exts->ARB_shader_group_vote && spirv_exts->supported[SPV_KHR_subgroup_vote],
.tessellation = gl_exts->ARB_tessellation_shader,
.transform_feedback = gl_exts->ARB_transform_feedback3,
.variable_pointers = spirv_exts->supported[SPV_KHR_variable_pointers],
.integer_functions2 = gl_exts->INTEL_shader_integer_functions2,
*caps = (struct spirv_capabilities) {
/* These come from the table in GL_ARB_gl_spirv */
.Matrix = true,
.Shader = true,
.Geometry = true,
.Tessellation = gl_exts->ARB_tessellation_shader,
.Float64 = gl_exts->ARB_gpu_shader_fp64,
.AtomicStorage = gl_exts->ARB_shader_atomic_counters,
.TessellationPointSize = gl_exts->ARB_tessellation_shader,
.GeometryPointSize = true,
.ImageGatherExtended = gl_exts->ARB_gpu_shader5,
.StorageImageMultisample = gl_exts->ARB_shader_image_load_store &&
consts->MaxImageSamples > 1,
.UniformBufferArrayDynamicIndexing = gl_exts->ARB_gpu_shader5,
.SampledImageArrayDynamicIndexing = gl_exts->ARB_gpu_shader5,
.StorageBufferArrayDynamicIndexing = gl_exts->ARB_shader_storage_buffer_object,
.StorageImageArrayDynamicIndexing = gl_exts->ARB_shader_image_load_store,
.ClipDistance = true,
.CullDistance = gl_exts->ARB_cull_distance,
.ImageCubeArray = gl_exts->ARB_texture_cube_map_array,
.SampleRateShading = gl_exts->ARB_sample_shading,
.ImageRect = true,
.SampledRect = true,
.Sampled1D = true,
.Image1D = true,
.SampledCubeArray = gl_exts->ARB_texture_cube_map_array,
.SampledBuffer = true,
.ImageBuffer = true,
.ImageMSArray = true,
.StorageImageExtendedFormats = gl_exts->ARB_shader_image_load_store,
.ImageQuery = true,
.DerivativeControl = gl_exts->ARB_derivative_control,
.InterpolationFunction = gl_exts->ARB_gpu_shader5,
.TransformFeedback = true,
.GeometryStreams = gl_exts->ARB_gpu_shader5,
.StorageImageWriteWithoutFormat = gl_exts->ARB_shader_image_load_store,
.MultiViewport = gl_exts->ARB_viewport_array,
/* These aren't in the main table for some reason */
.Int64 = gl_exts->ARB_gpu_shader_int64,
.SparseResidency = gl_exts->ARB_sparse_texture2,
.MinLod = gl_exts->ARB_sparse_texture_clamp,
.StorageImageReadWithoutFormat = gl_exts->EXT_shader_image_load_formatted,
.Int64Atomics = gl_exts->NV_shader_atomic_int64,
/* These come from their individual extension specs */
.DemoteToHelperInvocation = gl_exts->EXT_demote_to_helper_invocation,
.DrawParameters = gl_exts->ARB_shader_draw_parameters &&
spirv_exts->supported[SPV_KHR_shader_draw_parameters],
.ComputeDerivativeGroupQuadsNV = gl_exts->NV_compute_shader_derivatives,
.ComputeDerivativeGroupLinearNV = gl_exts->NV_compute_shader_derivatives,
.SampleMaskPostDepthCoverage = gl_exts->ARB_post_depth_coverage,
.ShaderClockKHR = gl_exts->ARB_shader_clock,
.ShaderViewportIndexLayerEXT = gl_exts->ARB_shader_viewport_layer_array,
.StencilExportEXT = gl_exts->ARB_shader_stencil_export,
.SubgroupBallotKHR = gl_exts->ARB_shader_ballot &&
spirv_exts->supported[SPV_KHR_shader_ballot],
.SubgroupVoteKHR = gl_exts->ARB_shader_group_vote &&
spirv_exts->supported[SPV_KHR_subgroup_vote],
.TransformFeedback = gl_exts->ARB_transform_feedback3,
.VariablePointers = spirv_exts->supported[SPV_KHR_variable_pointers],
.IntegerFunctions2INTEL = gl_exts->INTEL_shader_integer_functions2,
};
}

View file

@ -36,9 +36,9 @@
extern "C" {
#endif
struct spirv_supported_capabilities;
struct spirv_capabilities;
void _mesa_fill_supported_spirv_capabilities(struct spirv_supported_capabilities *caps,
void _mesa_fill_supported_spirv_capabilities(struct spirv_capabilities *caps,
struct gl_constants *consts,
const struct gl_extensions *gl_exts);