[Mesa-dev] [PATCH v3 07/12] i965: Consolidate code to get struct brw_sampler_prog_key_data
Kristian Høgsberg
krh at bitplanet.net
Thu Dec 4 22:02:28 PST 2014
This chunk of code is repeated in a few places, and we're going to add
a MESA_SHADER_VERTEX case to it soon.
Signed-off-by: Kristian Høgsberg <krh at bitplanet.net>
---
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 37 ++++++++++++----------------
1 file changed, 16 insertions(+), 21 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index 62ef853..fb8fd22 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -1708,6 +1708,17 @@ fs_visitor::emit_texture_gen7(ir_texture_opcode op, fs_reg dst,
return inst;
}
+static struct brw_sampler_prog_key_data *
+get_tex(gl_shader_stage stage, const void *key)
+{
+ switch (stage) {
+ case MESA_SHADER_FRAGMENT:
+ return &((brw_wm_prog_key*) key)->tex;
+ default:
+ unreachable("unhandled shader stage");
+ }
+}
+
fs_reg
fs_visitor::rescale_texcoord(fs_reg coordinate, const glsl_type *coord_type,
bool is_rect, uint32_t sampler, int texunit)
@@ -1715,10 +1726,7 @@ fs_visitor::rescale_texcoord(fs_reg coordinate, const glsl_type *coord_type,
fs_inst *inst = NULL;
bool needs_gl_clamp = true;
fs_reg scale_x, scale_y;
- const struct brw_sampler_prog_key_data *tex =
- (stage == MESA_SHADER_FRAGMENT) ?
- &((brw_wm_prog_key*) this->key)->tex : NULL;
- assert(tex);
+ struct brw_sampler_prog_key_data *tex = get_tex(stage, this->key);
/* The 965 requires the EU to do the normalization of GL rectangle
* texture coordinates. We use the program parameter state
@@ -1871,10 +1879,7 @@ fs_visitor::emit_texture(ir_texture_opcode op,
uint32_t sampler,
fs_reg sampler_reg, int texunit)
{
- const struct brw_sampler_prog_key_data *tex =
- (stage == MESA_SHADER_FRAGMENT) ?
- &((brw_wm_prog_key*) this->key)->tex : NULL;
- assert(tex);
+ struct brw_sampler_prog_key_data *tex = get_tex(stage, this->key);
fs_inst *inst = NULL;
if (op == ir_tg4) {
@@ -1964,11 +1969,7 @@ fs_visitor::emit_texture(ir_texture_opcode op,
void
fs_visitor::visit(ir_texture *ir)
{
- const struct brw_sampler_prog_key_data *tex =
- (stage == MESA_SHADER_FRAGMENT) ?
- &((brw_wm_prog_key*) this->key)->tex : NULL;
- assert(tex);
-
+ const struct brw_sampler_prog_key_data *tex = get_tex(stage, this->key);
uint32_t sampler =
_mesa_get_sampler_uniform_value(ir->sampler, shader_prog, prog);
@@ -2150,10 +2151,7 @@ fs_visitor::emit_gen6_gather_wa(uint8_t wa, fs_reg dst)
uint32_t
fs_visitor::gather_channel(int orig_chan, uint32_t sampler)
{
- const struct brw_sampler_prog_key_data *tex =
- (stage == MESA_SHADER_FRAGMENT) ?
- &((brw_wm_prog_key*) this->key)->tex : NULL;
- assert(tex);
+ struct brw_sampler_prog_key_data *tex = get_tex(stage, this->key);
int swiz = GET_SWZ(tex->swizzles[sampler], orig_chan);
switch (swiz) {
case SWIZZLE_X: return 0;
@@ -2193,10 +2191,7 @@ fs_visitor::swizzle_result(ir_texture_opcode op, int dest_components,
if (op == ir_txs || op == ir_lod || op == ir_tg4)
return;
- const struct brw_sampler_prog_key_data *tex =
- (stage == MESA_SHADER_FRAGMENT) ?
- &((brw_wm_prog_key*) this->key)->tex : NULL;
- assert(tex);
+ struct brw_sampler_prog_key_data *tex = get_tex(stage, this->key);
if (dest_components == 1) {
/* Ignore DEPTH_TEXTURE_MODE swizzling. */
--
2.2.0
More information about the mesa-dev
mailing list