diff --git a/src/gallium/drivers/lima/ci/lima-fails.txt b/src/gallium/drivers/lima/ci/lima-fails.txt index f70801fcd10..96c39b7f2eb 100644 --- a/src/gallium/drivers/lima/ci/lima-fails.txt +++ b/src/gallium/drivers/lima/ci/lima-fails.txt @@ -94,7 +94,6 @@ spec@arb_point_sprite@arb_point_sprite-checkerboard,Fail spec@arb_point_sprite@arb_point_sprite-mipmap,Fail spec@arb_provoking_vertex@arb-provoking-vertex-clipped-geometry-flatshading,Fail spec@arb_provoking_vertex@arb-provoking-vertex-render,Fail -spec@arb_sampler_objects@gl_ext_texture_srgb_decode,Fail spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail spec@arb_shader_texture_lod@execution@glsl-fs-shadow2dgradarb-01,Fail @@ -187,33 +186,37 @@ spec@ext_packed_depth_stencil@fbo-stencil-gl_depth24_stencil8-copypixels,Fail spec@ext_provoking_vertex@provoking-vertex,Fail spec@ext_texture_format_bgra8888@api-errors,Fail spec@ext_texture_lod_bias@lodbias,Fail -spec@ext_texture_srgb@tex-srgb,Fail +# srgb bordercolor tests fail only on the GL_CLAMP subtests, likely due to +# interpolating bordercolor in srgb before applying srgb->linear conversion +# in shader. spec@ext_texture_srgb@texwrap formats bordercolor,Fail spec@ext_texture_srgb@texwrap formats bordercolor@GL_SRGB8_ALPHA8- border color only,Fail spec@ext_texture_srgb@texwrap formats bordercolor@GL_SRGB8- border color only,Fail spec@ext_texture_srgb@texwrap formats bordercolor-swizzled,Fail spec@ext_texture_srgb@texwrap formats bordercolor-swizzled@GL_SRGB8_ALPHA8- swizzled- border color only,Fail spec@ext_texture_srgb@texwrap formats bordercolor-swizzled@GL_SRGB8- swizzled- border color only,Fail -spec@ext_texture_srgb@texwrap formats,Fail -spec@ext_texture_srgb@texwrap formats@GL_SRGB8_ALPHA8,Fail -spec@ext_texture_srgb@texwrap formats@GL_SRGB8_ALPHA8- NPOT,Fail -spec@ext_texture_srgb@texwrap formats@GL_SRGB8_ALPHA8- swizzled,Fail -spec@ext_texture_srgb@texwrap formats@GL_SRGB8,Fail -spec@ext_texture_srgb@texwrap formats@GL_SRGB8- NPOT,Fail -spec@ext_texture_srgb@texwrap formats@GL_SRGB8- swizzled,Fail spec@ext_texture_srgb@texwrap formats-s3tc bordercolor-swizzled,Fail spec@ext_texture_srgb@texwrap formats-s3tc bordercolor-swizzled@GL_COMPRESSED_SRGB_ALPHA- swizzled- border color only,Fail spec@ext_texture_srgb@texwrap formats-s3tc bordercolor-swizzled@GL_COMPRESSED_SRGB- swizzled- border color only,Fail spec@ext_texture_srgb@texwrap formats-s3tc bordercolor,Fail spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SRGB_ALPHA- border color only,Fail spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SRGB- border color only,Fail -spec@ext_texture_srgb@texwrap formats-s3tc,Fail -spec@ext_texture_srgb@texwrap formats-s3tc@GL_COMPRESSED_SRGB_ALPHA- NPOT,Fail -spec@ext_texture_srgb@texwrap formats-s3tc@GL_COMPRESSED_SRGB_ALPHA- swizzled,Fail -spec@ext_texture_srgb@texwrap formats-s3tc@GL_COMPRESSED_SRGB_ALPHA,Fail -spec@ext_texture_srgb@texwrap formats-s3tc@GL_COMPRESSED_SRGB- NPOT,Fail -spec@ext_texture_srgb@texwrap formats-s3tc@GL_COMPRESSED_SRGB- swizzled,Fail -spec@ext_texture_srgb@texwrap formats-s3tc@GL_COMPRESSED_SRGB,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor-swizzled@GL_COMPRESSED_SLUMINANCE- swizzled- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor-swizzled@GL_COMPRESSED_SLUMINANCE_ALPHA- swizzled- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor-swizzled@GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT- swizzled- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor-swizzled@GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT- swizzled- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor-swizzled@GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT- swizzled- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor-swizzled@GL_COMPRESSED_SRGB_S3TC_DXT1_EXT- swizzled- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SLUMINANCE- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SLUMINANCE_ALPHA- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT- border color only,Fail +spec@ext_texture_srgb@texwrap formats-s3tc bordercolor@GL_COMPRESSED_SRGB_S3TC_DXT1_EXT- border color only,Fail +spec@ext_texture_srgb@texwrap formats bordercolor-swizzled@GL_SLUMINANCE8- swizzled- border color only,Fail +spec@ext_texture_srgb@texwrap formats bordercolor-swizzled@GL_SLUMINANCE8_ALPHA8- swizzled- border color only,Fail +spec@ext_texture_srgb@texwrap formats bordercolor@GL_SLUMINANCE8- border color only,Fail +spec@ext_texture_srgb@texwrap formats bordercolor@GL_SLUMINANCE8_ALPHA8- border color only,Fail spec@glsl-1.10@execution@built-in-functions@fs-atan-float-float,Fail spec@glsl-1.10@execution@built-in-functions@fs-atan-vec2-vec2,Fail spec@glsl-1.10@execution@built-in-functions@fs-atan-vec3-vec3,Fail @@ -477,6 +480,8 @@ spec@intel_performance_query@intel_performance_query-issue_2235,Fail spec@khr_texture_compression_astc@basic-gles,Fail spec@khr_texture_compression_astc@miptree-gles srgb,Fail spec@khr_texture_compression_astc@miptree-gles srgb-fp,Fail +spec@khr_texture_compression_astc@miptree-gl srgb-fp,Fail +spec@khr_texture_compression_astc@miptree-gl srgb-fp@sRGB decode full precision,Fail spec@oes_point_sprite@arb_point_sprite-checkerboard_gles1,Fail spec@!opengl 1.0@gl-1.0-dlist-bitmap,Fail spec@!opengl 1.0@gl-1.0-dlist-materials,Fail diff --git a/src/gallium/drivers/lima/lima_context.h b/src/gallium/drivers/lima/lima_context.h index f1d6581294e..2d30edf2380 100644 --- a/src/gallium/drivers/lima/lima_context.h +++ b/src/gallium/drivers/lima/lima_context.h @@ -63,6 +63,7 @@ struct lima_fs_uncompiled_shader { struct lima_fs_key { unsigned char nir_sha1[SHA1_DIGEST_LENGTH]; struct { + enum pipe_format format; uint8_t swizzle[4]; } tex[PIPE_MAX_SAMPLERS]; diff --git a/src/gallium/drivers/lima/lima_program.c b/src/gallium/drivers/lima/lima_program.c index 3102ebe549e..4e3b537b93c 100644 --- a/src/gallium/drivers/lima/lima_program.c +++ b/src/gallium/drivers/lima/lima_program.c @@ -333,6 +333,12 @@ lima_fs_compile_shader(struct lima_context *ctx, for (int i = 0; i < ARRAY_SIZE(key->tex); i++) { for (int j = 0; j < 4; j++) tex_options.swizzles[i][j] = key->tex[i].swizzle[j]; + + enum pipe_format format = key->tex[i].format; + if (!format) + continue; + if (util_format_is_srgb(format)) + tex_options.lower_srgb |= (1 << i); } lima_program_optimize_fs_nir(nir, key, &tex_options); @@ -655,6 +661,9 @@ lima_update_fs_state(struct lima_context *ctx) memcpy(key->tex[i].swizzle, identity, 4); continue; } + + key->tex[i].format = sampler->base.format; + for (int j = 0; j < 4; j++) key->tex[i].swizzle[j] = sampler->swizzle[j]; } diff --git a/src/gallium/drivers/lima/lima_texture.c b/src/gallium/drivers/lima/lima_texture.c index 89ff7431b9b..489dcf1bcca 100644 --- a/src/gallium/drivers/lima/lima_texture.c +++ b/src/gallium/drivers/lima/lima_texture.c @@ -29,6 +29,7 @@ #include "util/u_math.h" #include "util/u_debug.h" #include "util/u_transfer.h" +#include "util/format_srgb.h" #include "lima_bo.h" #include "lima_context.h" @@ -226,10 +227,20 @@ lima_update_tex_desc(struct lima_context *ctx, struct lima_sampler_state *sample desc.wrap_t = pipe_wrap_to_lima(sampler->base.wrap_t, using_nearest); desc.wrap_r = pipe_wrap_to_lima(sampler->base.wrap_r, using_nearest); - desc.border_red = sampler->base.border_color.f[0]; - desc.border_green = sampler->base.border_color.f[1]; - desc.border_blue = sampler->base.border_color.f[2]; - desc.border_alpha = sampler->base.border_color.f[3]; + float border_color[4]; + for (int i = 0; i < 4; i++) + border_color[i] = sampler->base.border_color.f[i]; + + if (util_format_is_srgb(texture->base.format)) { + for (int i = 0; i < 3; i++) + border_color[i] = + util_format_linear_to_srgb_float(border_color[i]); + } + + desc.border_red = border_color[0]; + desc.border_green = border_color[1]; + desc.border_blue = border_color[2]; + desc.border_alpha = border_color[3]; if (desc.min_img_filter_nearest && desc.mag_img_filter_nearest && desc.mipfilter == 0 &&