X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fshader_info.h;h=f71b93e84d0b7c67d4df8e67b5eed5a2e5b87360;hb=6455fa9710614450ae659a28854d972330b58303;hp=8c58ee285ec9daecce84e3a9e58fd79a91ce0935;hpb=54d7fca077d051af0b91f0684cdfa0055915b917;p=mesa.git diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index 8c58ee285ec..f71b93e84d0 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -33,31 +33,50 @@ extern "C" { #endif struct spirv_supported_capabilities { - bool float64; - bool image_ms_array; - bool tessellation; + 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 image_ms_array; bool image_read_without_format; bool image_write_without_format; + bool int8; + bool int16; bool int64; + bool int64_atomics; + bool kernel; + bool min_lod; bool multiview; - bool variable_pointers; - bool storage_16bit; - bool int16; + bool physical_storage_buffer_address; + bool post_depth_coverage; + bool runtime_descriptor_array; bool shader_viewport_index_layer; + bool stencil_export; + bool storage_8bit; + bool storage_16bit; + bool storage_image_ms; bool subgroup_arithmetic; bool subgroup_ballot; bool subgroup_basic; bool subgroup_quad; bool subgroup_shuffle; bool subgroup_vote; - bool gcn_shader; - bool trinary_minmax; - bool descriptor_array_dynamic_indexing; - bool runtime_descriptor_array; - bool stencil_export; - bool atomic_storage; + bool tessellation; + bool transform_feedback; + bool variable_pointers; + bool float16; + bool amd_gcn_shader; + bool amd_shader_ballot; + bool amd_trinary_minmax; }; typedef struct shader_info { @@ -104,6 +123,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; @@ -114,6 +136,11 @@ typedef struct shader_info { */ bool uses_fddx_fddy; + /** + * True if this shader uses 64-bit ALU operations + */ + bool uses_64bit; + /* The size of the gl_ClipDistance[] array, if declared. */ unsigned clip_distance_array_size; @@ -131,8 +158,8 @@ typedef struct shader_info { /* Which inputs are doubles */ uint64_t double_inputs; - /* Which inputs are actually read and are double */ - uint64_t double_inputs_read; + /* True if the shader writes position in window space coordinates pre-transform */ + bool window_space_position; } vs; struct { @@ -179,13 +206,38 @@ 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; bool sample_interlock_ordered; bool sample_interlock_unordered; + /** + * Flags whether NIR's base types on the FS color outputs should be + * ignored. + * + * GLSL requires that fragment shader output base types match the + * render target's base types for the behavior to be defined. From + * the GL 4.6 spec: + * + * "If the values written by the fragment shader do not match the + * format(s) of the corresponding color buffer(s), the result is + * undefined." + * + * However, for NIR shaders translated from TGSI, we don't have the + * output types any more, so the driver will need to do whatever + * fixups are necessary to handle effectively untyped data being + * output from the FS. + */ + bool untyped_color_outputs; + /** gl_FragDepth layout for ARB_conservative_depth. */ enum gl_frag_depth_layout depth_layout; } fs; @@ -199,6 +251,21 @@ typedef struct shader_info { * 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. */