X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fshader_info.h;h=339aee551eb18e44b4f956ca39d0a81201ef1a5d;hb=6196259d957cc7c3ea355b74649623ef7e582854;hp=3d87193875148a4b4e8e5a6b7695e2c90ecddd61;hpb=aaef12702f3b3a9e0464468948b1cbfaf4a66cd2;p=mesa.git diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index 3d871938751..339aee551eb 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -35,12 +35,17 @@ extern "C" { struct spirv_supported_capabilities { bool address; bool atomic_storage; + bool demote_to_helper_invocation; + bool derivative_group; bool descriptor_array_dynamic_indexing; + bool descriptor_array_non_uniform_indexing; + bool descriptor_indexing; bool device_group; bool draw_parameters; bool float64; + bool fragment_shader_sample_interlock; + bool fragment_shader_pixel_interlock; bool geometry_streams; - bool gcn_shader; bool image_ms_array; bool image_read_without_format; bool image_write_without_format; @@ -54,6 +59,8 @@ struct spirv_supported_capabilities { bool physical_storage_buffer_address; bool post_depth_coverage; bool runtime_descriptor_array; + bool float_controls; + bool shader_clock; bool shader_viewport_index_layer; bool stencil_export; bool storage_8bit; @@ -67,8 +74,13 @@ struct spirv_supported_capabilities { bool subgroup_vote; bool tessellation; bool transform_feedback; - bool trinary_minmax; bool variable_pointers; + bool vk_memory_model; + bool vk_memory_model_device_scope; + bool float16; + bool amd_gcn_shader; + bool amd_shader_ballot; + bool amd_trinary_minmax; }; typedef struct shader_info { @@ -95,6 +107,8 @@ typedef struct shader_info { unsigned num_ssbos; /* Number of images used by this shader */ unsigned num_images; + /* Index of the last MSAA image. */ + int last_msaa_image; /* Which inputs are actually read */ uint64_t inputs_read; @@ -115,6 +129,9 @@ typedef struct shader_info { /* Whether or not this shader ever uses textureGather() */ bool uses_texture_gather; + /** Bitfield of which textures are used */ + uint32_t textures_used; + /** Bitfield of which textures are used by texelFetch() */ uint32_t textures_used_by_txf; @@ -136,16 +153,35 @@ typedef struct shader_info { /* The size of the gl_CullDistance[] array, if declared. */ unsigned cull_distance_array_size; + /* Whether the first UBO is the default uniform buffer, i.e. uniforms. */ + bool first_ubo_is_default_ubo; + /* Whether or not separate shader objects were used */ bool separate_shader; /** Was this shader linked with any transform feedback varyings? */ bool has_transform_feedback_varyings; + /* Whether flrp has been lowered. */ + bool flrp_lowered; + + /* SPV_KHR_float_controls: execution mode for floating point ops */ + unsigned float_controls_execution_mode; + union { struct { /* Which inputs are doubles */ uint64_t double_inputs; + + /* For AMD-specific driver-internal shaders. It replaces vertex + * buffer loads with code generating VS inputs from scalar registers. + * + * Valid values: SI_VS_BLIT_SGPRS_POS_* + */ + unsigned blit_sgprs_amd; + + /* True if the shader writes position in window space coordinates pre-transform */ + bool window_space_position; } vs; struct { @@ -174,6 +210,14 @@ typedef struct shader_info { struct { bool uses_discard; + /** + * True if this fragment shader requires helper invocations. This + * can be caused by the use of ALU derivative ops, texture + * instructions which do implicit derivatives, and the use of quad + * subgroup operations. + */ + bool needs_helper_invocations; + /** * Whether any inputs are declared with the "sample" qualifier. */ @@ -192,7 +236,13 @@ typedef struct shader_info { bool post_depth_coverage; + /** + * \name ARB_fragment_coord_conventions + * @{ + */ bool pixel_center_integer; + bool origin_upper_left; + /*@}*/ bool pixel_interlock_ordered; bool pixel_interlock_unordered; @@ -226,11 +276,27 @@ typedef struct shader_info { unsigned local_size[3]; bool local_size_variable; + char user_data_components_amd; /** * Size of shared variables accessed by the compute shader. */ unsigned shared_size; + + + /** + * pointer size is: + * AddressingModelLogical: 0 (default) + * AddressingModelPhysical32: 32 + * AddressingModelPhysical64: 64 + */ + unsigned ptr_size; + + /* + * Arrangement of invocations used to calculate derivatives in a compute + * shader. From NV_compute_shader_derivatives. + */ + enum gl_derivative_group derivative_group; } cs; /* Applies to both TCS and TES. */