X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Ffreedreno%2Fa4xx%2Ffd4_texture.c;h=ff1ff8f0d3433f0fd5a8aa615ed2ec7112fdf204;hb=694beb8b830c993e9bfb744655be3dbd558ab3a8;hp=f2cc33b1a635f36b66ab09a5b92ffd37f417f6f9;hpb=bfb0a8eb6967065be92e40ba620fc6fededde51a;p=mesa.git diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_texture.c b/src/gallium/drivers/freedreno/a4xx/fd4_texture.c index f2cc33b1a63..ff1ff8f0d34 100644 --- a/src/gallium/drivers/freedreno/a4xx/fd4_texture.c +++ b/src/gallium/drivers/freedreno/a4xx/fd4_texture.c @@ -169,6 +169,9 @@ fd4_sampler_view_create(struct pipe_context *pctx, struct pipe_resource *prsc, fd4_tex_swiz(cso->format, cso->swizzle_r, cso->swizzle_g, cso->swizzle_b, cso->swizzle_a); + if (util_format_is_srgb(cso->format)) + so->texconst0 |= A4XX_TEX_CONST_0_SRGB; + so->texconst1 = A4XX_TEX_CONST_1_WIDTH(u_minify(prsc->width0, lvl)) | A4XX_TEX_CONST_1_HEIGHT(u_minify(prsc->height0, lvl)); @@ -202,11 +205,43 @@ fd4_sampler_view_create(struct pipe_context *pctx, struct pipe_resource *prsc, return &so->base; } +static void +fd4_set_sampler_views(struct pipe_context *pctx, unsigned shader, + unsigned start, unsigned nr, struct pipe_sampler_view **views) +{ + struct fd_context *ctx = fd_context(pctx); + struct fd4_context *fd4_ctx = fd4_context(ctx); + struct fd_texture_stateobj *tex; + uint16_t integer_s = 0, *ptr; + int i; + + fd_set_sampler_views(pctx, shader, start, nr, views); + + switch (shader) { + case PIPE_SHADER_FRAGMENT: + tex = &ctx->fragtex; + ptr = &fd4_ctx->finteger_s; + break; + case PIPE_SHADER_VERTEX: + tex = &ctx->verttex; + ptr = &fd4_ctx->vinteger_s; + break; + default: + return; + } + + for (i = 0; i < tex->num_textures; i++) + if (util_format_is_pure_integer(tex->textures[i]->format)) + integer_s |= 1 << i; + + *ptr = integer_s; +} + void fd4_texture_init(struct pipe_context *pctx) { pctx->create_sampler_state = fd4_sampler_state_create; pctx->bind_sampler_states = fd_sampler_states_bind; pctx->create_sampler_view = fd4_sampler_view_create; - pctx->set_sampler_views = fd_set_sampler_views; + pctx->set_sampler_views = fd4_set_sampler_views; }