X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fnouveau%2Fnv20_state_tex.c;h=b0a4c9fb0976edfe40a108a2494ff7fb19b067e4;hb=da9e6fdfe27065b8ede8b2fe30c8cccc3b573245;hp=d8bfdf2e58fd6b0332992ab8f75fbfe1562bcf97;hpb=bb4c5d72d7c7cb1d9e7016e2c07c36875f30011a;p=mesa.git diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c index d8bfdf2e58f..b0a4c9fb097 100644 --- a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c +++ b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c @@ -31,6 +31,7 @@ #include "nv20_3d.xml.h" #include "nouveau_util.h" #include "nv20_driver.h" +#include "main/samplerobj.h" void nv20_emit_tex_gen(struct gl_context *ctx, int emit) @@ -86,26 +87,26 @@ static uint32_t get_tex_format_pot(struct gl_texture_image *ti) { switch (ti->TexFormat) { - case MESA_FORMAT_ARGB8888: + case MESA_FORMAT_B8G8R8A8_UNORM: return NV20_3D_TEX_FORMAT_FORMAT_A8R8G8B8; - case MESA_FORMAT_ARGB1555: + case MESA_FORMAT_B5G5R5A1_UNORM: return NV20_3D_TEX_FORMAT_FORMAT_A1R5G5B5; - case MESA_FORMAT_ARGB4444: + case MESA_FORMAT_B4G4R4A4_UNORM: return NV20_3D_TEX_FORMAT_FORMAT_A4R4G4B4; - case MESA_FORMAT_XRGB8888: + case MESA_FORMAT_B8G8R8X8_UNORM: return NV20_3D_TEX_FORMAT_FORMAT_X8R8G8B8; - case MESA_FORMAT_RGB565: + case MESA_FORMAT_B5G6R5_UNORM: return NV20_3D_TEX_FORMAT_FORMAT_R5G6B5; - case MESA_FORMAT_A8: - case MESA_FORMAT_I8: + case MESA_FORMAT_A_UNORM8: + case MESA_FORMAT_I_UNORM8: return NV20_3D_TEX_FORMAT_FORMAT_I8; - case MESA_FORMAT_L8: + case MESA_FORMAT_L_UNORM8: return NV20_3D_TEX_FORMAT_FORMAT_L8; case MESA_FORMAT_RGB_DXT1: @@ -127,26 +128,26 @@ static uint32_t get_tex_format_rect(struct gl_texture_image *ti) { switch (ti->TexFormat) { - case MESA_FORMAT_ARGB8888: + case MESA_FORMAT_B8G8R8A8_UNORM: return NV20_3D_TEX_FORMAT_FORMAT_A8R8G8B8_RECT; - case MESA_FORMAT_ARGB1555: + case MESA_FORMAT_B5G5R5A1_UNORM: return NV20_3D_TEX_FORMAT_FORMAT_A1R5G5B5_RECT; - case MESA_FORMAT_ARGB4444: + case MESA_FORMAT_B4G4R4A4_UNORM: return NV20_3D_TEX_FORMAT_FORMAT_A4R4G4B4_RECT; - case MESA_FORMAT_XRGB8888: + case MESA_FORMAT_B8G8R8X8_UNORM: return NV20_3D_TEX_FORMAT_FORMAT_R8G8B8_RECT; - case MESA_FORMAT_RGB565: + case MESA_FORMAT_B5G6R5_UNORM: return NV20_3D_TEX_FORMAT_FORMAT_R5G6B5_RECT; - case MESA_FORMAT_L8: + case MESA_FORMAT_L_UNORM8: return NV20_3D_TEX_FORMAT_FORMAT_L8_RECT; - case MESA_FORMAT_A8: - case MESA_FORMAT_I8: + case MESA_FORMAT_A_UNORM8: + case MESA_FORMAT_I_UNORM8: return NV20_3D_TEX_FORMAT_FORMAT_I8_RECT; default: @@ -163,11 +164,12 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit) struct gl_texture_object *t; struct nouveau_surface *s; struct gl_texture_image *ti; + const struct gl_sampler_object *sa; uint32_t tx_format, tx_filter, tx_wrap, tx_enable; PUSH_RESET(push, BUFCTX_TEX(i)); - if (!ctx->Texture.Unit[i]._ReallyEnabled) { + if (!ctx->Texture.Unit[i]._Current) { BEGIN_NV04(push, NV20_3D(TEX_ENABLE(i)), 1); PUSH_DATA (push, 0); @@ -178,6 +180,7 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit) t = ctx->Texture.Unit[i]._Current; s = &to_nouveau_texture(t)->surfaces[t->BaseLevel]; ti = t->Image[0][t->BaseLevel]; + sa = _mesa_get_samplerobj(ctx, i); if (!nouveau_texture_validate(ctx, t)) return; @@ -190,16 +193,16 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit) | NV20_3D_TEX_FORMAT_NO_BORDER | 1 << 16; - tx_wrap = nvgl_wrap_mode(t->Sampler.WrapR) << 16 - | nvgl_wrap_mode(t->Sampler.WrapT) << 8 - | nvgl_wrap_mode(t->Sampler.WrapS) << 0; + tx_wrap = nvgl_wrap_mode(sa->WrapR) << 16 + | nvgl_wrap_mode(sa->WrapT) << 8 + | nvgl_wrap_mode(sa->WrapS) << 0; - tx_filter = nvgl_filter_mode(t->Sampler.MagFilter) << 24 - | nvgl_filter_mode(t->Sampler.MinFilter) << 16 + tx_filter = nvgl_filter_mode(sa->MagFilter) << 24 + | nvgl_filter_mode(sa->MinFilter) << 16 | 2 << 12; tx_enable = NV20_3D_TEX_ENABLE_ENABLE - | log2i(t->Sampler.MaxAnisotropy) << 4; + | log2i(sa->MaxAnisotropy) << 4; if (t->Target == GL_TEXTURE_RECTANGLE) { BEGIN_NV04(push, NV20_3D(TEX_NPOT_PITCH(i)), 1); @@ -212,11 +215,11 @@ nv20_emit_tex_obj(struct gl_context *ctx, int emit) tx_format |= get_tex_format_pot(ti); } - if (t->Sampler.MinFilter != GL_NEAREST && - t->Sampler.MinFilter != GL_LINEAR) { - int lod_min = t->Sampler.MinLod; - int lod_max = MIN2(t->Sampler.MaxLod, t->_MaxLambda); - int lod_bias = t->Sampler.LodBias + if (sa->MinFilter != GL_NEAREST && + sa->MinFilter != GL_LINEAR) { + int lod_min = sa->MinLod; + int lod_max = MIN2(sa->MaxLod, t->_MaxLambda); + int lod_bias = sa->LodBias + ctx->Texture.Unit[i].LodBias; lod_max = CLAMP(lod_max, 0, 15); @@ -260,7 +263,7 @@ nv20_emit_tex_shader(struct gl_context *ctx, int emit) int i; for (i = 0; i < NV20_TEXTURE_UNITS; i++) { - if (!ctx->Texture.Unit[i]._ReallyEnabled) + if (!ctx->Texture.Unit[i]._Current) continue; tx_shader_op |= NV20_3D_TEX_SHADER_OP_TX0_TEXTURE_2D << 5 * i;