summaryrefslogtreecommitdiffstats
path: root/src/mesa/state_tracker
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2017-04-14 00:44:00 +0200
committerSamuel Pitoiset <[email protected]>2017-04-18 21:42:01 +0200
commita18ff34452f8427d6d61764e00cb679a4840cd75 (patch)
treee2084eb5c41f936ba0dab2daae03eb0c8bb8fc94 /src/mesa/state_tracker
parentca41ecf83841ae14615e0945395facef89b2110c (diff)
st/mesa: add st_convert_sampler()
Similar to st_convert_image(), will be useful for bindless. While we are at it, rename convert_sampler() to convert_sampler_from_unit() and make 'st' a const argument. Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r--src/mesa/state_tracker/st_atom_sampler.c42
-rw-r--r--src/mesa/state_tracker/st_texture.h6
2 files changed, 36 insertions, 12 deletions
diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c
index 820a57dd4f5..065d1df3353 100644
--- a/src/mesa/state_tracker/st_atom_sampler.c
+++ b/src/mesa/state_tracker/st_atom_sampler.c
@@ -126,20 +126,18 @@ gl_filter_to_img_filter(GLenum filter)
}
-static void
-convert_sampler(struct st_context *st,
- struct pipe_sampler_state *sampler,
- GLuint texUnit)
+/**
+ * Convert a gl_sampler_object to a pipe_sampler_state object.
+ */
+void
+st_convert_sampler(const struct st_context *st,
+ const struct gl_texture_object *texobj,
+ const struct gl_sampler_object *msamp,
+ struct pipe_sampler_state *sampler)
{
- const struct gl_texture_object *texobj;
struct gl_context *ctx = st->ctx;
- const struct gl_sampler_object *msamp;
GLenum texBaseFormat;
- texobj = ctx->Texture.Unit[texUnit]._Current;
- assert(texobj);
-
- msamp = _mesa_get_samplerobj(ctx, texUnit);
texBaseFormat = _mesa_texture_base_format(texobj);
memset(sampler, 0, sizeof(*sampler));
@@ -154,7 +152,7 @@ convert_sampler(struct st_context *st,
if (texobj->Target != GL_TEXTURE_RECTANGLE_ARB)
sampler->normalized_coords = 1;
- sampler->lod_bias = ctx->Texture.Unit[texUnit].LodBias + msamp->LodBias;
+ sampler->lod_bias = msamp->LodBias;
/* Reduce the number of states by allowing only the values that AMD GCN
* can represent. Apps use lod_bias for smooth transitions to bigger mipmap
* levels.
@@ -233,6 +231,26 @@ convert_sampler(struct st_context *st,
}
+static void
+convert_sampler_from_unit(const struct st_context *st,
+ struct pipe_sampler_state *sampler,
+ GLuint texUnit)
+{
+ const struct gl_texture_object *texobj;
+ struct gl_context *ctx = st->ctx;
+ const struct gl_sampler_object *msamp;
+
+ texobj = ctx->Texture.Unit[texUnit]._Current;
+ assert(texobj);
+
+ msamp = _mesa_get_samplerobj(ctx, texUnit);
+
+ st_convert_sampler(st, texobj, msamp, sampler);
+
+ sampler->lod_bias += ctx->Texture.Unit[texUnit].LodBias;
+}
+
+
/**
* Update the gallium driver's sampler state for fragment, vertex or
* geometry shader stage.
@@ -264,7 +282,7 @@ update_shader_samplers(struct st_context *st,
if (samplers_used & 1) {
const GLuint texUnit = prog->SamplerUnits[unit];
- convert_sampler(st, sampler, texUnit);
+ convert_sampler_from_unit(st, sampler, texUnit);
states[unit] = sampler;
*num_samplers = unit + 1;
}
diff --git a/src/mesa/state_tracker/st_texture.h b/src/mesa/state_tracker/st_texture.h
index 44b07da10bc..1b4d1a3ea23 100644
--- a/src/mesa/state_tracker/st_texture.h
+++ b/src/mesa/state_tracker/st_texture.h
@@ -258,4 +258,10 @@ void
st_convert_image(const struct st_context *st, const struct gl_image_unit *u,
struct pipe_image_view *img);
+void
+st_convert_sampler(const struct st_context *st,
+ const struct gl_texture_object *texobj,
+ const struct gl_sampler_object *msamp,
+ struct pipe_sampler_state *sampler);
+
#endif