From: Marek Olšák <marek.ol...@amd.com> because the closed driver exposes it.
It's equivalent to ARB_gpu_shader_int64. In this patch, I did everything the same as we do for ARB_gpu_shader_int64. --- docs/relnotes/18.3.0.html | 1 + src/compiler/glsl/builtin_functions.cpp | 3 +- src/compiler/glsl/builtin_types.cpp | 3 +- src/compiler/glsl/glsl_lexer.ll | 18 +- src/compiler/glsl/glsl_parser_extras.cpp | 1 + src/compiler/glsl/glsl_parser_extras.h | 5 +- src/mapi/glapi/gen/AMD_gpu_shader_int64.xml | 239 ++++++++++++++++++++ src/mapi/glapi/gen/gl_API.xml | 2 + src/mesa/main/extensions_table.h | 1 + 9 files changed, 261 insertions(+), 12 deletions(-) create mode 100644 src/mapi/glapi/gen/AMD_gpu_shader_int64.xml diff --git a/docs/relnotes/18.3.0.html b/docs/relnotes/18.3.0.html index ac2cc1e893b..840a336d41a 100644 --- a/docs/relnotes/18.3.0.html +++ b/docs/relnotes/18.3.0.html @@ -45,20 +45,21 @@ TBD. <h2>New features</h2> <p> Note: some of the new features are only available with certain drivers. </p> <ul> <li>GL_AMD_framebuffer_multisample_advanced on radeonsi.</li> +<li>GL_AMD_gpu_shader_int64 on i965, nvc0, radeonsi.</li> <li>GL_EXT_window_rectangles on radeonsi.</li> </ul> <h2>Bug fixes</h2> <ul> <li>TBD</li> </ul> <h2>Changes</h2> diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp index 7119903795f..e37d96c4636 100644 --- a/src/compiler/glsl/builtin_functions.cpp +++ b/src/compiler/glsl/builtin_functions.cpp @@ -522,21 +522,22 @@ supports_arb_fragment_shader_interlock(const _mesa_glsl_parse_state *state) static bool shader_clock(const _mesa_glsl_parse_state *state) { return state->ARB_shader_clock_enable; } static bool shader_clock_int64(const _mesa_glsl_parse_state *state) { return state->ARB_shader_clock_enable && - state->ARB_gpu_shader_int64_enable; + (state->ARB_gpu_shader_int64_enable || + state->AMD_gpu_shader_int64_enable); } static bool shader_storage_buffer_object(const _mesa_glsl_parse_state *state) { return state->has_shader_storage_buffer_objects(); } static bool shader_trinary_minmax(const _mesa_glsl_parse_state *state) diff --git a/src/compiler/glsl/builtin_types.cpp b/src/compiler/glsl/builtin_types.cpp index 7a01cb48bc8..d2bcdd68138 100644 --- a/src/compiler/glsl/builtin_types.cpp +++ b/src/compiler/glsl/builtin_types.cpp @@ -404,21 +404,22 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) add_type(symbols, glsl_type::dmat3_type); add_type(symbols, glsl_type::dmat4_type); add_type(symbols, glsl_type::dmat2x3_type); add_type(symbols, glsl_type::dmat2x4_type); add_type(symbols, glsl_type::dmat3x2_type); add_type(symbols, glsl_type::dmat3x4_type); add_type(symbols, glsl_type::dmat4x2_type); add_type(symbols, glsl_type::dmat4x3_type); } - if (state->ARB_gpu_shader_int64_enable) { + if (state->ARB_gpu_shader_int64_enable || + state->AMD_gpu_shader_int64_enable) { add_type(symbols, glsl_type::int64_t_type); add_type(symbols, glsl_type::i64vec2_type); add_type(symbols, glsl_type::i64vec3_type); add_type(symbols, glsl_type::i64vec4_type); add_type(symbols, glsl_type::uint64_t_type); add_type(symbols, glsl_type::u64vec2_type); add_type(symbols, glsl_type::u64vec3_type); add_type(symbols, glsl_type::u64vec4_type); } diff --git a/src/compiler/glsl/glsl_lexer.ll b/src/compiler/glsl/glsl_lexer.ll index 87b64e09c16..74d4acca61f 100644 --- a/src/compiler/glsl/glsl_lexer.ll +++ b/src/compiler/glsl/glsl_lexer.ll @@ -656,29 +656,29 @@ isampler2DRect TYPE(140, 300, 140, 0, glsl_type::isampler2DRect_type); usampler2DRect TYPE(140, 300, 140, 0, glsl_type::usampler2DRect_type); isamplerBuffer TYPE_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, glsl_type::isamplerBuffer_type); usamplerBuffer TYPE_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable, glsl_type::usamplerBuffer_type); /* Additional reserved words in GLSL ES 3.00 */ resource KEYWORD(420, 300, 0, 0, RESOURCE); sample KEYWORD_WITH_ALT(400, 300, 400, 320, yyextra->ARB_gpu_shader5_enable || yyextra->OES_shader_multisample_interpolation_enable, SAMPLE); subroutine KEYWORD_WITH_ALT(400, 300, 400, 0, yyextra->ARB_shader_subroutine_enable, SUBROUTINE); /* Additional words for ARB_gpu_shader_int64 */ -int64_t TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable, glsl_type::int64_t_type); -i64vec2 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable, glsl_type::i64vec2_type); -i64vec3 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable, glsl_type::i64vec3_type); -i64vec4 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable, glsl_type::i64vec4_type); - -uint64_t TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable, glsl_type::uint64_t_type); -u64vec2 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable, glsl_type::u64vec2_type); -u64vec3 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable, glsl_type::u64vec3_type); -u64vec4 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable, glsl_type::u64vec4_type); +int64_t TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::int64_t_type); +i64vec2 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::i64vec2_type); +i64vec3 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::i64vec3_type); +i64vec4 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::i64vec4_type); + +uint64_t TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::uint64_t_type); +u64vec2 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::u64vec2_type); +u64vec3 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::u64vec3_type); +u64vec4 TYPE_WITH_ALT(0, 0, 0, 0, yyextra->ARB_gpu_shader_int64_enable || yyextra->AMD_gpu_shader_int64_enable, glsl_type::u64vec4_type); [_a-zA-Z][_a-zA-Z0-9]* { struct _mesa_glsl_parse_state *state = yyextra; if (state->es_shader && yyleng > 1024) { _mesa_glsl_error(yylloc, state, "Identifier `%s' exceeds 1024 characters", yytext); } return classify_identifier(state, yytext, yyleng, yylval); } diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp index 6d92f24ea22..a455dde122a 100644 --- a/src/compiler/glsl/glsl_parser_extras.cpp +++ b/src/compiler/glsl/glsl_parser_extras.cpp @@ -691,20 +691,21 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = { EXT(OES_tessellation_shader), EXT(OES_texture_3D), EXT(OES_texture_buffer), EXT(OES_texture_cube_map_array), EXT_AEP(OES_texture_storage_multisample_2d_array), EXT(OES_viewport_array), /* All other extensions go here, sorted alphabetically. */ EXT(AMD_conservative_depth), + EXT(AMD_gpu_shader_int64), EXT(AMD_shader_stencil_export), EXT(AMD_shader_trinary_minmax), EXT(AMD_vertex_shader_layer), EXT(AMD_vertex_shader_viewport_index), EXT(ANDROID_extension_pack_es31a), EXT(EXT_blend_func_extended), EXT(EXT_frag_depth), EXT(EXT_draw_buffers), EXT(EXT_clip_cull_distance), EXT(EXT_geometry_point_size), diff --git a/src/compiler/glsl/glsl_parser_extras.h b/src/compiler/glsl/glsl_parser_extras.h index 59a173418b7..81792de5704 100644 --- a/src/compiler/glsl/glsl_parser_extras.h +++ b/src/compiler/glsl/glsl_parser_extras.h @@ -249,21 +249,22 @@ struct _mesa_glsl_parse_state { || EXT_separate_shader_objects_enable; } bool has_double() const { return ARB_gpu_shader_fp64_enable || is_version(400, 0); } bool has_int64() const { - return ARB_gpu_shader_int64_enable; + return ARB_gpu_shader_int64_enable || + AMD_gpu_shader_int64_enable; } bool has_420pack() const { return ARB_shading_language_420pack_enable || is_version(420, 0); } bool has_420pack_or_es31() const { return ARB_shading_language_420pack_enable || is_version(420, 310); @@ -751,20 +752,22 @@ struct _mesa_glsl_parse_state { bool OES_texture_cube_map_array_warn; bool OES_texture_storage_multisample_2d_array_enable; bool OES_texture_storage_multisample_2d_array_warn; bool OES_viewport_array_enable; bool OES_viewport_array_warn; /* All other extensions go here, sorted alphabetically. */ bool AMD_conservative_depth_enable; bool AMD_conservative_depth_warn; + bool AMD_gpu_shader_int64_enable; + bool AMD_gpu_shader_int64_warn; bool AMD_shader_stencil_export_enable; bool AMD_shader_stencil_export_warn; bool AMD_shader_trinary_minmax_enable; bool AMD_shader_trinary_minmax_warn; bool AMD_vertex_shader_layer_enable; bool AMD_vertex_shader_layer_warn; bool AMD_vertex_shader_viewport_index_enable; bool AMD_vertex_shader_viewport_index_warn; bool ANDROID_extension_pack_es31a_enable; bool ANDROID_extension_pack_es31a_warn; diff --git a/src/mapi/glapi/gen/AMD_gpu_shader_int64.xml b/src/mapi/glapi/gen/AMD_gpu_shader_int64.xml new file mode 100644 index 00000000000..42eb750d110 --- /dev/null +++ b/src/mapi/glapi/gen/AMD_gpu_shader_int64.xml @@ -0,0 +1,239 @@ +<?xml version="1.0"?> +<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd"> + +<OpenGLAPI> + +<category name="GL_AMD_gpu_shader_int64" number="451"> + + <function name="Uniform1i64NV" alias="Uniform1i64ARB"> + <param name="location" type="GLint"/> + <param name="x" type="GLint64"/> + </function> + + <function name="Uniform2i64NV" alias="Uniform2i64ARB"> + <param name="location" type="GLint"/> + <param name="x" type="GLint64"/> + <param name="y" type="GLint64"/> + </function> + + <function name="Uniform3i64NV" alias="Uniform3i64ARB"> + <param name="location" type="GLint"/> + <param name="x" type="GLint64"/> + <param name="y" type="GLint64"/> + <param name="z" type="GLint64"/> + </function> + + <function name="Uniform4i64NV" alias="Uniform4i64ARB"> + <param name="location" type="GLint"/> + <param name="x" type="GLint64"/> + <param name="y" type="GLint64"/> + <param name="z" type="GLint64"/> + <param name="w" type="GLint64"/> + </function> + + <function name="Uniform1i64vNV" alias="Uniform1i64vARB"> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLint64 *" count="count"/> + </function> + + <function name="Uniform2i64vNV" alias="Uniform2i64vARB"> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLint64 *" count="count" count_scale="2"/> + </function> + + <function name="Uniform3i64vNV" alias="Uniform3i64vARB"> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLint64 *" count="count" count_scale="3"/> + </function> + + <function name="Uniform4i64vNV" alias="Uniform4i64vARB"> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLint64 *" count="count" count_scale="4"/> + </function> + + <function name="Uniform1ui64NV" alias="Uniform1ui64ARB"> + <param name="location" type="GLint"/> + <param name="x" type="GLuint64"/> + </function> + + <function name="Uniform2ui64NV" alias="Uniform2ui64ARB"> + <param name="location" type="GLint"/> + <param name="x" type="GLuint64"/> + <param name="y" type="GLuint64"/> + </function> + + <function name="Uniform3ui64NV" alias="Uniform3ui64ARB"> + <param name="location" type="GLint"/> + <param name="x" type="GLuint64"/> + <param name="y" type="GLuint64"/> + <param name="z" type="GLuint64"/> + </function> + + <function name="Uniform4ui64NV" alias="Uniform4ui64ARB"> + <param name="location" type="GLint"/> + <param name="x" type="GLuint64"/> + <param name="y" type="GLuint64"/> + <param name="z" type="GLuint64"/> + <param name="w" type="GLuint64"/> + </function> + + <function name="Uniform1ui64vNV" alias="Uniform1ui64vARB"> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLuint64 *" count="count"/> + </function> + + <function name="Uniform2ui64vNV" alias="Uniform2ui64vARB"> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLuint64 *" count="count" count_scale="2"/> + </function> + + <function name="Uniform3ui64vNV" alias="Uniform3ui64vARB"> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLuint64 *" count="count" count_scale="3"/> + </function> + + <function name="Uniform4ui64vNV" alias="Uniform4ui64vARB"> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLuint64 *" count="count" count_scale="4"/> + </function> + + <function name="GetUniformi64vNV" alias="GetUniformi64vARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="params" type="GLint64 *"/> + </function> + + <function name="GetUniformui64vNV" alias="GetUniformui64vARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="params" type="GLuint64 *"/> + </function> + + <function name="ProgramUniform1i64NV" alias="ProgramUniform1i64ARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="x" type="GLint64"/> + </function> + + <function name="ProgramUniform2i64NV" alias="ProgramUniform2i64ARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="x" type="GLint64"/> + <param name="y" type="GLint64"/> + </function> + + <function name="ProgramUniform3i64NV" alias="ProgramUniform3i64ARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="x" type="GLint64"/> + <param name="y" type="GLint64"/> + <param name="z" type="GLint64"/> + </function> + + <function name="ProgramUniform4i64NV" alias="ProgramUniform4i64ARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="x" type="GLint64"/> + <param name="y" type="GLint64"/> + <param name="z" type="GLint64"/> + <param name="w" type="GLint64"/> + </function> + + <function name="ProgramUniform1i64vNV" alias="ProgramUniform1i64vARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLint64 *" count="count"/> + </function> + + <function name="ProgramUniform2i64vNV" alias="ProgramUniform2i64vARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLint64 *" count="count" count_scale="2"/> + </function> + + <function name="ProgramUniform3i64vNV" alias="ProgramUniform3i64vARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLint64 *" count="count" count_scale="3"/> + </function> + + <function name="ProgramUniform4i64vNV" alias="ProgramUniform4i64vARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLint64 *" count="count" count_scale="4"/> + </function> + + <function name="ProgramUniform1ui64NV" alias="ProgramUniform1ui64ARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="x" type="GLuint64"/> + </function> + + <function name="ProgramUniform2ui64NV" alias="ProgramUniform2ui64ARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="x" type="GLuint64"/> + <param name="y" type="GLuint64"/> + </function> + + <function name="ProgramUniform3ui64NV" alias="ProgramUniform3ui64ARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="x" type="GLuint64"/> + <param name="y" type="GLuint64"/> + <param name="z" type="GLuint64"/> + </function> + + <function name="ProgramUniform4ui64NV" alias="ProgramUniform4ui64ARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="x" type="GLuint64"/> + <param name="y" type="GLuint64"/> + <param name="z" type="GLuint64"/> + <param name="w" type="GLuint64"/> + </function> + + <function name="ProgramUniform1ui64vNV" alias="ProgramUniform1ui64vARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLuint64 *" count="count"/> + </function> + + <function name="ProgramUniform2ui64vNV" alias="ProgramUniform2ui64vARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLuint64 *" count="count" count_scale="2"/> + </function> + + <function name="ProgramUniform3ui64vNV" alias="ProgramUniform3ui64vARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLuint64 *" count="count" count_scale="3"/> + </function> + + <function name="ProgramUniform4ui64vNV" alias="ProgramUniform4ui64vARB"> + <param name="program" type="GLuint"/> + <param name="location" type="GLint"/> + <param name="count" type="GLsizei"/> + <param name="value" type="const GLuint64 *" count="count" count_scale="4"/> + </function> + +</category> + +</OpenGLAPI> + diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index 95680f1d466..a45fdc5ed98 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -12950,20 +12950,22 @@ </category> <category name="GL_NVX_gpu_memory_info" number="438"> <enum name="GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX" value="0x9047" /> <enum name="GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX" value="0x9048" /> <enum name="GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX" value="0x9049" /> <enum name="GPU_MEMORY_INFO_EVICTION_COUNT_NVX" value="0x904A" /> <enum name="GPU_MEMORY_INFO_EVICTED_MEMORY_NVX" value="0x904B" /> </category> +<xi:include href="AMD_gpu_shader_int64.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> + <category name="GL_NV_fill_rectangle" number="466"> <enum name="FILL_RECTANGLE_NV" value="0x933C"/> </category> <category name="GL_INTEL_conservative_rasterization" number="491"> <enum name="CONSERVATIVE_RASTERIZATION_INTEL" value="0x83FE"/> </category> <category name="GL_NV_conservative_raster" number="465"> <enum name="CONSERVATIVE_RASTERIZATION_NV" value="0x9346"> diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h index b4c1b203c57..326fa6dc473 100644 --- a/src/mesa/main/extensions_table.h +++ b/src/mesa/main/extensions_table.h @@ -4,20 +4,21 @@ #define GLC 0 #define ES1 0 #define ES2 0 #define x ~0 EXT(3DFX_texture_compression_FXT1 , TDFX_texture_compression_FXT1 , GLL, GLC, x , x , 1999) EXT(AMD_conservative_depth , ARB_conservative_depth , GLL, GLC, x , x , 2009) EXT(AMD_draw_buffers_blend , ARB_draw_buffers_blend , GLL, GLC, x , x , 2009) EXT(AMD_framebuffer_multisample_advanced , AMD_framebuffer_multisample_advanced , GLL, GLC, x , ES2, 2018) +EXT(AMD_gpu_shader_int64 , ARB_gpu_shader_int64 , x , GLC, x , x , 2015) EXT(AMD_performance_monitor , AMD_performance_monitor , GLL, GLC, x , ES2, 2007) EXT(AMD_pinned_memory , AMD_pinned_memory , GLL, GLC, x , x , 2013) EXT(AMD_seamless_cubemap_per_texture , AMD_seamless_cubemap_per_texture , GLL, GLC, x , x , 2009) EXT(AMD_shader_stencil_export , ARB_shader_stencil_export , GLL, GLC, x , x , 2009) EXT(AMD_shader_trinary_minmax , dummy_true , GLL, GLC, x , x , 2012) EXT(AMD_vertex_shader_layer , AMD_vertex_shader_layer , GLL, GLC, x , x , 2012) EXT(AMD_vertex_shader_viewport_index , AMD_vertex_shader_viewport_index , GLL, GLC, x , x , 2012) EXT(ANDROID_extension_pack_es31a , ANDROID_extension_pack_es31a , x , x , x , 31, 2014) -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev