lima: add support for srgb textures
Add lowering pass to convert textures from srgb when using srgb formats. Signed-off-by: Erico Nunes <nunes.erico@gmail.com> Reviewed-by: Vasily Khoruzhick <anarsoul@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39320>
This commit is contained in:
parent
bcab449924
commit
d18db3e33d
4 changed files with 46 additions and 20 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 &&
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue