Mesa (master): mesa: expose ARB_tessellation_shader in the compatibility profile
Module: Mesa Branch: master Commit: 858ac8942d07d4c2d3e1cd1ac18381fa2e1de32c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=858ac8942d07d4c2d3e1cd1ac18381fa2e1de32c Author: Marek Olšák Date: Wed May 23 01:47:55 2018 -0400 mesa: expose ARB_tessellation_shader in the compatibility profile Gallium drivers don't expose this yet due to: "st/mesa: use PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY" Reviewed-by: Timothy Arceri --- src/mesa/drivers/dri/i965/intel_extensions.c | 3 ++- src/mesa/main/extensions_table.h | 2 +- src/mesa/state_tracker/st_extensions.c | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c index 93a4de139e..34597c5e05 100644 --- a/src/mesa/drivers/dri/i965/intel_extensions.c +++ b/src/mesa/drivers/dri/i965/intel_extensions.c @@ -236,7 +236,8 @@ intelInitExtensions(struct gl_context *ctx) ctx->Extensions.ARB_shader_image_size = true; ctx->Extensions.ARB_shader_precision = true; ctx->Extensions.ARB_shader_texture_image_samples = true; - ctx->Extensions.ARB_tessellation_shader = true; + if (ctx->API != API_OPENGL_COMPAT) + ctx->Extensions.ARB_tessellation_shader = true; ctx->Extensions.ARB_texture_compression_bptc = true; ctx->Extensions.ARB_texture_view = true; ctx->Extensions.ARB_shader_storage_buffer_object = true; diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h index 02b0d2689c..447eb087fc 100644 --- a/src/mesa/main/extensions_table.h +++ b/src/mesa/main/extensions_table.h @@ -132,7 +132,7 @@ EXT(ARB_shadow , ARB_shadow EXT(ARB_sparse_buffer , ARB_sparse_buffer , GLL, GLC, x , x , 2014) EXT(ARB_stencil_texturing , ARB_stencil_texturing , GLL, GLC, x , x , 2012) EXT(ARB_sync, ARB_sync , GLL, GLC, x , x , 2003) -EXT(ARB_tessellation_shader , ARB_tessellation_shader , x , GLC, x , x , 2009) +EXT(ARB_tessellation_shader , ARB_tessellation_shader , GLL, GLC, x , x , 2009) EXT(ARB_texture_barrier , NV_texture_barrier , GLL, GLC, x , x , 2014) EXT(ARB_texture_border_clamp, ARB_texture_border_clamp , GLL, x , x , x , 2000) EXT(ARB_texture_buffer_object , ARB_texture_buffer_object , GLL, GLC, x , x , 2008) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index b5622b330b..bf73d506c1 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -1020,8 +1020,10 @@ void st_init_extensions(struct pipe_screen *screen, /* Below are the cases which cannot be moved into tables easily. */ + /* The compatibility profile also requires GLSLVersionCompat >= 400. */ if (screen->get_shader_param(screen, PIPE_SHADER_TESS_CTRL, -PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) { +PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0 && + (api != API_OPENGL_COMPAT || consts->GLSLVersionCompat >= 400)) { extensions->ARB_tessellation_shader = GL_TRUE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: expose ARB_gpu_shader5 in the compatibility profile
Module: Mesa Branch: master Commit: 518d8065ced241d16becc36f512afe11b02021de URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=518d8065ced241d16becc36f512afe11b02021de Author: Marek Olšák Date: Wed Feb 14 22:38:15 2018 +0100 mesa: expose ARB_gpu_shader5 in the compatibility profile Gallium drivers don't expose this yet due to: "st/mesa: use PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY" Reviewed-by: Timothy Arceri --- src/mesa/drivers/dri/i965/intel_extensions.c | 6 -- src/mesa/main/extensions_table.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c index 192971f32c..2e79e96503 100644 --- a/src/mesa/drivers/dri/i965/intel_extensions.c +++ b/src/mesa/drivers/dri/i965/intel_extensions.c @@ -224,8 +224,10 @@ intelInitExtensions(struct gl_context *ctx) ctx->Extensions.ARB_conservative_depth = true; ctx->Extensions.ARB_derivative_control = true; ctx->Extensions.ARB_framebuffer_no_attachments = true; - ctx->Extensions.ARB_gpu_shader5 = true; - ctx->Extensions.ARB_gpu_shader_fp64 = devinfo->has_64bit_types; + if (ctx->API != API_OPENGL_COMPAT) { + ctx->Extensions.ARB_gpu_shader5 = true; + ctx->Extensions.ARB_gpu_shader_fp64 = devinfo->has_64bit_types; + } ctx->Extensions.ARB_shader_atomic_counters = true; ctx->Extensions.ARB_shader_atomic_counter_ops = true; ctx->Extensions.ARB_shader_clock = true; diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h index 9207e3f8c6..29eb41c605 100644 --- a/src/mesa/main/extensions_table.h +++ b/src/mesa/main/extensions_table.h @@ -74,7 +74,7 @@ EXT(ARB_framebuffer_sRGB, EXT_framebuffer_sRGB EXT(ARB_get_program_binary , dummy_true , GLL, GLC, x , x , 2010) EXT(ARB_get_texture_sub_image , dummy_true , GLL, GLC, x , x , 2014) EXT(ARB_gl_spirv, ARB_gl_spirv , x, GLC, x , x , 2016) -EXT(ARB_gpu_shader5 , ARB_gpu_shader5 , x , GLC, x , x , 2010) +EXT(ARB_gpu_shader5 , ARB_gpu_shader5 , GLL, GLC, x , x , 2010) EXT(ARB_gpu_shader_fp64 , ARB_gpu_shader_fp64 , x , GLC, x , x , 2010) EXT(ARB_gpu_shader_int64, ARB_gpu_shader_int64 , x , GLC, x , x , 2015) EXT(ARB_half_float_pixel, dummy_true , GLL, GLC, x , x , 2003) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: update fixed-func state constants for TCS, TES, GS
Module: Mesa Branch: master Commit: e453fc76e7d38df44aa27fed7df011df76b1d03a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e453fc76e7d38df44aa27fed7df011df76b1d03a Author: Marek Olšák Date: Wed May 23 01:37:12 2018 -0400 mesa: update fixed-func state constants for TCS, TES, GS Reviewed-by: Nicolai Hähnle Reviewed-by: Timothy Arceri --- src/mesa/main/state.c | 64 +-- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c index be8f3f302c..097cd9e20d 100644 --- a/src/mesa/main/state.c +++ b/src/mesa/main/state.c @@ -222,41 +222,49 @@ update_program(struct gl_context *ctx) } -/** - * Examine shader constants and return either _NEW_PROGRAM_CONSTANTS or 0. - */ static GLbitfield -update_program_constants(struct gl_context *ctx) +update_single_program_constants(struct gl_context *ctx, +struct gl_program *prog, +gl_shader_stage stage) { - GLbitfield new_state = 0x0; - - if (ctx->FragmentProgram._Current) { - const struct gl_program_parameter_list *params = - ctx->FragmentProgram._Current->Parameters; + if (prog) { + const struct gl_program_parameter_list *params = prog->Parameters; if (params && params->StateFlags & ctx->NewState) { - if (ctx->DriverFlags.NewShaderConstants[MESA_SHADER_FRAGMENT]) { -ctx->NewDriverState |= - ctx->DriverFlags.NewShaderConstants[MESA_SHADER_FRAGMENT]; - } else { -new_state |= _NEW_PROGRAM_CONSTANTS; - } + if (ctx->DriverFlags.NewShaderConstants[stage]) +ctx->NewDriverState |= ctx->DriverFlags.NewShaderConstants[stage]; + else +return _NEW_PROGRAM_CONSTANTS; } } + return 0; +} - /* Don't handle tessellation and geometry shaders here. They don't use -* any state constants. -*/ - if (ctx->VertexProgram._Current) { - const struct gl_program_parameter_list *params = - ctx->VertexProgram._Current->Parameters; - if (params && params->StateFlags & ctx->NewState) { - if (ctx->DriverFlags.NewShaderConstants[MESA_SHADER_VERTEX]) { -ctx->NewDriverState |= - ctx->DriverFlags.NewShaderConstants[MESA_SHADER_VERTEX]; - } else { -new_state |= _NEW_PROGRAM_CONSTANTS; - } +/** + * This updates fixed-func state constants such as gl_ModelViewMatrix. + * Examine shader constants and return either _NEW_PROGRAM_CONSTANTS or 0. + */ +static GLbitfield +update_program_constants(struct gl_context *ctx) +{ + GLbitfield new_state = + update_single_program_constants(ctx, ctx->VertexProgram._Current, + MESA_SHADER_VERTEX) | + update_single_program_constants(ctx, ctx->FragmentProgram._Current, + MESA_SHADER_FRAGMENT); + + if (ctx->API == API_OPENGL_COMPAT && + ctx->Const.GLSLVersionCompat >= 150) { + new_state |= + update_single_program_constants(ctx, ctx->GeometryProgram._Current, + MESA_SHADER_GEOMETRY); + + if (_mesa_has_ARB_tessellation_shader(ctx)) { + new_state |= +update_single_program_constants(ctx, ctx->TessCtrlProgram._Current, +MESA_SHADER_TESS_CTRL) | +update_single_program_constants(ctx, ctx->TessEvalProgram._Current, +MESA_SHADER_TESS_EVAL); } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: add PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY
Module: Mesa Branch: master Commit: 34ea55d8201b9bfd31dd432f45b5423861f8ad0b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=34ea55d8201b9bfd31dd432f45b5423861f8ad0b Author: Marek Olšák Date: Thu Feb 15 01:32:08 2018 +0100 gallium: add PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY Reviewed-by: Nicolai Hähnle Reviewed-by: Timothy Arceri --- src/gallium/docs/source/screen.rst | 6 ++ src/gallium/drivers/etnaviv/etnaviv_screen.c | 1 + src/gallium/drivers/freedreno/freedreno_screen.c | 1 + src/gallium/drivers/i915/i915_screen.c | 1 + src/gallium/drivers/llvmpipe/lp_screen.c | 2 ++ src/gallium/drivers/nouveau/nv30/nv30_screen.c | 1 + src/gallium/drivers/nouveau/nv50/nv50_screen.c | 2 ++ src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 2 ++ src/gallium/drivers/r300/r300_screen.c | 1 + src/gallium/drivers/r600/r600_pipe.c | 3 +++ src/gallium/drivers/radeonsi/si_get.c| 3 +++ src/gallium/drivers/softpipe/sp_screen.c | 2 ++ src/gallium/drivers/svga/svga_screen.c | 3 +++ src/gallium/drivers/swr/swr_screen.cpp | 2 ++ src/gallium/drivers/v3d/v3d_screen.c | 3 +++ src/gallium/drivers/vc4/vc4_screen.c | 1 + src/gallium/drivers/virgl/virgl_screen.c | 2 ++ src/gallium/include/pipe/p_defines.h | 1 + 18 files changed, 37 insertions(+) diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst index 5bc6ee99f0..0f18b7a94b 100644 --- a/src/gallium/docs/source/screen.rst +++ b/src/gallium/docs/source/screen.rst @@ -93,6 +93,12 @@ The integer capabilities: shader. * ``PIPE_CAP_GLSL_FEATURE_LEVEL``: Whether the driver supports features equivalent to a specific GLSL version. E.g. for GLSL 1.3, report 130. +* ``PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY``: Whether the driver supports + features equivalent to a specific GLSL version including all legacy OpenGL + features only present in the OpenGL compatibility profile. + The only legacy features that Gallium drivers must implement are + the legacy shader inputs and outputs (colors, texcoords, fog, clipvertex, + edgeflag). * ``PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION``: Whether quads adhere to the flatshade_first setting in ``pipe_rasterizer_state``. * ``PIPE_CAP_USER_VERTEX_BUFFERS``: Whether the driver supports user vertex diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c index 10e60f5f9e..e031807117 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_screen.c +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c @@ -154,6 +154,7 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT: return 4; /* XXX could easily be supported */ case PIPE_CAP_GLSL_FEATURE_LEVEL: + case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY: return 120; case PIPE_CAP_NPOT_TEXTURES: diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c index 7b97b79557..a414cb6d60 100644 --- a/src/gallium/drivers/freedreno/freedreno_screen.c +++ b/src/gallium/drivers/freedreno/freedreno_screen.c @@ -261,6 +261,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) return 64; case PIPE_CAP_GLSL_FEATURE_LEVEL: + case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY: if (glsl120) return 120; return is_ir3(screen) ? 140 : 120; diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c index 1b8c0ad9a2..b08d2283e7 100644 --- a/src/gallium/drivers/i915/i915_screen.c +++ b/src/gallium/drivers/i915/i915_screen.c @@ -342,6 +342,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap) return 64; case PIPE_CAP_GLSL_FEATURE_LEVEL: + case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY: return 120; case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT: diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index af1aff4e1e..f12ad09298 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -205,6 +205,8 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param) return 1; case PIPE_CAP_GLSL_FEATURE_LEVEL: return 330; + case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY: + return 140; case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: return 0; case PIPE_CAP_COMPUTE: diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c b/src/gallium/drivers/nouveau/nv30/nv30_screen.c index a24176a8e9..99249d26b3 100644 --- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c +++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c @@ -64,6 +64,7 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
Mesa (master): st/mesa: use PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY
Module: Mesa Branch: master Commit: dd93bc4f34e83516a08f3aa82f6171667080de67 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd93bc4f34e83516a08f3aa82f6171667080de67 Author: Marek Olšák Date: Wed May 23 00:46:02 2018 -0400 st/mesa: use PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY Reviewed-by: Timothy Arceri --- src/mesa/state_tracker/st_extensions.c | 25 +++-- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 2d56a88027..b5622b330b 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -936,12 +936,17 @@ void st_init_extensions(struct pipe_screen *screen, /* Figure out GLSL support and set GLSLVersion to it. */ consts->GLSLVersion = screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL); - consts->GLSLVersionCompat = _min(consts->GLSLVersion, 140); + consts->GLSLVersionCompat = + screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY); + + const unsigned GLSLVersion = + api == API_OPENGL_COMPAT ? consts->GLSLVersionCompat : + consts->GLSLVersion; _mesa_override_glsl_version(consts); if (options->force_glsl_version > 0 && - options->force_glsl_version <= consts->GLSLVersion) { + options->force_glsl_version <= GLSLVersion) { consts->ForceGLSLVersion = options->force_glsl_version; } @@ -955,24 +960,24 @@ void st_init_extensions(struct pipe_screen *screen, consts->AllowGLSLCrossStageInterpolationMismatch = options->allow_glsl_cross_stage_interpolation_mismatch; - if (consts->GLSLVersion >= 400) + if (GLSLVersion >= 400) extensions->ARB_gpu_shader5 = GL_TRUE; - if (consts->GLSLVersion >= 410) + if (GLSLVersion >= 410) extensions->ARB_shader_precision = GL_TRUE; /* This extension needs full OpenGL 3.2, but we don't know if that's * supported at this point. Only check the GLSL version. */ - if (consts->GLSLVersion >= 150 && + if (GLSLVersion >= 150 && screen->get_param(screen, PIPE_CAP_TGSI_VS_LAYER_VIEWPORT)) { extensions->AMD_vertex_shader_layer = GL_TRUE; } - if (consts->GLSLVersion >= 140) { + if (GLSLVersion >= 140) { if (screen->get_param(screen, PIPE_CAP_TGSI_ARRAY_COMPONENTS)) extensions->ARB_enhanced_layouts = GL_TRUE; } - if (consts->GLSLVersion >= 130) { + if (GLSLVersion >= 130) { consts->NativeIntegers = GL_TRUE; consts->MaxClipPlanes = 8; @@ -1024,7 +1029,7 @@ void st_init_extensions(struct pipe_screen *screen, * invocations of a geometry shader. There is no separate cap for that, so * we check the GLSLVersion. */ - if (consts->GLSLVersion >= 400 && + if (GLSLVersion >= 400 && screen->get_shader_param(screen, PIPE_SHADER_GEOMETRY, PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) { extensions->OES_geometry_shader = GL_TRUE; @@ -1171,7 +1176,7 @@ void st_init_extensions(struct pipe_screen *screen, consts->MaxViewports = screen->get_param(screen, PIPE_CAP_MAX_VIEWPORTS); if (consts->MaxViewports >= 16) { - if (consts->GLSLVersion >= 400) { + if (GLSLVersion >= 400) { consts->ViewportBounds.Min = -32768.0; consts->ViewportBounds.Max = 32767.0; } else { @@ -1201,7 +1206,7 @@ void st_init_extensions(struct pipe_screen *screen, * Assume that ES3 is supported if GLSL 3.30 is supported. * (OpenGL 3.3 is a requirement for that extension.) */ - if (consts->GLSLVersion >= 330 && + if (GLSLVersion >= 330 && /* Requirements for ETC2 emulation. */ screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_UNORM, PIPE_TEXTURE_2D, 0, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): glsl: parse #version XXX compatibility
Module: Mesa Branch: master Commit: d3a87537ddb40beb53364204d317530ac01a1a72 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3a87537ddb40beb53364204d317530ac01a1a72 Author: Marek Olšák Date: Wed Feb 14 21:00:09 2018 +0100 glsl: parse #version XXX compatibility Reviewed-by: Nicolai Hähnle Reviewed-by: Timothy Arceri --- src/compiler/glsl/glcpp/glcpp-parse.y | 12 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/compiler/glsl/glcpp/glcpp-parse.y b/src/compiler/glsl/glcpp/glcpp-parse.y index d83f99f1c7..4be5cfa3d5 100644 --- a/src/compiler/glsl/glcpp/glcpp-parse.y +++ b/src/compiler/glsl/glcpp/glcpp-parse.y @@ -2317,7 +2317,7 @@ _glcpp_parser_skip_stack_pop(glcpp_parser_t *parser, YYLTYPE *loc) static void _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t version, - const char *es_identifier, + const char *identifier, bool explicitly_set) { if (parser->version_set) @@ -2329,11 +2329,15 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t versio add_builtin_define (parser, "__VERSION__", version); parser->is_gles = (version == 100) || - (es_identifier && (strcmp(es_identifier, "es") == 0)); + (identifier && (strcmp(identifier, "es") == 0)); + bool is_compat = version >= 150 && identifier && +strcmp(identifier, "compatibility") == 0; /* Add pre-defined macros. */ if (parser->is_gles) add_builtin_define(parser, "GL_ES", 1); + else if (is_compat) + add_builtin_define(parser, "GL_compatibility_profile", 1); else if (version >= 150) add_builtin_define(parser, "GL_core_profile", 1); @@ -2368,8 +2372,8 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t versio if (explicitly_set) { _mesa_string_buffer_printf(parser->output, "#version %" PRIiMAX "%s%s", version, - es_identifier ? " " : "", - es_identifier ? es_identifier : ""); + identifier ? " " : "", + identifier ? identifier : ""); } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: expose AMD_vertex_shader_layer in the compatibility profile
Module: Mesa Branch: master Commit: 16ac832392c7737e42f4b1019dc3e8c688c6d3f4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=16ac832392c7737e42f4b1019dc3e8c688c6d3f4 Author: Marek Olšák Date: Thu Feb 15 01:20:46 2018 +0100 mesa: expose AMD_vertex_shader_layer in the compatibility profile This requires layered FBOs from GL 3.2. Gallium drivers don't expose this yet due to: "st/mesa: use PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY" Reviewed-by: Nicolai Hähnle Reviewed-by: Timothy Arceri --- src/mesa/drivers/dri/i965/intel_extensions.c | 3 ++- src/mesa/main/extensions_table.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c index 2e79e96503..93a4de139e 100644 --- a/src/mesa/drivers/dri/i965/intel_extensions.c +++ b/src/mesa/drivers/dri/i965/intel_extensions.c @@ -196,7 +196,8 @@ intelInitExtensions(struct gl_context *ctx) ctx->Extensions.ARB_texture_multisample = true; ctx->Extensions.ARB_uniform_buffer_object = true; - ctx->Extensions.AMD_vertex_shader_layer = true; + if (ctx->API != API_OPENGL_COMPAT) + ctx->Extensions.AMD_vertex_shader_layer = true; ctx->Extensions.EXT_framebuffer_multisample = true; ctx->Extensions.EXT_framebuffer_multisample_blit_scaled = true; ctx->Extensions.EXT_transform_feedback = true; diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h index 29eb41c605..02b0d2689c 100644 --- a/src/mesa/main/extensions_table.h +++ b/src/mesa/main/extensions_table.h @@ -15,7 +15,7 @@ EXT(AMD_pinned_memory , AMD_pinned_memory 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 , x , 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 , x , GLC, x , x , 2012) EXT(ANDROID_extension_pack_es31a, ANDROID_extension_pack_es31a , x , x , x , 31, 2014) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: print Compatibility Profile in the version string
Module: Mesa Branch: master Commit: 27a9f273109d0f7826013afcc3b9a3dcd6a79a91 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=27a9f273109d0f7826013afcc3b9a3dcd6a79a91 Author: Marek Olšák Date: Wed Feb 14 21:21:24 2018 +0100 mesa: print Compatibility Profile in the version string Reviewed-by: Nicolai Hähnle Reviewed-by: Timothy Arceri --- src/mesa/main/version.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c index 3f3dff0bde..1bdccf4a1d 100644 --- a/src/mesa/main/version.c +++ b/src/mesa/main/version.c @@ -128,7 +128,9 @@ create_version_string(struct gl_context *ctx, const char *prefix) , prefix, ctx->Version / 10, ctx->Version % 10, -(ctx->API == API_OPENGL_CORE) ? " (Core Profile)" : "" +(ctx->API == API_OPENGL_CORE) ? " (Core Profile)" : + (ctx->API == API_OPENGL_COMPAT && ctx->Version >= 32) ? +" (Compatibility Profile)" : "" ); } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: handle GL_UNSIGNED_INT64_ARB properly (v2)
Module: Mesa Branch: master Commit: a8e141387686cdf44b5868031283267acb99eba7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a8e141387686cdf44b5868031283267acb99eba7 Author: Marek Olšák Date: Fri May 25 16:37:29 2018 -0400 mesa: handle GL_UNSIGNED_INT64_ARB properly (v2) Bindless texture handles can be passed via vertex attribs using this type. This fixes a bunch of bindless piglit tests on radeonsi. Cc: 18.0 18.1 Reviewed-by: Ilia Mirkin --- src/mesa/main/glformats.c | 2 ++ src/mesa/vbo/vbo_private.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c index cba5e670db..667020c193 100644 --- a/src/mesa/main/glformats.c +++ b/src/mesa/main/glformats.c @@ -563,6 +563,8 @@ _mesa_bytes_per_vertex_attrib(GLint comps, GLenum type) return sizeof(GLuint); else return -1; + case GL_UNSIGNED_INT64_ARB: + return comps * 8; default: return -1; } diff --git a/src/mesa/vbo/vbo_private.h b/src/mesa/vbo/vbo_private.h index b69f836aa0..3f7d0dc608 100644 --- a/src/mesa/vbo/vbo_private.h +++ b/src/mesa/vbo/vbo_private.h @@ -104,8 +104,8 @@ vbo_attrtype_to_double_flag(GLenum format) case GL_FLOAT: case GL_INT: case GL_UNSIGNED_INT: - case GL_UNSIGNED_INT64_ARB: return GL_FALSE; + case GL_UNSIGNED_INT64_ARB: case GL_DOUBLE: return GL_TRUE; default: ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/mesa: fix assertion failures with GL_UNSIGNED_INT64_ARB (v2)
Module: Mesa Branch: master Commit: a7d0c53ab89ca86b705014925214101f5bc4187f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a7d0c53ab89ca86b705014925214101f5bc4187f Author: Marek Olšák Date: Fri May 25 16:37:29 2018 -0400 st/mesa: fix assertion failures with GL_UNSIGNED_INT64_ARB (v2) Bindless texture handles can be passed via vertex attribs using this type. They use the double codepath, so don't use st_pipe_vertex_format. Cc: 18.0 18.1 Reviewed-by: Ilia Mirkin --- src/mesa/state_tracker/st_atom_array.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mesa/state_tracker/st_atom_array.c b/src/mesa/state_tracker/st_atom_array.c index 9a0935e21a..e4fc19eb5e 100644 --- a/src/mesa/state_tracker/st_atom_array.c +++ b/src/mesa/state_tracker/st_atom_array.c @@ -324,7 +324,6 @@ static void init_velement_lowered(const struct st_vertex_program *vp, int src_offset, int instance_divisor, int vbo_index, int idx) { - const unsigned format = st_pipe_vertex_format(attrib); const GLubyte nr_components = attrib->Size; if (attrib->Doubles) { @@ -358,6 +357,8 @@ static void init_velement_lowered(const struct st_vertex_program *vp, } } } else { + const unsigned format = st_pipe_vertex_format(attrib); + init_velement([idx], src_offset, format, instance_divisor, vbo_index); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: add display list support for glPatchParameter{i,fv}()
Module: Mesa Branch: master Commit: 1f7a3a11025b18d46d46f7e3f5c45eda9e825dcd URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1f7a3a11025b18d46d46f7e3f5c45eda9e825dcd Author: Timothy Arceri Date: Mon May 28 20:57:37 2018 +1000 mesa: add display list support for glPatchParameter{i,fv}() This is required for tessellation shader Compat profile support. Reviewed-by: Marek Olšák --- src/mesa/main/dlist.c | 78 +++ 1 file changed, 78 insertions(+) diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index 8be223559a..4fc451000b 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -365,6 +365,11 @@ typedef enum OPCODE_UNIFORM_3UIV, OPCODE_UNIFORM_4UIV, + /* OpenGL 4.0 / GL_ARB_tessellation_shader */ + OPCODE_PATCH_PARAMETER_I, + OPCODE_PATCH_PARAMETER_FV_INNER, + OPCODE_PATCH_PARAMETER_FV_OUTER, + /* OpenGL 4.2 / GL_ARB_separate_shader_objects */ OPCODE_USE_PROGRAM_STAGES, OPCODE_PROGRAM_UNIFORM_1F, @@ -3272,6 +3277,54 @@ save_Ortho(GLdouble left, GLdouble right, static void GLAPIENTRY +save_PatchParameteri(GLenum pname, const GLint value) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PATCH_PARAMETER_I, 2); + if (n) { + n[1].e = pname; + n[2].i = value; + } + if (ctx->ExecuteFlag) { + CALL_PatchParameteri(ctx->Exec, (pname, value)); + } +} + + +static void GLAPIENTRY +save_PatchParameterfv(GLenum pname, const GLfloat *params) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + + if (pname == GL_PATCH_DEFAULT_OUTER_LEVEL) { + n = alloc_instruction(ctx, OPCODE_PATCH_PARAMETER_FV_OUTER, 5); + } else { + assert(pname == GL_PATCH_DEFAULT_INNER_LEVEL); + n = alloc_instruction(ctx, OPCODE_PATCH_PARAMETER_FV_INNER, 3); + } + if (n) { + n[1].e = pname; + if (pname == GL_PATCH_DEFAULT_OUTER_LEVEL) { + n[2].f = params[0]; + n[3].f = params[1]; + n[4].f = params[2]; + n[5].f = params[3]; + } else { + n[2].f = params[0]; + n[3].f = params[1]; + } + } + if (ctx->ExecuteFlag) { + CALL_PatchParameterfv(ctx->Exec, (pname, params)); + } +} + + +static void GLAPIENTRY save_PixelMapfv(GLenum map, GLint mapsize, const GLfloat *values) { GET_CURRENT_CONTEXT(ctx); @@ -8401,6 +8454,27 @@ execute_list(struct gl_context *ctx, GLuint list) case OPCODE_PASSTHROUGH: CALL_PassThrough(ctx->Exec, (n[1].f)); break; + case OPCODE_PATCH_PARAMETER_I: +CALL_PatchParameteri(ctx->Exec, (n[1].e, n[2].i)); +break; + case OPCODE_PATCH_PARAMETER_FV_INNER: +{ + GLfloat params[2]; + params[0] = n[2].f; + params[1] = n[3].f; + CALL_PatchParameterfv(ctx->Exec, (n[1].e, params)); +} +break; + case OPCODE_PATCH_PARAMETER_FV_OUTER: +{ + GLfloat params[4]; + params[0] = n[2].f; + params[1] = n[3].f; + params[2] = n[4].f; + params[3] = n[5].f; + CALL_PatchParameterfv(ctx->Exec, (n[1].e, params)); +} +break; case OPCODE_PIXEL_MAP: CALL_PixelMapfv(ctx->Exec, (n[1].e, n[2].i, get_pointer([3]))); @@ -9847,6 +9921,10 @@ _mesa_initialize_save_table(const struct gl_context *ctx) SET_PointParameterf(table, save_PointParameterfEXT); SET_PointParameterfv(table, save_PointParameterfvEXT); + /* 91. GL_ARB_tessellation_shader */ + SET_PatchParameteri(table, save_PatchParameteri); + SET_PatchParameterfv(table, save_PatchParameterfv); + /* 173. GL_EXT_blend_func_separate */ SET_BlendFuncSeparate(table, save_BlendFuncSeparateEXT); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): drisw: learn to query shmid handle type
Module: Mesa Branch: master Commit: 9feaf333716f08111ac8a921940e3a0e3666df0e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9feaf333716f08111ac8a921940e3a0e3666df0e Author: Marc-André Lureau Date: Mon Jun 15 14:48:27 2015 +0200 drisw: learn to query shmid handle type Reviewed-by: Dave Airlie Reviewed-by: Adam Jackson --- src/gallium/include/state_tracker/drisw_api.h | 1 + src/gallium/include/state_tracker/sw_winsys.h | 3 +-- src/gallium/include/state_tracker/winsys_handle.h | 1 + src/gallium/winsys/sw/dri/dri_sw_winsys.c | 10 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/gallium/include/state_tracker/drisw_api.h b/src/gallium/include/state_tracker/drisw_api.h index 36bef087a4..e365ab81f1 100644 --- a/src/gallium/include/state_tracker/drisw_api.h +++ b/src/gallium/include/state_tracker/drisw_api.h @@ -2,6 +2,7 @@ #define _DRISW_API_H_ #include "pipe/p_compiler.h" +#include "sw_winsys.h" struct pipe_screen; struct dri_drawable; diff --git a/src/gallium/include/state_tracker/sw_winsys.h b/src/gallium/include/state_tracker/sw_winsys.h index 0b792cd0ce..cd5838ad1d 100644 --- a/src/gallium/include/state_tracker/sw_winsys.h +++ b/src/gallium/include/state_tracker/sw_winsys.h @@ -37,14 +37,13 @@ #include "pipe/p_compiler.h" /* for boolean */ #include "pipe/p_format.h" - +#include "state_tracker/winsys_handle.h" #ifdef __cplusplus extern "C" { #endif -struct winsys_handle; struct pipe_screen; struct pipe_context; struct pipe_resource; diff --git a/src/gallium/include/state_tracker/winsys_handle.h b/src/gallium/include/state_tracker/winsys_handle.h index 746e87683a..167c1a937f 100644 --- a/src/gallium/include/state_tracker/winsys_handle.h +++ b/src/gallium/include/state_tracker/winsys_handle.h @@ -9,6 +9,7 @@ extern "C" { #define WINSYS_HANDLE_TYPE_SHARED 0 #define WINSYS_HANDLE_TYPE_KMS1 #define WINSYS_HANDLE_TYPE_FD 2 +#define WINSYS_HANDLE_TYPE_SHMID 3 /** * For use with pipe_screen::{texture_from_handle|texture_get_handle}. diff --git a/src/gallium/winsys/sw/dri/dri_sw_winsys.c b/src/gallium/winsys/sw/dri/dri_sw_winsys.c index b36a53e960..8335e52200 100644 --- a/src/gallium/winsys/sw/dri/dri_sw_winsys.c +++ b/src/gallium/winsys/sw/dri/dri_sw_winsys.c @@ -209,7 +209,15 @@ dri_sw_displaytarget_get_handle(struct sw_winsys *winsys, struct sw_displaytarget *dt, struct winsys_handle *whandle) { - assert(0); + struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt); + + if (whandle->type == WINSYS_HANDLE_TYPE_SHMID) { + if (dri_sw_dt->shmid < 0) + return FALSE; + whandle->handle = dri_sw_dt->shmid; + return TRUE; + } + return FALSE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): drisw: use getImageShm() if available
Module: Mesa Branch: master Commit: 17b27725fe5dd61ed461a45fb320464b45f045d8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=17b27725fe5dd61ed461a45fb320464b45f045d8 Author: Marc-André Lureau Date: Mon Jun 15 15:09:58 2015 +0200 drisw: use getImageShm() if available Reviewed-by: Dave Airlie Reviewed-by: Adam Jackson --- src/gallium/state_trackers/dri/drisw.c | 23 ++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/gallium/state_trackers/dri/drisw.c b/src/gallium/state_trackers/dri/drisw.c index 40cbca5494..e24fcba386 100644 --- a/src/gallium/state_trackers/dri/drisw.c +++ b/src/gallium/state_trackers/dri/drisw.c @@ -117,6 +117,26 @@ get_image2(__DRIdrawable *dPriv, int x, int y, int width, int height, int stride data, dPriv->loaderPrivate); } +static inline bool +get_image_shm(__DRIdrawable *dPriv, int x, int y, int width, int height, + struct pipe_resource *res) +{ + __DRIscreen *sPriv = dPriv->driScreenPriv; + const __DRIswrastLoaderExtension *loader = sPriv->swrast_loader; + struct winsys_handle whandle; + + whandle.type = WINSYS_HANDLE_TYPE_SHMID; + + if (loader->base.version < 4 || !loader->getImageShm) + return FALSE; + + if (!res->screen->resource_get_handle(res->screen, NULL, res, , PIPE_HANDLE_USAGE_WRITE)) + return FALSE; + + loader->getImageShm(dPriv, x, y, width, height, whandle.handle, dPriv->loaderPrivate); + return TRUE; +} + static void drisw_update_drawable_info(struct dri_drawable *drawable) { @@ -364,7 +384,8 @@ drisw_update_tex_buffer(struct dri_drawable *drawable, x, y, w, h, ); /* Copy the Drawable content to the mapped texture buffer */ - get_image(dPriv, x, y, w, h, map); + if (!get_image_shm(dPriv, x, y, w, h, res)) + get_image(dPriv, x, y, w, h, map); /* The pipe transfer has a pitch rounded up to the nearest 64 pixels. get_image() has a pitch rounded up to 4 bytes. */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: move winsys handle to it's own file.
Module: Mesa Branch: master Commit: d2eaff33d0132ef17eb458f04e5369985129ce31 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d2eaff33d0132ef17eb458f04e5369985129ce31 Author: Marc-André Lureau Date: Tue May 29 11:17:11 2018 +1000 gallium: move winsys handle to it's own file. This will be used in the drisw interface later, which isn't drm specific. Reviewed-by: Marek Olšák --- src/gallium/include/state_tracker/drm_driver.h| 49 +-- src/gallium/include/state_tracker/winsys_handle.h | 57 +++ 2 files changed, 59 insertions(+), 47 deletions(-) diff --git a/src/gallium/include/state_tracker/drm_driver.h b/src/gallium/include/state_tracker/drm_driver.h index f188b5a7d4..19cd19f26e 100644 --- a/src/gallium/include/state_tracker/drm_driver.h +++ b/src/gallium/include/state_tracker/drm_driver.h @@ -4,58 +4,13 @@ #include "pipe/p_compiler.h" +#include "winsys_handle.h" + struct pipe_screen; struct pipe_screen_config; struct pipe_context; struct pipe_resource; -#define DRM_API_HANDLE_TYPE_SHARED 0 -#define DRM_API_HANDLE_TYPE_KMS1 -#define DRM_API_HANDLE_TYPE_FD 2 - - -/** - * For use with pipe_screen::{texture_from_handle|texture_get_handle}. - */ -struct winsys_handle -{ - /** -* Input for texture_from_handle, valid values are -* DRM_API_HANDLE_TYPE_SHARED or DRM_API_HANDLE_TYPE_FD. -* Input to texture_get_handle, -* to select handle for kms, flink, or prime. -*/ - unsigned type; - /** -* Input for texture_get_handle, allows to export the offset -* of a specific layer of an array texture. -*/ - unsigned layer; - /** -* Input to texture_from_handle. -* Output for texture_get_handle. -*/ - unsigned handle; - /** -* Input to texture_from_handle. -* Output for texture_get_handle. -*/ - unsigned stride; - /** -* Input to texture_from_handle. -* Output for texture_get_handle. -*/ - unsigned offset; - - /** -* Input to resource_from_handle. -* Output from resource_get_handle. -*/ - uint64_t modifier; -}; - - - /** * Configuration queries. */ diff --git a/src/gallium/include/state_tracker/winsys_handle.h b/src/gallium/include/state_tracker/winsys_handle.h new file mode 100644 index 00..9217e4dcbf --- /dev/null +++ b/src/gallium/include/state_tracker/winsys_handle.h @@ -0,0 +1,57 @@ + +#ifndef _WINSYS_HANDLE_H_ +#define _WINSYS_HANDLE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define DRM_API_HANDLE_TYPE_SHARED 0 +#define DRM_API_HANDLE_TYPE_KMS1 +#define DRM_API_HANDLE_TYPE_FD 2 + +/** + * For use with pipe_screen::{texture_from_handle|texture_get_handle}. + */ +struct winsys_handle +{ + /** +* Input for texture_from_handle, valid values are +* WINSYS_HANDLE_TYPE_SHARED or WINSYS_HANDLE_TYPE_FD. +* Input to texture_get_handle, +* to select handle for kms, flink, or prime. +*/ + unsigned type; + /** +* Input for texture_get_handle, allows to export the offset +* of a specific layer of an array texture. +*/ + unsigned layer; + /** +* Input to texture_from_handle. +* Output for texture_get_handle. +*/ + unsigned handle; + /** +* Input to texture_from_handle. +* Output for texture_get_handle. +*/ + unsigned stride; + /** +* Input to texture_from_handle. +* Output for texture_get_handle. +*/ + unsigned offset; + + /** +* Input to resource_from_handle. +* Output from resource_get_handle. +*/ + uint64_t modifier; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* _WINSYS_HANDLE_H_ */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): drisw: use putImageShm if available
Module: Mesa Branch: master Commit: 63c427fa71a07649d5c033a5c6184ef701348590 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=63c427fa71a07649d5c033a5c6184ef701348590 Author: Marc-André Lureau Date: Wed Jun 10 17:34:15 2015 +0200 drisw: use putImageShm if available If the DRIswrastLoaderExtension implements putImageShm, bind it to drisw_loader_funcs. Reviewed-by: Dave Airlie Reviewed-by: Adam Jackson --- src/gallium/include/state_tracker/drisw_api.h | 3 +++ src/gallium/state_trackers/dri/drisw.c| 37 +-- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/gallium/include/state_tracker/drisw_api.h b/src/gallium/include/state_tracker/drisw_api.h index 03d5ee405a..36bef087a4 100644 --- a/src/gallium/include/state_tracker/drisw_api.h +++ b/src/gallium/include/state_tracker/drisw_api.h @@ -18,6 +18,9 @@ struct drisw_loader_funcs void *data, unsigned width, unsigned height); void (*put_image2) (struct dri_drawable *dri_drawable, void *data, int x, int y, unsigned width, unsigned height, unsigned stride); + void (*put_image_shm) (struct dri_drawable *dri_drawable, + int shmid, char *shmaddr, unsigned offset, + int x, int y, unsigned width, unsigned height, unsigned stride); }; #endif diff --git a/src/gallium/state_trackers/dri/drisw.c b/src/gallium/state_trackers/dri/drisw.c index eb5752386d..40cbca5494 100644 --- a/src/gallium/state_trackers/dri/drisw.c +++ b/src/gallium/state_trackers/dri/drisw.c @@ -26,14 +26,6 @@ * **/ -/* TODO: - * - * xshm / EGLImage: - * - * Allow the loaders to use the XSHM extension. It probably requires callbacks - * for createImage/destroyImage similar to DRI2 getBuffers. - */ - #include "util/u_format.h" #include "util/u_memory.h" #include "util/u_inlines.h" @@ -87,6 +79,19 @@ put_image2(__DRIdrawable *dPriv, void *data, int x, int y, } static inline void +put_image_shm(__DRIdrawable *dPriv, int shmid, char *shmaddr, + unsigned offset, int x, int y, + unsigned width, unsigned height, unsigned stride) +{ + __DRIscreen *sPriv = dPriv->driScreenPriv; + const __DRIswrastLoaderExtension *loader = sPriv->swrast_loader; + + loader->putImageShm(dPriv, __DRI_SWRAST_IMAGE_OP_SWAP, + x, y, width, height, stride, + shmid, shmaddr, offset, dPriv->loaderPrivate); +} + +static inline void get_image(__DRIdrawable *dPriv, int x, int y, int width, int height, void *data) { __DRIscreen *sPriv = dPriv->driScreenPriv; @@ -153,6 +158,17 @@ drisw_put_image2(struct dri_drawable *drawable, } static inline void +drisw_put_image_shm(struct dri_drawable *drawable, +int shmid, char *shmaddr, unsigned offset, +int x, int y, unsigned width, unsigned height, +unsigned stride) +{ + __DRIdrawable *dPriv = drawable->dPriv; + + put_image_shm(dPriv, shmid, shmaddr, offset, x, y, width, height, stride); +} + +static inline void drisw_present_texture(__DRIdrawable *dPriv, struct pipe_resource *ptex, struct pipe_box *sub_box) { @@ -394,6 +410,7 @@ static struct drisw_loader_funcs drisw_lf = { static const __DRIconfig ** drisw_init_screen(__DRIscreen * sPriv) { + const __DRIswrastLoaderExtension *loader = sPriv->swrast_loader; const __DRIconfig **configs; struct dri_screen *screen; struct pipe_screen *pscreen = NULL; @@ -409,6 +426,10 @@ drisw_init_screen(__DRIscreen * sPriv) sPriv->driverPrivate = (void *)screen; sPriv->extensions = drisw_screen_extensions; + if (loader->base.version >= 4) { + if (loader->putImageShm) + drisw_lf.put_image_shm = drisw_put_image_shm; + } if (pipe_loader_sw_probe_dri(>dev, _lf)) { dri_init_options(screen); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): drisw/glx: implement getImageShm
Module: Mesa Branch: master Commit: 33ce3aa512fa9c8313003f61516588e1ae3e5f8f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=33ce3aa512fa9c8313003f61516588e1ae3e5f8f Author: Marc-André Lureau Date: Mon Jun 15 15:07:34 2015 +0200 drisw/glx: implement getImageShm Reviewed-by: Dave Airlie Reviewed-by: Adam Jackson --- src/glx/drisw_glx.c | 31 ++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index 641917361b..3ff6a9617f 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -313,6 +313,32 @@ swrastGetImage(__DRIdrawable * read, swrastGetImage2(read, x, y, w, h, 0, data, loaderPrivate); } +static void +swrastGetImageShm(__DRIdrawable * read, + int x, int y, int w, int h, + int shmid, void *loaderPrivate) +{ + struct drisw_drawable *prp = loaderPrivate; + __GLXDRIdrawable *pread = &(prp->base); + Display *dpy = pread->psc->dpy; + Drawable readable; + XImage *ximage; + + if (!prp->ximage || shmid != prp->shminfo.shmid) { + if (!XCreateDrawable(prp, shmid, dpy)) + return; + } + readable = pread->xDrawable; + + ximage = prp->ximage; + ximage->data = prp->shminfo.shmaddr; /* no offset */ + ximage->width = w; + ximage->height = h; + ximage->bytes_per_line = bytes_per_line(w * ximage->bits_per_pixel, 32); + + XShmGetImage(dpy, readable, ximage, x, y, ~0L); +} + static __DRIswrastLoaderExtension swrastLoaderExtension = { .base = {__DRI_SWRAST_LOADER, 4 }, @@ -322,6 +348,7 @@ static __DRIswrastLoaderExtension swrastLoaderExtension = { .putImage2 = swrastPutImage2, .getImage2 = swrastGetImage2, .putImageShm = swrastPutImageShm, + .getImageShm = swrastGetImageShm, }; static const __DRIextension *loader_extensions[] = { @@ -802,8 +829,10 @@ driswCreateScreen(int screen, struct glx_display *priv) if (extensions == NULL) goto handle_error; - if (!check_xshm(psc->base.dpy)) + if (!check_xshm(psc->base.dpy)) { swrastLoaderExtension.putImageShm = NULL; + swrastLoaderExtension.getImageShm = NULL; + } for (i = 0; extensions[i]; i++) { if (strcmp(extensions[i]->name, __DRI_CORE) == 0) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): glx/drisw: make the shm/non-shm loader extensions separately.
Module: Mesa Branch: master Commit: d3ff4787322c5855aad1e9ee0ee0aa141f7d6420 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3ff4787322c5855aad1e9ee0ee0aa141f7d6420 Author: Dave Airlie Date: Tue May 29 13:04:03 2018 +1000 glx/drisw: make the shm/non-shm loader extensions separately. I disliked removing the const here, function tables are meant to be const just to avoid having to think about them, make a second table for the shm vs non-shm paths to use. Reviewed-by: Adam Jackson --- src/glx/drisw_glx.c | 32 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index 3ff6a9617f..a2777100a3 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -339,7 +339,7 @@ swrastGetImageShm(__DRIdrawable * read, XShmGetImage(dpy, readable, ximage, x, y, ~0L); } -static __DRIswrastLoaderExtension swrastLoaderExtension = { +static const __DRIswrastLoaderExtension swrastLoaderExtension_shm = { .base = {__DRI_SWRAST_LOADER, 4 }, .getDrawableInfo = swrastGetDrawableInfo, @@ -351,7 +351,22 @@ static __DRIswrastLoaderExtension swrastLoaderExtension = { .getImageShm = swrastGetImageShm, }; -static const __DRIextension *loader_extensions[] = { +static const __DRIextension *loader_extensions_shm[] = { + _shm.base, + NULL +}; + +static const __DRIswrastLoaderExtension swrastLoaderExtension = { + .base = {__DRI_SWRAST_LOADER, 3 }, + + .getDrawableInfo = swrastGetDrawableInfo, + .putImage= swrastPutImage, + .getImage= swrastGetImage, + .putImage2 = swrastPutImage2, + .getImage2 = swrastGetImage2, +}; + +static const __DRIextension *loader_extensions_noshm[] = { , NULL }; @@ -811,6 +826,7 @@ driswCreateScreen(int screen, struct glx_display *priv) struct drisw_screen *psc; struct glx_config *configs = NULL, *visuals = NULL; int i; + const __DRIextension **loader_extensions_local; psc = calloc(1, sizeof *psc); if (psc == NULL) @@ -829,10 +845,10 @@ driswCreateScreen(int screen, struct glx_display *priv) if (extensions == NULL) goto handle_error; - if (!check_xshm(psc->base.dpy)) { - swrastLoaderExtension.putImageShm = NULL; - swrastLoaderExtension.getImageShm = NULL; - } + if (!check_xshm(psc->base.dpy)) + loader_extensions_local = loader_extensions_noshm; + else + loader_extensions_local = loader_extensions_shm; for (i = 0; extensions[i]; i++) { if (strcmp(extensions[i]->name, __DRI_CORE) == 0) @@ -850,12 +866,12 @@ driswCreateScreen(int screen, struct glx_display *priv) if (psc->swrast->base.version >= 4) { psc->driScreen = - psc->swrast->createNewScreen2(screen, loader_extensions, + psc->swrast->createNewScreen2(screen, loader_extensions_local, extensions, _configs, psc); } else { psc->driScreen = - psc->swrast->createNewScreen(screen, loader_extensions, + psc->swrast->createNewScreen(screen, loader_extensions_local, _configs, psc); } if (psc->driScreen == NULL) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): drisw/glx: use XShm if possible
Module: Mesa Branch: master Commit: bcd80be49a8260c2233dd07b2048d459a91a9c91 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bcd80be49a8260c2233dd07b2048d459a91a9c91 Author: Marc-André Lureau Date: Wed Jun 10 17:58:31 2015 +0200 drisw/glx: use XShm if possible Implements putImageShm from DRIswrastLoaderExtension. If XShm extension is not available, or fails, it will fallback on regular XPutImage(). Tested on Linux only with 16bpp and 32bpp visual. (airlied: tested on 24bpp as well) Reviewed-by: Dave Airlie Reviewed-by: Adam Jackson --- src/glx/drisw_glx.c | 165 +++ src/glx/drisw_priv.h | 3 + 2 files changed, 144 insertions(+), 24 deletions(-) diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index df2467a5c2..641917361b 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -28,10 +28,12 @@ #include #include "dri_common.h" #include "drisw_priv.h" +#include +#include static Bool -XCreateDrawable(struct drisw_drawable * pdp, -Display * dpy, XID drawable, int visualid) +XCreateGCs(struct drisw_drawable * pdp, + Display * dpy, XID drawable, int visualid) { XGCValues gcvalues; long visMask; @@ -56,15 +58,78 @@ XCreateDrawable(struct drisw_drawable * pdp, if (!pdp->visinfo || num_visuals == 0) return False; - /* create XImage */ - pdp->ximage = XCreateImage(dpy, - pdp->visinfo->visual, - pdp->visinfo->depth, - ZPixmap, 0, /* format, offset */ - NULL, /* data */ - 0, 0, /* width, height */ - 32, /* bitmap_pad */ - 0); /* bytes_per_line */ + return True; +} + +static int xshm_error = 0; +static int xshm_opcode = -1; + +/** + * Catches potential Xlib errors. + */ +static int +handle_xerror(Display *dpy, XErrorEvent *event) +{ + (void) dpy; + + assert(xshm_opcode != -1); + if (event->request_code != xshm_opcode || + event->minor_code != X_ShmAttach) + return 0; + + xshm_error = 1; + return 0; +} + +static Bool +XCreateDrawable(struct drisw_drawable * pdp, int shmid, Display * dpy) +{ + if (pdp->ximage) { + XDestroyImage(pdp->ximage); + pdp->ximage = NULL; + } + + if (!xshm_error && shmid >= 0) { + pdp->shminfo.shmid = shmid; + pdp->ximage = XShmCreateImage(dpy, +pdp->visinfo->visual, +pdp->visinfo->depth, +ZPixmap, /* format */ +NULL, /* data */ +>shminfo,/* shminfo */ +0, 0);/* width, height */ + if (pdp->ximage != NULL) { + int (*old_handler)(Display *, XErrorEvent *); + + /* dispatch pending errors */ + XSync(dpy, False); + + old_handler = XSetErrorHandler(handle_xerror); + /* This may trigger the X protocol error we're ready to catch: */ + XShmAttach(dpy, >shminfo); + XSync(dpy, False); + + if (xshm_error) { + /* we are on a remote display, this error is normal, don't print it */ +XDestroyImage(pdp->ximage); +pdp->ximage = NULL; + } + + (void) XSetErrorHandler(old_handler); + } + } + + if (pdp->ximage == NULL) { + pdp->shminfo.shmid = -1; + pdp->ximage = XCreateImage(dpy, + pdp->visinfo->visual, + pdp->visinfo->depth, + ZPixmap, 0, /* format, offset */ + NULL, /* data */ + 0, 0, /* width, height */ + 32, /* bitmap_pad */ + 0); /* bytes_per_line */ + } /** * swrast does not handle 24-bit depth with 24 bpp, so let X do the @@ -79,7 +144,9 @@ XCreateDrawable(struct drisw_drawable * pdp, static void XDestroyDrawable(struct drisw_drawable * pdp, Display * dpy, XID drawable) { - XDestroyImage(pdp->ximage); + if (pdp->ximage) + XDestroyImage(pdp->ximage); + free(pdp->visinfo); XFreeGC(dpy, pdp->gc); @@ -133,9 +200,9 @@ bytes_per_line(unsigned pitch_bits, unsigned mul) } static void -swrastPutImage2(__DRIdrawable * draw, int op, +swrastXPutImage(__DRIdrawable * draw, int op, int x, int y, int w, int h, int stride, -char *data, void *loaderPrivate) +int shmid, char *data, void *loaderPrivate) { struct drisw_drawable *pdp = loaderPrivate;
Mesa (master): drisw: use shared memory when possible
Module: Mesa Branch: master Commit: cf54bd5e8381dba18d52fe438acda20cc1685bf3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf54bd5e8381dba18d52fe438acda20cc1685bf3 Author: Marc-André Lureau Date: Wed Jun 10 17:45:11 2015 +0200 drisw: use shared memory when possible If drisw_loader_funcs implements put_image_shm, allocates display target data with shared memory and display with put_image_shm(). Reviewed-by: Dave Airlie Reviewed-by: Adam Jackson --- src/gallium/winsys/sw/dri/dri_sw_winsys.c | 72 +-- 1 file changed, 60 insertions(+), 12 deletions(-) diff --git a/src/gallium/winsys/sw/dri/dri_sw_winsys.c b/src/gallium/winsys/sw/dri/dri_sw_winsys.c index 00849985d6..b36a53e960 100644 --- a/src/gallium/winsys/sw/dri/dri_sw_winsys.c +++ b/src/gallium/winsys/sw/dri/dri_sw_winsys.c @@ -26,6 +26,9 @@ * **/ +#include +#include + #include "pipe/p_compiler.h" #include "pipe/p_format.h" #include "util/u_inlines.h" @@ -45,6 +48,7 @@ struct dri_sw_displaytarget unsigned stride; unsigned map_flags; + int shmid; void *data; void *mapped; const void *front_private; @@ -79,6 +83,25 @@ dri_sw_is_displaytarget_format_supported( struct sw_winsys *ws, return TRUE; } +static char * +alloc_shm(struct dri_sw_displaytarget *dri_sw_dt, unsigned size) +{ + char *addr; + + dri_sw_dt->shmid = shmget(IPC_PRIVATE, size, IPC_CREAT|0777); + if (dri_sw_dt->shmid < 0) + return NULL; + + addr = (char *) shmat(dri_sw_dt->shmid, 0, 0); + /* mark the segment immediately for deletion to avoid leaks */ + shmctl(dri_sw_dt->shmid, IPC_RMID, 0); + + if (addr == (char *) -1) + return NULL; + + return addr; +} + static struct sw_displaytarget * dri_sw_displaytarget_create(struct sw_winsys *winsys, unsigned tex_usage, @@ -88,6 +111,7 @@ dri_sw_displaytarget_create(struct sw_winsys *winsys, const void *front_private, unsigned *stride) { + struct dri_sw_winsys *ws = dri_sw_winsys(winsys); struct dri_sw_displaytarget *dri_sw_dt; unsigned nblocksy, size, format_stride; @@ -106,7 +130,13 @@ dri_sw_displaytarget_create(struct sw_winsys *winsys, nblocksy = util_format_get_nblocksy(format, height); size = dri_sw_dt->stride * nblocksy; - dri_sw_dt->data = align_malloc(size, alignment); + dri_sw_dt->shmid = -1; + if (ws->lf->put_image_shm) + dri_sw_dt->data = alloc_shm(dri_sw_dt, size); + + if(!dri_sw_dt->data) + dri_sw_dt->data = align_malloc(size, alignment); + if(!dri_sw_dt->data) goto no_data; @@ -125,7 +155,12 @@ dri_sw_displaytarget_destroy(struct sw_winsys *ws, { struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt); - align_free(dri_sw_dt->data); + if (dri_sw_dt->shmid >= 0) { + shmdt(dri_sw_dt->data); + shmctl(dri_sw_dt->shmid, IPC_RMID, 0); + } else { + align_free(dri_sw_dt->data); + } FREE(dri_sw_dt); } @@ -187,25 +222,38 @@ dri_sw_displaytarget_display(struct sw_winsys *ws, struct dri_sw_winsys *dri_sw_ws = dri_sw_winsys(ws); struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt); struct dri_drawable *dri_drawable = (struct dri_drawable *)context_private; - unsigned width, height; + unsigned width, height, x = 0, y = 0; unsigned blsize = util_format_get_blocksize(dri_sw_dt->format); + unsigned offset = 0; + void *data = dri_sw_dt->data; /* Set the width to 'stride / cpp'. * * PutImage correctly clips to the width of the dst drawable. */ - width = dri_sw_dt->stride / blsize; - - height = dri_sw_dt->height; - if (box) { - void *data; - data = (char *)dri_sw_dt->data + (dri_sw_dt->stride * box->y) + box->x * blsize; - dri_sw_ws->lf->put_image2(dri_drawable, data, - box->x, box->y, box->width, box->height, dri_sw_dt->stride); + offset = (dri_sw_dt->stride * box->y) + box->x * blsize; + data += offset; + x = box->x; + y = box->y; + width = box->width; + height = box->height; } else { - dri_sw_ws->lf->put_image(dri_drawable, dri_sw_dt->data, width, height); + width = dri_sw_dt->stride / blsize; + height = dri_sw_dt->height; } + + if (dri_sw_dt->shmid != -1) { + dri_sw_ws->lf->put_image_shm(dri_drawable, dri_sw_dt->shmid, dri_sw_dt->data, offset, + x, y, width, height, dri_sw_dt->stride); + return; + } + + if (box) + dri_sw_ws->lf->put_image2(dri_drawable, data, +x, y, width, height, dri_sw_dt->stride); + else + dri_sw_ws->lf->put_image(dri_drawable, data, width, height); } static void ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org
Mesa (master): dri: add putImageShm and getImageShm to swrastLoader
Module: Mesa Branch: master Commit: de8085e649235cd120e9eb06b82cc1dbabeb8652 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=de8085e649235cd120e9eb06b82cc1dbabeb8652 Author: Marc-André Lureau Date: Wed Jun 10 17:28:47 2015 +0200 dri: add putImageShm and getImageShm to swrastLoader Add new API to put and get an image using shared memory. Instead of only passing the data pointer, 3 arguments are given: the shmid, the data offset and the shmaddr. Bump interface version. Reviewed-by: Dave Airlie Reviewed-by: Adam Jackson --- include/GL/internal/dri_interface.h | 20 +++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 319a1fe4f9..c32cdd3767 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -589,7 +589,7 @@ struct __DRIdamageExtensionRec { * SWRast Loader extension. */ #define __DRI_SWRAST_LOADER "DRI_SWRastLoader" -#define __DRI_SWRAST_LOADER_VERSION 3 +#define __DRI_SWRAST_LOADER_VERSION 4 struct __DRIswrastLoaderExtensionRec { __DRIextension base; @@ -631,6 +631,24 @@ struct __DRIswrastLoaderExtensionRec { void (*getImage2)(__DRIdrawable *readable, int x, int y, int width, int height, int stride, char *data, void *loaderPrivate); + +/** + * Put shm image to drawable + * + * \since 4 + */ +void (*putImageShm)(__DRIdrawable *drawable, int op, +int x, int y, int width, int height, int stride, +int shmid, char *shmaddr, unsigned offset, +void *loaderPrivate); +/** + * Get shm image from readable + * + * \since 4 + */ +void (*getImageShm)(__DRIdrawable *readable, +int x, int y, int width, int height, +int shmid, void *loaderPrivate); }; /** ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium/winsys: rename DRM_API_HANDLE_* to WINSYS_HANDLE_*
Module: Mesa Branch: master Commit: b7ac0779e0228969536a6738926b8b7a0d565cd4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b7ac0779e0228969536a6738926b8b7a0d565cd4 Author: Dave Airlie Date: Tue May 29 11:21:38 2018 +1000 gallium/winsys: rename DRM_API_HANDLE_* to WINSYS_HANDLE_* This just renames this as we want to add an shm handle which isn't really drm related. Originally by: Marc-André Lureau (airlied: I used this sed script instead) This was generated with: git grep -l 'DRM_API_' | xargs sed -i 's/DRM_API_/WINSYS_/g' Reviewed-by: Marek Olšák --- src/gallium/auxiliary/renderonly/renderonly.c | 4 +-- src/gallium/auxiliary/renderonly/renderonly.h | 2 +- src/gallium/auxiliary/vl/vl_winsys_dri.c | 2 +- src/gallium/auxiliary/vl/vl_winsys_dri3.c | 4 +-- src/gallium/drivers/etnaviv/etnaviv_resource.c| 8 +++--- src/gallium/drivers/etnaviv/etnaviv_screen.c | 4 +-- src/gallium/drivers/freedreno/freedreno_screen.c | 12 - src/gallium/drivers/nouveau/nouveau_screen.c | 12 - src/gallium/drivers/radeonsi/si_texture.c | 2 +- src/gallium/drivers/tegra/tegra_screen.c | 4 +-- src/gallium/drivers/v3d/v3d_resource.c| 10 src/gallium/drivers/vc4/vc4_resource.c| 10 src/gallium/include/pipe/p_screen.h | 6 ++--- src/gallium/include/state_tracker/winsys_handle.h | 6 ++--- src/gallium/state_trackers/dri/dri2.c | 30 +++ src/gallium/state_trackers/nine/swapchain9.c | 2 +- src/gallium/state_trackers/va/buffer.c| 2 +- src/gallium/state_trackers/va/surface.c | 4 +-- src/gallium/state_trackers/vdpau/output.c | 2 +- src/gallium/state_trackers/vdpau/surface.c| 2 +- src/gallium/state_trackers/xa/xa_tracker.c| 8 +++--- src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 10 src/gallium/winsys/i915/drm/i915_drm_buffer.c | 12 - src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 14 +-- src/gallium/winsys/svga/drm/vmw_screen_dri.c | 14 +-- src/gallium/winsys/svga/drm/vmw_screen_ioctl.c| 6 ++--- src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c | 12 - src/gallium/winsys/virgl/drm/virgl_drm_winsys.c | 12 - src/mesa/state_tracker/st_cb_memoryobjects.c | 2 +- src/mesa/state_tracker/st_vdpau.c | 2 +- 30 files changed, 110 insertions(+), 110 deletions(-) diff --git a/src/gallium/auxiliary/renderonly/renderonly.c b/src/gallium/auxiliary/renderonly/renderonly.c index d31f458845..f83910a940 100644 --- a/src/gallium/auxiliary/renderonly/renderonly.c +++ b/src/gallium/auxiliary/renderonly/renderonly.c @@ -98,7 +98,7 @@ renderonly_create_kms_dumb_buffer_for_resource(struct pipe_resource *rsc, /* fill in winsys handle */ memset(out_handle, 0, sizeof(*out_handle)); - out_handle->type = DRM_API_HANDLE_TYPE_FD; + out_handle->type = WINSYS_HANDLE_TYPE_FD; out_handle->stride = create_dumb.pitch; err = drmPrimeHandleToFD(ro->kms_fd, create_dumb.handle, O_CLOEXEC, @@ -130,7 +130,7 @@ renderonly_create_gpu_import_for_resource(struct pipe_resource *rsc, boolean status; int fd, err; struct winsys_handle handle = { - .type = DRM_API_HANDLE_TYPE_FD + .type = WINSYS_HANDLE_TYPE_FD }; scanout = CALLOC_STRUCT(renderonly_scanout); diff --git a/src/gallium/auxiliary/renderonly/renderonly.h b/src/gallium/auxiliary/renderonly/renderonly.h index 6a89c29e2e..a8d6a686ed 100644 --- a/src/gallium/auxiliary/renderonly/renderonly.h +++ b/src/gallium/auxiliary/renderonly/renderonly.h @@ -85,7 +85,7 @@ renderonly_get_handle(struct renderonly_scanout *scanout, if (!scanout) return FALSE; - assert(handle->type == DRM_API_HANDLE_TYPE_KMS); + assert(handle->type == WINSYS_HANDLE_TYPE_KMS); handle->handle = scanout->handle; handle->stride = scanout->stride; diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri.c b/src/gallium/auxiliary/vl/vl_winsys_dri.c index 79ebf750cd..bb1ff50488 100644 --- a/src/gallium/auxiliary/vl/vl_winsys_dri.c +++ b/src/gallium/auxiliary/vl/vl_winsys_dri.c @@ -231,7 +231,7 @@ vl_dri2_screen_texture_from_drawable(struct vl_screen *vscreen, void *drawable) } memset(_handle, 0, sizeof(dri2_handle)); - dri2_handle.type = DRM_API_HANDLE_TYPE_SHARED; + dri2_handle.type = WINSYS_HANDLE_TYPE_SHARED; dri2_handle.handle = back_left->name; dri2_handle.stride = back_left->pitch; diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri3.c b/src/gallium/auxiliary/vl/vl_winsys_dri3.c index 8251087f3f..8e3c4a0e04 100644 --- a/src/gallium/auxiliary/vl/vl_winsys_dri3.c +++ b/src/gallium/auxiliary/vl/vl_winsys_dri3.c @@ -271,7 +271,7 @@ dri3_alloc_back_buffer(struct vl_dri3_screen *scrn) pixmap_buffer_texture = buffer->texture; } memset(, 0, sizeof(whandle)); - whandle.type=
Mesa (master): intel/eu: Remove brw_codegen::compressed_stack.
Module: Mesa Branch: master Commit: 11c71f0e75bc5c42c9cdd11170325ff919f03c8b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=11c71f0e75bc5c42c9cdd11170325ff919f03c8b Author: Francisco Jerez Date: Thu Jan 5 19:26:13 2017 -0800 intel/eu: Remove brw_codegen::compressed_stack. Reviewed-by: Jason Ekstrand Reviewed-by: Kenneth Graunke Reviewed-by: Matt Turner --- src/intel/compiler/brw_eu.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/intel/compiler/brw_eu.h b/src/intel/compiler/brw_eu.h index 120a74f035..2655cdb0c5 100644 --- a/src/intel/compiler/brw_eu.h +++ b/src/intel/compiler/brw_eu.h @@ -63,7 +63,6 @@ struct brw_codegen { /* Allow clients to push/pop instruction state: */ brw_inst stack[BRW_EU_MAX_INSN_STACK]; - bool compressed_stack[BRW_EU_MAX_INSN_STACK]; brw_inst *current; /** Whether or not the user wants automatic exec sizes ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel/fs: Use groups for SIMD16 LINTERP on gen11+
Module: Mesa Branch: master Commit: 71a86d1fc69a025754d8d4c21f5777b21c65a3ea URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=71a86d1fc69a025754d8d4c21f5777b21c65a3ea Author: Jason Ekstrand Date: Wed May 16 17:33:17 2018 -0700 intel/fs: Use groups for SIMD16 LINTERP on gen11+ This is better than compression control because it naturally extends to SIMD32. v2: - Push/pop instruction state around adjusted codegen (Ken) Reviewed-by: Kenneth Graunke Reviewed-by: Matt Turner --- src/intel/compiler/brw_fs_generator.cpp | 9 + 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/intel/compiler/brw_fs_generator.cpp b/src/intel/compiler/brw_fs_generator.cpp index 0c050a73b4..20e356e23e 100644 --- a/src/intel/compiler/brw_fs_generator.cpp +++ b/src/intel/compiler/brw_fs_generator.cpp @@ -781,6 +781,7 @@ fs_generator::generate_linterp(fs_inst *inst, struct brw_reg dwQ = suboffset(interp, 1); struct brw_reg dwR = suboffset(interp, 3); + brw_push_insn_state(p); brw_set_default_exec_size(p, BRW_EXECUTE_8); if (inst->exec_size == 8) { @@ -795,16 +796,14 @@ fs_generator::generate_linterp(fs_inst *inst, */ brw_inst_set_saturate(p->devinfo, i[0], false); } else { - brw_set_default_compression_control(p, BRW_COMPRESSION_NONE); + brw_set_default_group(p, inst->group); i[0] = brw_MAD(p,acc, dwR, offset(delta_x, 0), dwP); i[1] = brw_MAD(p, offset(dst, 0), acc, offset(delta_x, 1), dwQ); - brw_set_default_compression_control(p, BRW_COMPRESSION_2NDHALF); + brw_set_default_group(p, inst->group + 8); i[2] = brw_MAD(p,acc, dwR, offset(delta_y, 0), dwP); i[3] = brw_MAD(p, offset(dst, 1), acc, offset(delta_y, 1), dwQ); - brw_set_default_compression_control(p, BRW_COMPRESSION_COMPRESSED); - brw_inst_set_cond_modifier(p->devinfo, i[1], inst->conditional_mod); brw_inst_set_cond_modifier(p->devinfo, i[3], inst->conditional_mod); @@ -816,6 +815,8 @@ fs_generator::generate_linterp(fs_inst *inst, brw_inst_set_saturate(p->devinfo, i[2], false); } + brw_pop_insn_state(p); + return true; } else if (devinfo->has_pln) { /* From the Sandy Bridge PRM Vol. 4, Pt. 2, Section 8.3.53, "Plane": ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel/fs: Rename a local variable so it doesn't shadow component()
Module: Mesa Branch: master Commit: 4bfa2ac2eab7551b1d89309fa8da44a487542f72 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4bfa2ac2eab7551b1d89309fa8da44a487542f72 Author: Francisco Jerez Date: Fri May 18 15:13:25 2018 -0700 intel/fs: Rename a local variable so it doesn't shadow component() v2 (Jason Ekstrand): - Break the refactor into its own patch Reviewed-by: Jason Ekstrand Reviewed-by: Kenneth Graunke Reviewed-by: Matt Turner --- src/intel/compiler/brw_fs_nir.cpp | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index 1ce89520bf..ad945b890c 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -3372,15 +3372,15 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder , case nir_intrinsic_load_input: { /* load_input is only used for flat inputs */ unsigned base = nir_intrinsic_base(instr); - unsigned component = nir_intrinsic_component(instr); + unsigned comp = nir_intrinsic_component(instr); unsigned num_components = instr->num_components; enum brw_reg_type type = dest.type; /* Special case fields in the VUE header */ if (base == VARYING_SLOT_LAYER) - component = 1; + comp = 1; else if (base == VARYING_SLOT_VIEWPORT) - component = 2; + comp = 2; if (nir_dest_bit_size(instr->dest) == 64) { /* const_index is in 32-bit type size units that could not be aligned @@ -3392,7 +3392,7 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder , } for (unsigned int i = 0; i < num_components; i++) { - struct brw_reg interp = interp_reg(base, component + i); + struct brw_reg interp = interp_reg(base, comp + i); interp = suboffset(interp, 3); bld.emit(FS_OPCODE_CINTERP, offset(retype(dest, type), bld, i), retype(fs_reg(interp), type)); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel/fs: Assert that the gen4-6 plane restrictions are followed
Module: Mesa Branch: master Commit: a1a850cd3411400ce832e77c4be1f0e14924ce9e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a1a850cd3411400ce832e77c4be1f0e14924ce9e Author: Jason Ekstrand Date: Wed May 16 17:30:04 2018 -0700 intel/fs: Assert that the gen4-6 plane restrictions are followed The fall-back does not work correctly in SIMD16 mode and the register allocator should ensure that we never hit this case anyway. Reviewed-by: Matt Turner --- src/intel/compiler/brw_fs_generator.cpp | 10 -- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/intel/compiler/brw_fs_generator.cpp b/src/intel/compiler/brw_fs_generator.cpp index 6d5306a0ee..0c050a73b4 100644 --- a/src/intel/compiler/brw_fs_generator.cpp +++ b/src/intel/compiler/brw_fs_generator.cpp @@ -817,8 +817,14 @@ fs_generator::generate_linterp(fs_inst *inst, } return true; - } else if (devinfo->has_pln && - (devinfo->gen >= 7 || (delta_x.nr & 1) == 0)) { + } else if (devinfo->has_pln) { + /* From the Sandy Bridge PRM Vol. 4, Pt. 2, Section 8.3.53, "Plane": + * + *"[DevSNB]: must be even register aligned. + * + * This restriction is lifted on Ivy Bridge. + */ + assert(devinfo->gen >= 7 || (delta_x.nr & 1) == 0); brw_PLN(p, dst, interp, delta_x); return false; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel/fs: Use the ATTR file for FS inputs
Module: Mesa Branch: master Commit: 39de901a96bd1048b2c0de32a469014b398f38ae URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=39de901a96bd1048b2c0de32a469014b398f38ae Author: Francisco Jerez Date: Mon Apr 25 18:33:22 2016 -0700 intel/fs: Use the ATTR file for FS inputs This replaces the special magic opcodes which implicitly read inputs with explicit use of the ATTR file. v2 (Jason Ekstrand): - Break into multiple patches - Change the units of the FS ATTR to be in logical scalars Reviewed-by: Jason Ekstrand Reviewed-by: Matt Turner --- src/intel/compiler/brw_fs.cpp | 32 ++-- src/intel/compiler/brw_fs.h | 2 +- src/intel/compiler/brw_fs_nir.cpp | 8 +++- src/intel/compiler/brw_fs_visitor.cpp | 10 -- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp index b21996c168..8d9278684f 100644 --- a/src/intel/compiler/brw_fs.cpp +++ b/src/intel/compiler/brw_fs.cpp @@ -1079,8 +1079,8 @@ fs_visitor::emit_fragcoord_interpolation(fs_reg wpos) bld.MOV(wpos, fs_reg(brw_vec8_grf(payload.source_depth_reg, 0))); } else { bld.emit(FS_OPCODE_LINTERP, wpos, - this->delta_xy[BRW_BARYCENTRIC_PERSPECTIVE_PIXEL], - interp_reg(VARYING_SLOT_POS, 2)); + this->delta_xy[BRW_BARYCENTRIC_PERSPECTIVE_PIXEL], + component(interp_reg(VARYING_SLOT_POS, 2), 0)); } wpos = offset(wpos, bld, 1); @@ -1609,14 +1609,26 @@ fs_visitor::assign_urb_setup() * setup regs, now that the location of the constants has been chosen. */ foreach_block_and_inst(block, fs_inst, inst, cfg) { - if (inst->opcode == FS_OPCODE_LINTERP) { -assert(inst->src[1].file == FIXED_GRF); - inst->src[1].nr += urb_start; - } - - if (inst->opcode == FS_OPCODE_CINTERP) { -assert(inst->src[0].file == FIXED_GRF); - inst->src[0].nr += urb_start; + for (int i = 0; i < inst->sources; i++) { + if (inst->src[i].file == ATTR) { +/* ATTR regs in the FS are in units of logical scalar inputs each + * of which consumes half of a GRF register. + */ +assert(inst->src[i].offset < REG_SIZE / 2); +const unsigned grf = urb_start + inst->src[i].nr / 2; +const unsigned offset = (inst->src[i].nr % 2) * (REG_SIZE / 2) + +inst->src[i].offset; +const unsigned width = inst->src[i].stride == 0 ? + 1 : MIN2(inst->exec_size, 8); +struct brw_reg reg = stride( + byte_offset(retype(brw_vec8_grf(grf, 0), inst->src[i].type), + offset), + width * inst->src[i].stride, + width, inst->src[i].stride); +reg.abs = inst->src[i].abs; +reg.negate = inst->src[i].negate; +inst->src[i] = reg; + } } } diff --git a/src/intel/compiler/brw_fs.h b/src/intel/compiler/brw_fs.h index e384db809d..faf5156863 100644 --- a/src/intel/compiler/brw_fs.h +++ b/src/intel/compiler/brw_fs.h @@ -276,7 +276,7 @@ public: fs_reg get_timestamp(const brw::fs_builder ); - struct brw_reg interp_reg(int location, int channel); + fs_reg interp_reg(int location, int channel); int implied_mrf_writes(fs_inst *inst) const; diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index ad945b890c..282b3bb3b9 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -3392,10 +3392,8 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder , } for (unsigned int i = 0; i < num_components; i++) { - struct brw_reg interp = interp_reg(base, comp + i); - interp = suboffset(interp, 3); bld.emit(FS_OPCODE_CINTERP, offset(retype(dest, type), bld, i), - retype(fs_reg(interp), type)); + retype(component(interp_reg(base, comp + i), 3), type)); } if (nir_dest_bit_size(instr->dest) == 64) { @@ -3568,8 +3566,8 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder , for (unsigned int i = 0; i < instr->num_components; i++) { fs_reg interp = -fs_reg(interp_reg(nir_intrinsic_base(instr), - nir_intrinsic_component(instr) + i)); +component(interp_reg(nir_intrinsic_base(instr), + nir_intrinsic_component(instr) + i), 0); interp.type = BRW_REGISTER_TYPE_F; dest.type = BRW_REGISTER_TYPE_F; diff --git a/src/intel/compiler/brw_fs_visitor.cpp b/src/intel/compiler/brw_fs_visitor.cpp index 7a5f6451f2..41dbd76106 100644 --- a/src/intel/compiler/brw_fs_visitor.cpp +++ b/src/intel/compiler/brw_fs_visitor.cpp @@ -135,17 +135,15 @@ fs_visitor::emit_dummy_fs() * data. It will get adjusted to be a real location
Mesa (master): intel/fs: Add explicit last_rt flag to fb writes orthogonal to eot.
Module: Mesa Branch: master Commit: 4bd2047deea31e877ae023a3845f925aab69cdc7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4bd2047deea31e877ae023a3845f925aab69cdc7 Author: Francisco Jerez Date: Fri Jan 13 14:01:45 2017 -0800 intel/fs: Add explicit last_rt flag to fb writes orthogonal to eot. When using multiple RT write messages to the same RT such as for dual-source blending or all RT writes in SIMD32, we have to set the "Last Render Target Select" bit on all write messages that target the last RT but only set EOT on the last RT write in the shader. Special-casing for dual-source blend works today because that is the only case which requires multiple RT write messages per RT. When we start doing SIMD32, this will become much more common so we add a dedicated bit for it. Reviewed-by: Jason Ekstrand Reviewed-by: Matt Turner --- src/intel/compiler/brw_fs.cpp | 1 + src/intel/compiler/brw_fs_generator.cpp | 6 +- src/intel/compiler/brw_fs_visitor.cpp | 2 ++ src/intel/compiler/brw_ir_fs.h | 1 + 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp index 8d9278684f..d67c0a4192 100644 --- a/src/intel/compiler/brw_fs.cpp +++ b/src/intel/compiler/brw_fs.cpp @@ -3246,6 +3246,7 @@ fs_visitor::emit_repclear_shader() } } write->eot = true; + write->last_rt = true; calculate_cfg(); diff --git a/src/intel/compiler/brw_fs_generator.cpp b/src/intel/compiler/brw_fs_generator.cpp index f310a84e25..f49ab442fb 100644 --- a/src/intel/compiler/brw_fs_generator.cpp +++ b/src/intel/compiler/brw_fs_generator.cpp @@ -289,10 +289,6 @@ fs_generator::fire_fb_write(fs_inst *inst, */ const uint32_t surf_index = inst->target; - bool last_render_target = inst->eot || - (prog_data->dual_src_blend && dispatch_width == 16); - - brw_fb_WRITE(p, payload, implied_header, @@ -301,7 +297,7 @@ fs_generator::fire_fb_write(fs_inst *inst, nr, 0, inst->eot, -last_render_target, +inst->last_rt, inst->header_size != 0); brw_mark_surface_used(_data->base, surf_index); diff --git a/src/intel/compiler/brw_fs_visitor.cpp b/src/intel/compiler/brw_fs_visitor.cpp index 41dbd76106..a24808eac6 100644 --- a/src/intel/compiler/brw_fs_visitor.cpp +++ b/src/intel/compiler/brw_fs_visitor.cpp @@ -103,6 +103,7 @@ fs_visitor::emit_dummy_fs() fs_inst *write; write = bld.emit(FS_OPCODE_FB_WRITE); write->eot = true; + write->last_rt = true; if (devinfo->gen >= 6) { write->base_mrf = 2; write->mlen = 4 * reg_width; @@ -459,6 +460,7 @@ fs_visitor::emit_fb_writes() inst->target = 0; } + inst->last_rt = true; inst->eot = true; } diff --git a/src/intel/compiler/brw_ir_fs.h b/src/intel/compiler/brw_ir_fs.h index f06a33c516..92dad269a3 100644 --- a/src/intel/compiler/brw_ir_fs.h +++ b/src/intel/compiler/brw_ir_fs.h @@ -374,6 +374,7 @@ public: uint8_t sources; /**< Number of fs_reg sources. */ + bool last_rt:1; bool pi_noperspective:1; /**< Pixel interpolator noperspective flag */ }; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel/fs: Replace the CINTERP opcode with a simple MOV
Module: Mesa Branch: master Commit: d3cd6b7215c11054b587fb0fd621c53c6d62c64b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3cd6b7215c11054b587fb0fd621c53c6d62c64b Author: Francisco Jerez Date: Fri May 18 15:20:43 2018 -0700 intel/fs: Replace the CINTERP opcode with a simple MOV The only reason it was it's own opcode was so that we could detect it and adjust the source register based on the payload setup. Now that we're using the ATTR file for FS inputs, there's no point in having a magic opcode for this. v2 (Jason Ekstrand): - Break the bit which removes the CINTERP opcode into its own patch Reviewed-by: Jason Ekstrand Reviewed-by: Matt Turner --- src/intel/compiler/brw_eu_defines.h | 1 - src/intel/compiler/brw_fs_cse.cpp | 1 - src/intel/compiler/brw_fs_generator.cpp | 3 --- src/intel/compiler/brw_fs_nir.cpp | 4 ++-- src/intel/compiler/brw_shader.cpp | 6 +- 5 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/intel/compiler/brw_eu_defines.h b/src/intel/compiler/brw_eu_defines.h index 332d627bc3..36519af63f 100644 --- a/src/intel/compiler/brw_eu_defines.h +++ b/src/intel/compiler/brw_eu_defines.h @@ -499,7 +499,6 @@ enum opcode { */ FS_OPCODE_DDY_COARSE, FS_OPCODE_DDY_FINE, - FS_OPCODE_CINTERP, FS_OPCODE_LINTERP, FS_OPCODE_PIXEL_X, FS_OPCODE_PIXEL_Y, diff --git a/src/intel/compiler/brw_fs_cse.cpp b/src/intel/compiler/brw_fs_cse.cpp index 48220efd73..6859733d58 100644 --- a/src/intel/compiler/brw_fs_cse.cpp +++ b/src/intel/compiler/brw_fs_cse.cpp @@ -75,7 +75,6 @@ is_expression(const fs_visitor *v, const fs_inst *const inst) case FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD: case FS_OPCODE_VARYING_PULL_CONSTANT_LOAD_LOGICAL: case FS_OPCODE_VARYING_PULL_CONSTANT_LOAD_GEN7: - case FS_OPCODE_CINTERP: case FS_OPCODE_LINTERP: case SHADER_OPCODE_FIND_LIVE_CHANNEL: case SHADER_OPCODE_BROADCAST: diff --git a/src/intel/compiler/brw_fs_generator.cpp b/src/intel/compiler/brw_fs_generator.cpp index 20e356e23e..f310a84e25 100644 --- a/src/intel/compiler/brw_fs_generator.cpp +++ b/src/intel/compiler/brw_fs_generator.cpp @@ -2112,9 +2112,6 @@ fs_generator::generate_code(const cfg_t *cfg, int dispatch_width) BRW_MATH_PRECISION_FULL); } break; - case FS_OPCODE_CINTERP: -brw_MOV(p, dst, src[0]); -break; case FS_OPCODE_LINTERP: multiple_instructions_emitted = generate_linterp(inst, dst, src); break; diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index 282b3bb3b9..e287f11e47 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -3392,8 +3392,8 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder , } for (unsigned int i = 0; i < num_components; i++) { - bld.emit(FS_OPCODE_CINTERP, offset(retype(dest, type), bld, i), - retype(component(interp_reg(base, comp + i), 3), type)); + bld.MOV(offset(retype(dest, type), bld, i), + retype(component(interp_reg(base, comp + i), 3), type)); } if (nir_dest_bit_size(instr->dest) == 64) { diff --git a/src/intel/compiler/brw_shader.cpp b/src/intel/compiler/brw_shader.cpp index 537defd05d..6e81db9c29 100644 --- a/src/intel/compiler/brw_shader.cpp +++ b/src/intel/compiler/brw_shader.cpp @@ -378,8 +378,6 @@ brw_instruction_name(const struct gen_device_info *devinfo, enum opcode op) case FS_OPCODE_DDY_FINE: return "ddy_fine"; - case FS_OPCODE_CINTERP: - return "cinterp"; case FS_OPCODE_LINTERP: return "linterp"; @@ -960,7 +958,6 @@ backend_instruction::can_do_cmod() const case BRW_OPCODE_SHR: case BRW_OPCODE_SUBB: case BRW_OPCODE_XOR: - case FS_OPCODE_CINTERP: case FS_OPCODE_LINTERP: return true; default: @@ -987,8 +984,7 @@ backend_instruction::writes_accumulator_implicitly(const struct gen_device_info return writes_accumulator || (devinfo->gen < 6 && ((opcode >= BRW_OPCODE_ADD && opcode < BRW_OPCODE_NOP) || -(opcode >= FS_OPCODE_DDX_COARSE && opcode <= FS_OPCODE_LINTERP && - opcode != FS_OPCODE_CINTERP))); +(opcode >= FS_OPCODE_DDX_COARSE && opcode <= FS_OPCODE_LINTERP))); } bool ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): clover: Fix build after llvm r332881.
Module: Mesa Branch: master Commit: d424be0feda503307692db8447f5989fa8e4a843 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d424be0feda503307692db8447f5989fa8e4a843 Author: Jan Vesely Date: Tue May 22 17:52:30 2018 -0400 clover: Fix build after llvm r332881. v2: fix whitespace and indentation r332881 added an extra parameter to the emit function. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106619 Signed-off-by: Jan Vesely Reviewed-By: Aaron Watry Tested-By: Aaron Watry Tested-by: Kai Wasserbäch --- src/gallium/state_trackers/clover/llvm/codegen/native.cpp | 3 +-- src/gallium/state_trackers/clover/llvm/compat.hpp | 11 +++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/clover/llvm/codegen/native.cpp b/src/gallium/state_trackers/clover/llvm/codegen/native.cpp index 409f8ac32f..21f6c8c88a 100644 --- a/src/gallium/state_trackers/clover/llvm/codegen/native.cpp +++ b/src/gallium/state_trackers/clover/llvm/codegen/native.cpp @@ -126,13 +126,12 @@ namespace { { compat::pass_manager pm; ::llvm::raw_svector_ostream os { data }; - compat::raw_ostream_to_emit_file fos(os); mod.setDataLayout(compat::get_data_layout(*tm)); tm->Options.MCOptions.AsmVerbose = (ft == TargetMachine::CGFT_AssemblyFile); - if (tm->addPassesToEmitFile(pm, fos, ft)) + if (compat::add_passes_to_emit_file(*tm, pm, os, ft)) fail(r_log, build_error(), "TargetMachine can't emit this file"); pm.run(mod); diff --git a/src/gallium/state_trackers/clover/llvm/compat.hpp b/src/gallium/state_trackers/clover/llvm/compat.hpp index 2e070b2eef..42a671b7fa 100644 --- a/src/gallium/state_trackers/clover/llvm/compat.hpp +++ b/src/gallium/state_trackers/clover/llvm/compat.hpp @@ -247,6 +247,17 @@ namespace clover { ::llvm::WriteBitcodeToFile(, os); #endif } + + template + bool add_passes_to_emit_file(TM , PM , OS , FT ) + { + compat::raw_ostream_to_emit_file fos(os); +#if HAVE_LLVM >= 0x0700 + return tm.addPassesToEmitFile(pm, fos, nullptr, ft); +#else + return tm.addPassesToEmitFile(pm, fos, ft); +#endif + } } } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): travis: Add clover llvm-6.0 build
Module: Mesa Branch: master Commit: ed834aefa2dc078f1b73659934081d4214e2b338 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed834aefa2dc078f1b73659934081d4214e2b338 Author: Jan Vesely Date: Tue May 22 18:36:32 2018 -0400 travis: Add clover llvm-6.0 build v2: Don't force build using gcc-4.8 Signed-off-by: Jan Vesely Reviewed-By: Aaron Watry --- .travis.yml | 33 + 1 file changed, 33 insertions(+) diff --git a/.travis.yml b/.travis.yml index e3471d47ac..d05c40bf9d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -291,6 +291,39 @@ matrix: - libelf-dev - libunwind8-dev - env: +# NOTE: Analogous to SWR above, building Clover is quite slow. +- LABEL="make Gallium ST Clover LLVM-6.0" +- BUILD=make +- MAKEFLAGS="-j4" +- MAKE_CHECK_COMMAND="true" +- LLVM_VERSION=6.0 +- LLVM_CONFIG="llvm-config-${LLVM_VERSION}" +- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl" +- DRI_DRIVERS="" +- GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd --enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa" +- GALLIUM_DRIVERS="r600,radeonsi" +- VULKAN_DRIVERS="" +- LIBUNWIND_FLAGS="--enable-libunwind" + addons: +apt: + sources: +- llvm-toolchain-trusty-6.0 +# llvm-6 depends on gcc-4.9 which is not in main repo +- ubuntu-toolchain-r-test + packages: +- libclc-dev +# From sources above +- llvm-6.0-dev +- clang-6.0 +- libclang-6.0-dev +# Common +- xz-utils +- x11proto-xf86vidmode-dev +- libexpat1-dev +- libx11-xcb-dev +- libelf-dev +- libunwind8-dev +- env: - LABEL="make Gallium ST Other" - BUILD=make - MAKEFLAGS="-j4" ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): clover: Cleanup compat code for llvm < 3.9
Module: Mesa Branch: master Commit: 41b878e1bd9e6215f57722d61b158f6b428a0d78 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=41b878e1bd9e6215f57722d61b158f6b428a0d78 Author: Jan Vesely Date: Tue May 22 18:27:39 2018 -0400 clover: Cleanup compat code for llvm < 3.9 Signed-off-by: Jan Vesely Reviewed-By: Aaron Watry --- .../state_trackers/clover/llvm/codegen/native.cpp | 7 +- src/gallium/state_trackers/clover/llvm/compat.hpp | 109 + .../state_trackers/clover/llvm/invocation.cpp | 25 ++--- 3 files changed, 20 insertions(+), 121 deletions(-) diff --git a/src/gallium/state_trackers/clover/llvm/codegen/native.cpp b/src/gallium/state_trackers/clover/llvm/codegen/native.cpp index 21f6c8c88a..b8ed01c728 100644 --- a/src/gallium/state_trackers/clover/llvm/codegen/native.cpp +++ b/src/gallium/state_trackers/clover/llvm/codegen/native.cpp @@ -114,8 +114,7 @@ namespace { std::unique_ptr tm { t->createTargetMachine(target.triple, target.cpu, "", {}, -compat::default_reloc_model, -compat::default_code_model, +::llvm::None, compat::default_code_model, ::llvm::CodeGenOpt::Default) }; if (!tm) fail(r_log, build_error(), @@ -124,10 +123,10 @@ namespace { ::llvm::SmallVector data; { - compat::pass_manager pm; + ::llvm::legacy::PassManager pm; ::llvm::raw_svector_ostream os { data }; - mod.setDataLayout(compat::get_data_layout(*tm)); + mod.setDataLayout(tm->createDataLayout()); tm->Options.MCOptions.AsmVerbose = (ft == TargetMachine::CGFT_AssemblyFile); diff --git a/src/gallium/state_trackers/clover/llvm/compat.hpp b/src/gallium/state_trackers/clover/llvm/compat.hpp index 42a671b7fa..60270d1529 100644 --- a/src/gallium/state_trackers/clover/llvm/compat.hpp +++ b/src/gallium/state_trackers/clover/llvm/compat.hpp @@ -54,15 +54,8 @@ #include #endif -#if HAVE_LLVM >= 0x0307 #include #include -#else -#include -#include -#include -#include -#endif #include #include @@ -71,12 +64,6 @@ namespace clover { namespace llvm { namespace compat { -#if HAVE_LLVM >= 0x0307 - typedef ::llvm::TargetLibraryInfoImpl target_library_info; -#else - typedef ::llvm::TargetLibraryInfo target_library_info; -#endif - template unsigned target_address_space(const T , const AS lang_as) { const auto = target.getAddressSpaceMap(); @@ -96,19 +83,6 @@ namespace clover { #endif inline void - set_lang_defaults(clang::CompilerInvocation , - clang::LangOptions , clang::InputKind ik, - const ::llvm::Triple , - clang::PreprocessorOptions , - clang::LangStandard::Kind std) { -#if HAVE_LLVM >= 0x0309 -inv.setLangDefaults(lopts, ik, t, ppopts, std); -#else -inv.setLangDefaults(lopts, ik, std); -#endif - } - - inline void add_link_bitcode_file(clang::CodeGenOptions , const std::string ) { #if HAVE_LLVM >= 0x0500 @@ -118,78 +92,8 @@ namespace clover { F.PropagateAttrs = true; F.LinkFlags = ::llvm::Linker::Flags::None; opts.LinkBitcodeFiles.emplace_back(F); -#elif HAVE_LLVM >= 0x0308 -opts.LinkBitcodeFiles.emplace_back(::llvm::Linker::Flags::None, path); -#else -opts.LinkBitcodeFile = path; -#endif - } - -#if HAVE_LLVM >= 0x0307 - typedef ::llvm::legacy::PassManager pass_manager; -#else - typedef ::llvm::PassManager pass_manager; -#endif - - inline void - add_data_layout_pass(pass_manager ) { -#if HAVE_LLVM < 0x0307 -pm.add(new ::llvm::DataLayoutPass()); -#endif - } - - inline void - add_internalize_pass(pass_manager , - const std::vector ) { -#if HAVE_LLVM >= 0x0309 -pm.add(::llvm::createInternalizePass( - [=](const ::llvm::GlobalValue ) { - return std::find(names.begin(), names.end(), - gv.getName()) != names.end(); - })); #else -pm.add(::llvm::createInternalizePass(std::vector( - map(std::mem_fn(::string::data), names; -#endif - } - - inline std::unique_ptr< ::llvm::Linker> - create_linker(::llvm::Module ) { -#if HAVE_LLVM >= 0x0308 -return std::unique_ptr< ::llvm::Linker>(new ::llvm::Linker(mod)); -#else -return std::unique_ptr< ::llvm::Linker>(new ::llvm::Linker()); -#endif - } - - inline bool - link_in_module(::llvm::Linker , -std::unique_ptr< ::llvm::Module> mod) {
Mesa (master): i965: Only emit VF cache invalidations when the high bits changes
Module: Mesa Branch: master Commit: 3ac5fbadfd8644d30fce9ff267cb811ad157996a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ac5fbadfd8644d30fce9ff267cb811ad157996a Author: Chris Wilson Date: Tue May 29 17:28:07 2018 +0100 i965: Only emit VF cache invalidations when the high bits changes Commit 92f01fc5f914 ("i965: Emit VF cache invalidates for 48-bit addressing bugs with softpin.") tried to only emit the VF invalidate if the high bits changed, but it accidentally always set need_invalidate to true; causing it to emit unconditionally emit the pipe control before every primitive. Fixes: 92f01fc5f914 ("i965: Emit VF cache invalidates for 48-bit addressing bugs with softpin.") Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106708 Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/genX_state_upload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c b/src/mesa/drivers/dri/i965/genX_state_upload.c index b485e2cf81..88fde9d12f 100644 --- a/src/mesa/drivers/dri/i965/genX_state_upload.c +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c @@ -504,7 +504,7 @@ static void vf_invalidate_for_vb_48bit_transitions(struct brw_context *brw) { #if GEN_GEN >= 8 - bool need_invalidate = true; + bool need_invalidate = false; unsigned i; for (i = 0; i < brw->vb.nr_buffers; i++) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): dri: replace two-way switch case with a table lookup
Module: Mesa Branch: master Commit: 51a17e7feec4f9c693a070df1a957ca8a1f3ab1e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=51a17e7feec4f9c693a070df1a957ca8a1f3ab1e Author: Eric Engestrom Date: Fri May 18 15:58:58 2018 +0100 dri: replace two-way switch case with a table lookup Signed-off-by: Eric Engestrom Reviewed-by: Marek Olšák --- v2: rebased on top of 432df741e0b85c021da0 "dri_util: Add R10G10B10{A,X}2 translation between DRI and mesa_format." --- src/mesa/drivers/dri/common/dri_util.c | 158 ++--- 1 file changed, 84 insertions(+), 74 deletions(-) diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c index d7dff235f2..a591dfcd7d 100644 --- a/src/mesa/drivers/dri/common/dri_util.c +++ b/src/mesa/drivers/dri/common/dri_util.c @@ -864,88 +864,98 @@ driUpdateFramebufferSize(struct gl_context *ctx, const __DRIdrawable *dPriv) } } +/* + * Note: the first match is returned, which is important for formats like + * __DRI_IMAGE_FORMAT_R8 which maps to both MESA_FORMAT_{R,L}_UNORM8 + */ +static const struct { + uint32_timage_format; + mesa_format mesa_format; +} format_mapping[] = { + { + .image_format = __DRI_IMAGE_FORMAT_RGB565, + .mesa_format =MESA_FORMAT_B5G6R5_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_ARGB1555, + .mesa_format =MESA_FORMAT_B5G5R5A1_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_XRGB, + .mesa_format =MESA_FORMAT_B8G8R8X8_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_ARGB2101010, + .mesa_format =MESA_FORMAT_B10G10R10A2_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_XRGB2101010, + .mesa_format =MESA_FORMAT_B10G10R10X2_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_ABGR2101010, + .mesa_format =MESA_FORMAT_R10G10B10A2_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_XBGR2101010, + .mesa_format =MESA_FORMAT_R10G10B10X2_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_ARGB, + .mesa_format =MESA_FORMAT_B8G8R8A8_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_ABGR, + .mesa_format =MESA_FORMAT_R8G8B8A8_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_XBGR, + .mesa_format =MESA_FORMAT_R8G8B8X8_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_R8, + .mesa_format =MESA_FORMAT_R_UNORM8, + }, + { + .image_format = __DRI_IMAGE_FORMAT_R8, + .mesa_format =MESA_FORMAT_L_UNORM8, + }, + { + .image_format = __DRI_IMAGE_FORMAT_GR88, + .mesa_format =MESA_FORMAT_R8G8_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_GR88, + .mesa_format =MESA_FORMAT_L8A8_UNORM, + }, + { + .image_format = __DRI_IMAGE_FORMAT_SABGR8, + .mesa_format =MESA_FORMAT_R8G8B8A8_SRGB, + }, + { + .image_format = __DRI_IMAGE_FORMAT_SARGB8, + .mesa_format =MESA_FORMAT_B8G8R8A8_SRGB, + }, +}; + uint32_t driGLFormatToImageFormat(mesa_format format) { - switch (format) { - case MESA_FORMAT_B5G6R5_UNORM: - return __DRI_IMAGE_FORMAT_RGB565; - case MESA_FORMAT_B5G5R5A1_UNORM: - return __DRI_IMAGE_FORMAT_ARGB1555; - case MESA_FORMAT_B8G8R8X8_UNORM: - return __DRI_IMAGE_FORMAT_XRGB; - case MESA_FORMAT_B10G10R10A2_UNORM: - return __DRI_IMAGE_FORMAT_ARGB2101010; - case MESA_FORMAT_B10G10R10X2_UNORM: - return __DRI_IMAGE_FORMAT_XRGB2101010; - case MESA_FORMAT_R10G10B10A2_UNORM: - return __DRI_IMAGE_FORMAT_ABGR2101010; - case MESA_FORMAT_R10G10B10X2_UNORM: - return __DRI_IMAGE_FORMAT_XBGR2101010; - case MESA_FORMAT_B8G8R8A8_UNORM: - return __DRI_IMAGE_FORMAT_ARGB; - case MESA_FORMAT_R8G8B8A8_UNORM: - return __DRI_IMAGE_FORMAT_ABGR; - case MESA_FORMAT_R8G8B8X8_UNORM: - return __DRI_IMAGE_FORMAT_XBGR; - case MESA_FORMAT_L_UNORM8: - case MESA_FORMAT_R_UNORM8: - return __DRI_IMAGE_FORMAT_R8; - case MESA_FORMAT_L8A8_UNORM: - case MESA_FORMAT_R8G8_UNORM: - return __DRI_IMAGE_FORMAT_GR88; - case MESA_FORMAT_NONE: - return __DRI_IMAGE_FORMAT_NONE; - case MESA_FORMAT_R8G8B8A8_SRGB: - return __DRI_IMAGE_FORMAT_SABGR8; - case MESA_FORMAT_B8G8R8A8_SRGB: - return __DRI_IMAGE_FORMAT_SARGB8; - default: - return __DRI_IMAGE_FORMAT_NONE; - } + for (size_t i = 0; i < ARRAY_SIZE(format_mapping); i++) + if (format_mapping[i].mesa_format == format) + return format_mapping[i].image_format; + + return __DRI_IMAGE_FORMAT_NONE; } mesa_format driImageFormatToGLFormat(uint32_t image_format) { - switch (image_format) { - case __DRI_IMAGE_FORMAT_RGB565: - return MESA_FORMAT_B5G6R5_UNORM; - case __DRI_IMAGE_FORMAT_ARGB1555: - return MESA_FORMAT_B5G5R5A1_UNORM; - case
Mesa (master): dri: fix error value returned by driGLFormatToImageFormat()
Module: Mesa Branch: master Commit: d3ca7bd45223aefc60174ad7c5957d3d5792192a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3ca7bd45223aefc60174ad7c5957d3d5792192a Author: Eric Engestrom Date: Fri May 18 15:53:58 2018 +0100 dri: fix error value returned by driGLFormatToImageFormat() 0 is not a valid value for the __DRI_IMAGE_FORMAT_* enum. It is, however, the value of MESA_FORMAT_NONE, which two of the callers (i915 & i965) checked for. The other callers (that check for errors, ie. st/dri) already check for __DRI_IMAGE_FORMAT_NONE. Signed-off-by: Eric Engestrom Reviewed-by: Marek Olšák --- src/mesa/drivers/dri/common/dri_util.c | 2 +- src/mesa/drivers/dri/i915/intel_screen.c | 2 +- src/mesa/drivers/dri/i965/intel_screen.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c index c58650491d..d7dff235f2 100644 --- a/src/mesa/drivers/dri/common/dri_util.c +++ b/src/mesa/drivers/dri/common/dri_util.c @@ -901,7 +901,7 @@ driGLFormatToImageFormat(mesa_format format) case MESA_FORMAT_B8G8R8A8_SRGB: return __DRI_IMAGE_FORMAT_SARGB8; default: - return 0; + return __DRI_IMAGE_FORMAT_NONE; } } diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c index 5024a69bd4..882c498622 100644 --- a/src/mesa/drivers/dri/i915/intel_screen.c +++ b/src/mesa/drivers/dri/i915/intel_screen.c @@ -415,7 +415,7 @@ intel_create_image_from_texture(__DRIcontext *context, int target, image->data = loaderPrivate; intel_setup_image_from_mipmap_tree(intel, image, iobj->mt, level, zoffset); image->dri_format = driGLFormatToImageFormat(image->format); - if (image->dri_format == MESA_FORMAT_NONE) { + if (image->dri_format == __DRI_IMAGE_FORMAT_NONE) { *error = __DRI_IMAGE_ERROR_BAD_PARAMETER; free(image); return NULL; diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index ab6c003b0f..935711106c 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -591,7 +591,7 @@ intel_create_image_from_texture(__DRIcontext *context, int target, image->dri_format = driGLFormatToImageFormat(image->format); image->has_depthstencil = iobj->mt->stencil_mt? true : false; image->planar_format = iobj->planar_format; - if (image->dri_format == MESA_FORMAT_NONE) { + if (image->dri_format == __DRI_IMAGE_FORMAT_NONE) { *error = __DRI_IMAGE_ERROR_BAD_PARAMETER; free(image); return NULL; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): vulkan: don't free uninitialised memory
Module: Mesa Branch: master Commit: e4fe2fd3bb26d52e64d98207692a4469f04fe1d5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e4fe2fd3bb26d52e64d98207692a4469f04fe1d5 Author: Eric Engestrom Date: Fri May 18 17:12:53 2018 +0100 vulkan: don't free uninitialised memory The modifiers array hasn't been initialised by then, much less with data that would need freeing. Move the label after the loop to fix this. Fixes: c80c08e22603 ("vulkan/wsi/x11: Add support for DRI3 v1.2") Signed-off-by: Eric Engestrom Reviewed-by: Lionel Landwerlin --- src/vulkan/wsi/wsi_common_x11.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c index 62739b9912..1bfbc7c300 100644 --- a/src/vulkan/wsi/wsi_common_x11.c +++ b/src/vulkan/wsi/wsi_common_x11.c @@ -1421,10 +1421,10 @@ fail_init_images: for (uint32_t j = 0; j < image; j++) x11_image_finish(chain, pAllocator, >images[j]); -fail_register: for (int i = 0; i < ARRAY_SIZE(modifiers); i++) vk_free(pAllocator, modifiers[i]); +fail_register: xcb_unregister_for_special_event(chain->conn, chain->special_event); wsi_swapchain_finish(>base); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/x11: fix build with DRI3 disabled
Module: Mesa Branch: master Commit: 1945231b48df8ffcfa2eb168f81c3f5984433b01 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1945231b48df8ffcfa2eb168f81c3f5984433b01 Author: Eric Engestrom Date: Tue May 29 16:59:18 2018 +0100 egl/x11: fix build with DRI3 disabled Fixes: 473af0b541b2583f4c72 "egl/x11: deduplicate depth-to-format logic" Signed-off-by: Eric Engestrom Tested-by: Vinson Lee Reviewed-by: Yogesh Marathe --- src/egl/drivers/dri2/platform_x11.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index b2a3000b25..ea9b0cc6d6 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -55,6 +55,9 @@ static EGLBoolean dri2_x11_swap_interval(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, EGLint interval); +uint32_t +dri2_format_for_depth(uint32_t depth); + static void swrastCreateDrawable(struct dri2_egl_display * dri2_dpy, struct dri2_egl_surface * dri2_surf) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): meson: remove unreachable with_glx == 'auto' check
Module: Mesa Branch: master Commit: 728d1da159e072e7ef9956ba5326cc02f4d2589b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=728d1da159e072e7ef9956ba5326cc02f4d2589b Author: Emil Velikov Date: Fri Feb 23 19:32:02 2018 + meson: remove unreachable with_glx == 'auto' check Cannot happen since, props to the autodetection further up. Signed-off-by: Emil Velikov Reviewed-by: Dylan Baker Reviewed-by: Eric Engestrom --- meson.build | 6 +- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/meson.build b/meson.build index d0cb896163..d4f460e0b6 100644 --- a/meson.build +++ b/meson.build @@ -344,11 +344,7 @@ endif pre_args += '-DGLX_USE_TLS' if with_glx != 'disabled' if not (with_platform_x11 and with_any_opengl) -if with_glx == 'auto' - with_glx = 'disabled' -else - error('Cannot build GLX support without X11 platform support and at least one OpenGL API') -endif +error('Cannot build GLX support without X11 platform support and at least one OpenGL API') elif with_glx == 'gallium-xlib' if not with_gallium error('Gallium-xlib based GLX requires at least one gallium driver') ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): meson: require shared glapi when using DRI based libGL
Module: Mesa Branch: master Commit: 63b95fb291d7978e300c496cedc0851261101332 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=63b95fb291d7978e300c496cedc0851261101332 Author: Emil Velikov Date: Fri Feb 23 19:32:03 2018 + meson: require shared glapi when using DRI based libGL Just like we do in the autotools build. Signed-off-by: Emil Velikov Reviewed-by: Dylan Baker Reviewed-by: Eric Engestrom --- meson.build | 8 ++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index d4f460e0b6..4aafba802a 100644 --- a/meson.build +++ b/meson.build @@ -357,8 +357,12 @@ if with_glx != 'disabled' if with_dri error('xlib conflicts with any dri driver') endif - elif with_glx == 'dri' and not with_dri -error('dri based GLX requires at least one DRI driver') + elif with_glx == 'dri' +if not with_dri + error('dri based GLX requires at least one DRI driver') +elif not with_shared_glapi + error('dri based GLX requires shared-glapi') +endif endif endif ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): tegra: Fix scanout resources without modifiers
Module: Mesa Branch: master Commit: 9603d81df05105857b676f20dff964ef3ab0ecff URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9603d81df05105857b676f20dff964ef3ab0ecff Author: Thierry Reding Date: Thu Mar 15 21:59:02 2018 +0100 tegra: Fix scanout resources without modifiers Resources created for scanout but without modifiers need to be treated as pitch-linear. This is because applications that don't use modifiers to create resources must be assumed to not understand modifiers and in turn won't be able to create a DRM framebuffer and passing along which modifiers were picked by the implementation. Tested-by: Daniel Kolesa Cc: mesa-sta...@lists.freedesktop.org Signed-off-by: Thierry Reding --- src/gallium/drivers/tegra/tegra_screen.c | 19 ++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/tegra/tegra_screen.c b/src/gallium/drivers/tegra/tegra_screen.c index 41bf2052f9..8b61c09016 100644 --- a/src/gallium/drivers/tegra/tegra_screen.c +++ b/src/gallium/drivers/tegra/tegra_screen.c @@ -260,6 +260,7 @@ tegra_screen_resource_create(struct pipe_screen *pscreen, const struct pipe_resource *template) { struct tegra_screen *screen = to_tegra_screen(pscreen); + uint64_t modifier = DRM_FORMAT_MOD_INVALID; struct tegra_resource *resource; int err; @@ -267,7 +268,23 @@ tegra_screen_resource_create(struct pipe_screen *pscreen, if (!resource) return NULL; - resource->gpu = screen->gpu->resource_create(screen->gpu, template); + /* +* Applications that create scanout resources without modifiers are very +* unlikely to support modifiers at all. In that case the resources need +* to be created with a pitch-linear layout so that they can be properly +* shared with scanout hardware. +* +* Technically it is possible for applications to create resources without +* specifying a modifier but still query the modifier associated with the +* resource (e.g. using gbm_bo_get_modifier()) before handing it to the +* framebuffer creation API (such as the DRM_IOCTL_MODE_ADDFB2 IOCTL). +*/ + if (template->bind & PIPE_BIND_SCANOUT) + modifier = DRM_FORMAT_MOD_LINEAR; + + resource->gpu = screen->gpu->resource_create_with_modifiers(screen->gpu, + template, + , 1); if (!resource->gpu) goto free; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): tegra: Remove usage of non-stable UAPI
Module: Mesa Branch: master Commit: bd3e97e5aad7800b8e17ed10d34a070926691945 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bd3e97e5aad7800b8e17ed10d34a070926691945 Author: Thierry Reding Date: Mon Mar 12 17:53:51 2018 +0100 tegra: Remove usage of non-stable UAPI This code path is no longer required with framebuffer modifier support. Tested-by: Daniel Kolesa Cc: mesa-sta...@lists.freedesktop.org Signed-off-by: Thierry Reding --- src/gallium/drivers/tegra/tegra_screen.c | 69 ++-- 1 file changed, 3 insertions(+), 66 deletions(-) diff --git a/src/gallium/drivers/tegra/tegra_screen.c b/src/gallium/drivers/tegra/tegra_screen.c index 669f22a194..41bf2052f9 100644 --- a/src/gallium/drivers/tegra/tegra_screen.c +++ b/src/gallium/drivers/tegra/tegra_screen.c @@ -219,11 +219,9 @@ free: } static int tegra_screen_import_resource(struct tegra_screen *screen, -struct tegra_resource *resource, -bool has_modifiers) +struct tegra_resource *resource) { unsigned usage = PIPE_HANDLE_USAGE_READ; - struct drm_tegra_gem_set_tiling args; struct winsys_handle handle; boolean status; int fd, err; @@ -254,67 +252,6 @@ static int tegra_screen_import_resource(struct tegra_screen *screen, close(fd); - if (!has_modifiers) { - memset(, 0, sizeof(args)); - args.handle = resource->handle; - - switch (handle.modifier) { - case DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED: -args.mode = DRM_TEGRA_GEM_TILING_MODE_TILED; -break; - - case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB: -args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK; -args.value = 0; -break; - - case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB: -args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK; -args.value = 1; -break; - - case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB: -args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK; -args.value = 2; -break; - - case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB: -args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK; -args.value = 3; -break; - - case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB: -args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK; -args.value = 4; -break; - - case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB: -args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK; -args.value = 5; -break; - - default: -debug_printf("unsupported modifier %" PRIx64 ", assuming linear\n", - handle.modifier); -/* fall-through */ - - case DRM_FORMAT_MOD_LINEAR: -args.mode = DRM_TEGRA_GEM_TILING_MODE_PITCH; -break; - } - - err = drmIoctl(screen->fd, DRM_IOCTL_TEGRA_GEM_SET_TILING, ); - if (err < 0) { - fprintf(stderr, "failed to set tiling parameters: %s\n", - strerror(errno)); - err = -errno; - goto out; - } - } - - return 0; - -out: return err; } @@ -336,7 +273,7 @@ tegra_screen_resource_create(struct pipe_screen *pscreen, /* import scanout buffers for display */ if (template->bind & PIPE_BIND_SCANOUT) { - err = tegra_screen_import_resource(screen, resource, false); + err = tegra_screen_import_resource(screen, resource); if (err < 0) goto destroy; } @@ -575,7 +512,7 @@ tegra_screen_resource_create_with_modifiers(struct pipe_screen *pscreen, if (!resource->gpu) goto free; - err = tegra_screen_import_resource(screen, resource, true); + err = tegra_screen_import_resource(screen, resource); if (err < 0) goto destroy; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): tegra: Treat resources with modifiers as scanout
Module: Mesa Branch: master Commit: 9e539012dfaa848fc4cfde83c3f3a83fee274ca4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9e539012dfaa848fc4cfde83c3f3a83fee274ca4 Author: Thierry Reding Date: Wed Apr 4 16:04:25 2018 +0200 tegra: Treat resources with modifiers as scanout Resources created with modifiers are treated as scanout because there is no way for applications to specify the usage (though that capability may be useful to have in the future). Currently all the resources created by applications with modifiers are for scanout, so make sure they have bind flags set accordingly. This is necessary in order to properly export buffers for such resources so that they can be shared with scanout hardware. Tested-by: Daniel Kolesa Cc: mesa-sta...@lists.freedesktop.org Signed-off-by: Thierry Reding --- src/gallium/drivers/tegra/tegra_screen.c | 13 - 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/tegra/tegra_screen.c b/src/gallium/drivers/tegra/tegra_screen.c index 8b61c09016..e03e71f81a 100644 --- a/src/gallium/drivers/tegra/tegra_screen.c +++ b/src/gallium/drivers/tegra/tegra_screen.c @@ -515,6 +515,7 @@ tegra_screen_resource_create_with_modifiers(struct pipe_screen *pscreen, int count) { struct tegra_screen *screen = to_tegra_screen(pscreen); + struct pipe_resource tmpl = *template; struct tegra_resource *resource; int err; @@ -522,8 +523,18 @@ tegra_screen_resource_create_with_modifiers(struct pipe_screen *pscreen, if (!resource) return NULL; + /* +* Assume that resources created with modifiers will always be used for +* scanout. This is necessary because some of the APIs that are used to +* create resources with modifiers (e.g. gbm_bo_create_with_modifiers()) +* can't pass along usage information. Adding that capability might be +* worth adding to remove this ambiguity. Not all future use-cases that +* involve modifiers may always be targetting scanout hardware. +*/ + tmpl.bind |= PIPE_BIND_SCANOUT; + resource->gpu = screen->gpu->resource_create_with_modifiers(screen->gpu, - template, + , modifiers, count); if (!resource->gpu) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs: add favicon to the website
Module: Mesa Branch: master Commit: f736be86bbb4932e89e08f25d4430d96230b11f7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f736be86bbb4932e89e08f25d4430d96230b11f7 Author: Eric Engestrom Date: Fri May 4 12:46:17 2018 +0100 docs: add favicon to the website favicon.png is just gears.png resized to 64x64, and favicon.ico is generated using this command, adapted from the ImageMagick example [1]: $ convert favicon.png -background black \ \( -clone 0 -resize 16x16 \) \ \( -clone 0 -resize 32x32 \) \ \( -clone 0 -resize 48x48 \) \ \( -clone 0 -resize 64x64 \) \ -delete 0 -alpha off -colors 256 favicon.ico We could edit every html page to add ``, but there's not much point as pretty much every browser will pick it up automatically if the file is named `favicon.ico` and is in the root folder. [1] http://www.imagemagick.org/Usage/thumbnails/#favicon Signed-off-by: Eric Engestrom --- docs/favicon.ico | Bin 0 -> 13094 bytes docs/favicon.png | Bin 0 -> 2998 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 00..e7e244a161 Binary files /dev/null and b/docs/favicon.ico differ diff --git a/docs/favicon.png b/docs/favicon.png new file mode 100644 index 00..19898ef742 Binary files /dev/null and b/docs/favicon.png differ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs: add missing html tag
Module: Mesa Branch: master Commit: 3b5376330fb0dd7a4c1fe15160bf67e30b33cdc9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3b5376330fb0dd7a4c1fe15160bf67e30b33cdc9 Author: Eric Engestrom Date: Tue May 29 14:47:10 2018 +0100 docs: add missing html tag Signed-off-by: Eric Engestrom --- docs/release-calendar.html | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release-calendar.html b/docs/release-calendar.html index 754696200d..4fce25ea24 100644 --- a/docs/release-calendar.html +++ b/docs/release-calendar.html @@ -82,6 +82,7 @@ if you'd like to nominate a patch in the next stable release. Emil Velikov + 2018-08-24 18.1.7 Emil Velikov ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs: add missing html closing tag
Module: Mesa Branch: master Commit: e6a1aca0b27305a718b8679dea10c432f1fa2fc8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e6a1aca0b27305a718b8679dea10c432f1fa2fc8 Author: Eric Engestrom Date: Tue May 29 14:47:53 2018 +0100 docs: add missing html closing tag Signed-off-by: Eric Engestrom --- docs/relnotes/18.0.0.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/relnotes/18.0.0.html b/docs/relnotes/18.0.0.html index 6fa6370a06..9b7951bdf1 100644 --- a/docs/relnotes/18.0.0.html +++ b/docs/relnotes/18.0.0.html @@ -48,8 +48,8 @@ Note: some of the new features are only available with certain drivers. Disk shader cache support for i965 when MESA_GLSL_CACHE_DISABLE environment variable is set to "0" or "false" GL_ARB_shader_atomic_counters and GL_ARB_shader_atomic_counter_ops on r600/evergreen+ GL_ARB_shader_image_load_store and GL_ARB_shader_image_size on r600/evergreen+ -GL_ARB_shader_storage_buffer_object on r600/evergreen+ -GL_ARB_compute_shader on r600/evergreen+ +GL_ARB_shader_storage_buffer_object on r600/evergreen+ +GL_ARB_compute_shader on r600/evergreen+ GL_ARB_cull_distance on r600/evergreen+ GL_ARB_enhanced_layouts on r600/evergreen+ GL_ARB_bindless_texture on nvc0/kepler ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): nir/print: fix printing of 8/16 bit constant variables
Module: Mesa Branch: master Commit: 56792a0876ba088fa3d2ea63b2ab87f41ad52598 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=56792a0876ba088fa3d2ea63b2ab87f41ad52598 Author: Karol Herbst Date: Thu May 10 10:20:47 2018 +0200 nir/print: fix printing of 8/16 bit constant variables v2 (Jose Maria Casanova Crespo ): add float16 support Signed-off-by: Karol Herbst Reviewed-by: Jose Maria Casanova Crespo --- src/compiler/nir/nir_print.c | 31 +++ 1 file changed, 31 insertions(+) diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index 97b2d6164c..fad274e62f 100644 --- a/src/compiler/nir/nir_print.c +++ b/src/compiler/nir/nir_print.c @@ -299,6 +299,28 @@ print_constant(nir_constant *c, const struct glsl_type *type, print_state *state unsigned i, j; switch (glsl_get_base_type(type)) { + case GLSL_TYPE_UINT8: + case GLSL_TYPE_INT8: + /* Only float base types can be matrices. */ + assert(cols == 1); + + for (i = 0; i < rows; i++) { + if (i > 0) fprintf(fp, ", "); + fprintf(fp, "0x%02x", c->values[0].u8[i]); + } + break; + + case GLSL_TYPE_UINT16: + case GLSL_TYPE_INT16: + /* Only float base types can be matrices. */ + assert(cols == 1); + + for (i = 0; i < rows; i++) { + if (i > 0) fprintf(fp, ", "); + fprintf(fp, "0x%04x", c->values[0].u16[i]); + } + break; + case GLSL_TYPE_UINT: case GLSL_TYPE_INT: case GLSL_TYPE_BOOL: @@ -311,6 +333,15 @@ print_constant(nir_constant *c, const struct glsl_type *type, print_state *state } break; + case GLSL_TYPE_FLOAT16: + for (i = 0; i < cols; i++) { + for (j = 0; j < rows; j++) { +if (i + j > 0) fprintf(fp, ", "); +fprintf(fp, "%f", _mesa_half_to_float(c->values[i].u16[j])); + } + } + break; + case GLSL_TYPE_FLOAT: for (i = 0; i < cols; i++) { for (j = 0; j < rows; j++) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): util/u_math: Implement a logbase2 function for unsigned long
Module: Mesa Branch: master Commit: 03f592a164fa95abbc839dc9820d2ef9fdd21edd URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=03f592a164fa95abbc839dc9820d2ef9fdd21edd Author: Pierre Moreau Date: Sat May 6 17:52:59 2017 +0200 util/u_math: Implement a logbase2 function for unsigned long v2 (Karol Herbst ): * removed unneeded ll * ll -> ull Signed-off-by: Karol Herbst Reviewed-by: Eric Engestrom Reviewed-by: Ilia Mirkin --- src/gallium/auxiliary/util/u_math.h | 55 + src/util/bitscan.h | 11 2 files changed, 66 insertions(+) diff --git a/src/gallium/auxiliary/util/u_math.h b/src/gallium/auxiliary/util/u_math.h index 46d02978fd..79869a119a 100644 --- a/src/gallium/auxiliary/util/u_math.h +++ b/src/gallium/auxiliary/util/u_math.h @@ -421,6 +421,23 @@ util_logbase2(unsigned n) #endif } +static inline uint64_t +util_logbase2_64(uint64_t n) +{ +#if defined(HAVE___BUILTIN_CLZLL) + return ((sizeof(uint64_t) * 8 - 1) - __builtin_clzll(n | 1)); +#else + uint64_t pos = 0ull; + if (n >= 1ull<<32) { n >>= 32; pos += 32; } + if (n >= 1ull<<16) { n >>= 16; pos += 16; } + if (n >= 1ull<< 8) { n >>= 8; pos += 8; } + if (n >= 1ull<< 4) { n >>= 4; pos += 4; } + if (n >= 1ull<< 2) { n >>= 2; pos += 2; } + if (n >= 1ull<< 1) { pos += 1; } + return pos; +#endif +} + /** * Returns the ceiling of log n base 2, and 0 when n == 0. Equivalently, * returns the smallest x such that n <= 2**x. @@ -434,6 +451,15 @@ util_logbase2_ceil(unsigned n) return 1 + util_logbase2(n - 1); } +static inline uint64_t +util_logbase2_ceil64(uint64_t n) +{ + if (n <= 1) + return 0; + + return 1ull + util_logbase2_64(n - 1); +} + /** * Returns the smallest power of two >= x */ @@ -465,6 +491,35 @@ util_next_power_of_two(unsigned x) #endif } +static inline uint64_t +util_next_power_of_two64(uint64_t x) +{ +#if defined(HAVE___BUILTIN_CLZLL) + if (x <= 1) + return 1; + + return (1ull << ((sizeof(uint64_t) * 8) - __builtin_clzll(x - 1))); +#else + uint64_t val = x; + + if (x <= 1) + return 1; + + if (util_is_power_of_two_or_zero64(x)) + return x; + + val--; + val = (val >> 1) | val; + val = (val >> 2) | val; + val = (val >> 4) | val; + val = (val >> 8) | val; + val = (val >> 16) | val; + val = (val >> 32) | val; + val++; + return val; +#endif +} + /** * Return number of bits set in n. diff --git a/src/util/bitscan.h b/src/util/bitscan.h index 5cc75f0beb..dc89ac93f2 100644 --- a/src/util/bitscan.h +++ b/src/util/bitscan.h @@ -123,6 +123,17 @@ util_is_power_of_two_or_zero(unsigned v) return (v & (v - 1)) == 0; } +/* Determine if an uint64_t value is a power of two. + * + * \note + * Zero is treated as a power of two. + */ +static inline bool +util_is_power_of_two_or_zero64(uint64_t v) +{ + return (v & (v - 1)) == 0; +} + /* Determine if an unsigned value is a power of two. * * \note ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): nv50/ir: Extend ImmediateValue::applyLog2 to 64-bit integers
Module: Mesa Branch: master Commit: f0e80e123c343f0c1e1163c72ead0d05ec117b0f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f0e80e123c343f0c1e1163c72ead0d05ec117b0f Author: Pierre Moreau Date: Sat May 6 17:55:43 2017 +0200 nv50/ir: Extend ImmediateValue::applyLog2 to 64-bit integers Signed-off-by: Karol Herbst Reviewed-by: Karol Herbst Reviewed-by: Ilia Mirkin --- src/gallium/drivers/nouveau/codegen/nv50_ir.cpp | 11 ++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp index c987da9908..49425b98b9 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp @@ -423,7 +423,10 @@ ImmediateValue::isNegative() const bool ImmediateValue::isPow2() const { - return util_is_power_of_two_or_zero(reg.data.u32); + if (reg.type == TYPE_U64 || reg.type == TYPE_S64) + return util_is_power_of_two_or_zero64(reg.data.u64); + else + return util_is_power_of_two_or_zero(reg.data.u32); } void @@ -440,6 +443,12 @@ ImmediateValue::applyLog2() case TYPE_U32: reg.data.u32 = util_logbase2(reg.data.u32); break; + case TYPE_S64: + assert(!this->isNegative()); + // fall through + case TYPE_U64: + reg.data.u64 = util_logbase2_64(reg.data.u64); + break; case TYPE_F32: reg.data.f32 = log2f(reg.data.f32); break; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs: trivial typo fix
Module: Mesa Branch: master Commit: 539aa604a0bc565481d1d38b327879a294feeec6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=539aa604a0bc565481d1d38b327879a294feeec6 Author: Eric Engestrom Date: Tue May 29 12:10:03 2018 +0100 docs: trivial typo fix Signed-off-by: Eric Engestrom --- docs/relnotes/18.2.0.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/relnotes/18.2.0.html b/docs/relnotes/18.2.0.html index f3bdb6605c..00b253c076 100644 --- a/docs/relnotes/18.2.0.html +++ b/docs/relnotes/18.2.0.html @@ -50,7 +50,7 @@ Note: some of the new features are only available with certain drivers. Bug fixes -TBD +TBD Changes ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radv: split radv_emit_shader_pointer()
Module: Mesa Branch: master Commit: 288fe7ec714f0920e870d0551bdaccf277e12a59 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=288fe7ec714f0920e870d0551bdaccf277e12a59 Author: Samuel Pitoiset Date: Fri May 25 14:59:19 2018 +0200 radv: split radv_emit_shader_pointer() This will allow to emit consecutive shader pointers for reducing the number of emitted SET_SH_REG packets, which is recommended. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen --- src/amd/vulkan/radv_private.h | 25 - 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index e2fa58d8d1..e554fc7acc 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -1131,13 +1131,17 @@ bool radv_get_memory_fd(struct radv_device *device, int *pFD); static inline void -radv_emit_shader_pointer(struct radv_device *device, -struct radeon_winsys_cs *cs, -uint32_t sh_offset, uint64_t va, bool global) +radv_emit_shader_pointer_head(struct radeon_winsys_cs *cs, + unsigned sh_offset, bool use_32bit_pointers) { - bool use_32bit_pointers = HAVE_32BIT_POINTERS && !global; - radeon_set_sh_reg_seq(cs, sh_offset, use_32bit_pointers ? 1 : 2); +} + +static inline void +radv_emit_shader_pointer_body(struct radv_device *device, + struct radeon_winsys_cs *cs, + uint64_t va, bool use_32bit_pointers) +{ radeon_emit(cs, va); if (use_32bit_pointers) { @@ -1148,6 +1152,17 @@ radv_emit_shader_pointer(struct radv_device *device, } } +static inline void +radv_emit_shader_pointer(struct radv_device *device, +struct radeon_winsys_cs *cs, +uint32_t sh_offset, uint64_t va, bool global) +{ + bool use_32bit_pointers = HAVE_32BIT_POINTERS && !global; + + radv_emit_shader_pointer_head(cs, sh_offset, use_32bit_pointers); + radv_emit_shader_pointer_body(device, cs, va, use_32bit_pointers); +} + static inline struct radv_descriptor_state * radv_get_descriptors_state(struct radv_cmd_buffer *cmd_buffer, VkPipelineBindPoint bind_point) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radv: allow radv_emit_shader_pointer_head() to emit more pointers
Module: Mesa Branch: master Commit: 21baf33a942fafaccfaf9c802d0148f31b1b36ef URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=21baf33a942fafaccfaf9c802d0148f31b1b36ef Author: Samuel Pitoiset Date: Fri May 25 14:59:20 2018 +0200 radv: allow radv_emit_shader_pointer_head() to emit more pointers Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen --- src/amd/vulkan/radv_private.h | 8 +--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index e554fc7acc..708cacf770 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -1132,9 +1132,11 @@ bool radv_get_memory_fd(struct radv_device *device, static inline void radv_emit_shader_pointer_head(struct radeon_winsys_cs *cs, - unsigned sh_offset, bool use_32bit_pointers) + unsigned sh_offset, unsigned pointer_count, + bool use_32bit_pointers) { - radeon_set_sh_reg_seq(cs, sh_offset, use_32bit_pointers ? 1 : 2); + radeon_emit(cs, PKT3(PKT3_SET_SH_REG, pointer_count * (use_32bit_pointers ? 1 : 2), 0)); + radeon_emit(cs, (sh_offset - SI_SH_REG_OFFSET) >> 2); } static inline void @@ -1159,7 +1161,7 @@ radv_emit_shader_pointer(struct radv_device *device, { bool use_32bit_pointers = HAVE_32BIT_POINTERS && !global; - radv_emit_shader_pointer_head(cs, sh_offset, use_32bit_pointers); + radv_emit_shader_pointer_head(cs, sh_offset, 1, use_32bit_pointers); radv_emit_shader_pointer_body(device, cs, va, use_32bit_pointers); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radv: emit shader descriptor pointers consecutively
Module: Mesa Branch: master Commit: 88d1ed0f818930fd37ea012893405f21ef1b78ea URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=88d1ed0f818930fd37ea012893405f21ef1b78ea Author: Samuel Pitoiset Date: Fri May 25 14:59:21 2018 +0200 radv: emit shader descriptor pointers consecutively This reduces the number of SET_SH_REG packets which are emitted for applications that use more than one descriptor set per stage. We should be able to emit more SET_SH_REG packets consecutively (like push constants and vertex buffers for the vertex stage), but this will be improved later. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen --- src/amd/vulkan/radv_cmd_buffer.c | 104 +-- 1 file changed, 57 insertions(+), 47 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 3e3dbf6a85..8f351b52c9 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -595,6 +595,46 @@ radv_emit_userdata_address(struct radv_cmd_buffer *cmd_buffer, } static void +radv_emit_descriptor_pointers(struct radv_cmd_buffer *cmd_buffer, + struct radv_pipeline *pipeline, + struct radv_descriptor_state *descriptors_state, + gl_shader_stage stage) +{ + struct radv_device *device = cmd_buffer->device; + struct radeon_winsys_cs *cs = cmd_buffer->cs; + uint32_t sh_base = pipeline->user_data_0[stage]; + struct radv_userdata_locations *locs = + >shaders[stage]->info.user_sgprs_locs; + unsigned mask; + + mask = descriptors_state->dirty & descriptors_state->valid; + + for (int i = 0; i < MAX_SETS; i++) { + struct radv_userdata_info *loc = >descriptor_sets[i]; + if (loc->sgpr_idx != -1 && !loc->indirect) + continue; + mask &= ~(1 << i); + } + + while (mask) { + int start, count; + + u_bit_scan_consecutive_range(, , ); + + struct radv_userdata_info *loc = >descriptor_sets[start]; + unsigned sh_offset = sh_base + loc->sgpr_idx * 4; + + radv_emit_shader_pointer_head(cs, sh_offset, count, true); + for (int i = 0; i < count; i++) { + struct radv_descriptor_set *set = + descriptors_state->sets[start + i]; + + radv_emit_shader_pointer_body(device, cs, set->va, true); + } + } +} + +static void radv_update_multisample_state(struct radv_cmd_buffer *cmd_buffer, struct radv_pipeline *pipeline) { @@ -1423,47 +1463,6 @@ radv_cmd_buffer_flush_dynamic_state(struct radv_cmd_buffer *cmd_buffer) } static void -emit_stage_descriptor_set_userdata(struct radv_cmd_buffer *cmd_buffer, - struct radv_pipeline *pipeline, - int idx, - uint64_t va, - gl_shader_stage stage) -{ - struct radv_userdata_info *desc_set_loc = >shaders[stage]->info.user_sgprs_locs.descriptor_sets[idx]; - uint32_t base_reg = pipeline->user_data_0[stage]; - - if (desc_set_loc->sgpr_idx == -1 || desc_set_loc->indirect) - return; - - assert(!desc_set_loc->indirect); - assert(desc_set_loc->num_sgprs == (HAVE_32BIT_POINTERS ? 1 : 2)); - - radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs, -base_reg + desc_set_loc->sgpr_idx * 4, va, false); -} - -static void -radv_emit_descriptor_set_userdata(struct radv_cmd_buffer *cmd_buffer, - VkShaderStageFlags stages, - struct radv_descriptor_set *set, - unsigned idx) -{ - if (cmd_buffer->state.pipeline) { - radv_foreach_stage(stage, stages) { - if (cmd_buffer->state.pipeline->shaders[stage]) - emit_stage_descriptor_set_userdata(cmd_buffer, cmd_buffer->state.pipeline, - idx, set->va, - stage); - } - } - - if (cmd_buffer->state.compute_pipeline && (stages & VK_SHADER_STAGE_COMPUTE_BIT)) - emit_stage_descriptor_set_userdata(cmd_buffer, cmd_buffer->state.compute_pipeline, - idx, set->va, - MESA_SHADER_COMPUTE); -} - -static void radv_flush_push_descriptors(struct radv_cmd_buffer *cmd_buffer, VkPipelineBindPoint bind_point) { @@ -1544,7 +1543,6 @@ radv_flush_descriptors(struct radv_cmd_buffer *cmd_buffer,