mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-03-07 14:10:37 +01:00
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:
parent
4203d7339c
commit
22171d16f8
4 changed files with 74 additions and 36 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue