[Mesa-dev] [PATCH 5/6] i965/vs: implement ir_query_levels
Christoph Brill
egore911 at egore911.de
Sat Oct 5 00:07:31 PDT 2013
2013/10/5 Chris Forbes <chrisf at ijw.co.nz>
> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
> ---
> src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> index 9e6cc78..1112b23 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> @@ -2192,6 +2192,10 @@ vec4_visitor::visit(ir_texture *ir)
> lod = this->result;
> lod_type = ir->lod_info.lod->type;
> break;
> + case ir_query_levels:
> + lod = src_reg(0);
> + lod_type = glsl_type::int_type;
> + break;
> case ir_txf_ms:
> ir->lod_info.sample_index->accept(this);
> sample_index = this->result;
> @@ -2232,6 +2236,8 @@ vec4_visitor::visit(ir_texture *ir)
> break;
> case ir_tg4:
> inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TG4);
>
I think you are missing a "break;" here.
> + case ir_query_levels:
> + inst = new(mem_ctx) vec4_instruction(this, SHADER_OPCODE_TXS);
> break;
> case ir_txb:
> assert(!"TXB is not valid for vertex shaders.");
> @@ -2264,7 +2270,7 @@ vec4_visitor::visit(ir_texture *ir)
> /* MRF for the first parameter */
> int param_base = inst->base_mrf + inst->header_present;
>
> - if (ir->op == ir_txs) {
> + if (ir->op == ir_txs || ir->op == ir_query_levels) {
> int writemask = brw->gen == 4 ? WRITEMASK_W : WRITEMASK_X;
> emit(MOV(dst_reg(MRF, param_base, lod_type, writemask), lod));
> } else {
> @@ -2415,6 +2421,13 @@ vec4_visitor::swizzle_result(ir_texture *ir,
> src_reg orig_val, int sampler)
> this->result = src_reg(this, ir->type);
> dst_reg swizzled_result(this->result);
>
> + if (ir->op == ir_query_levels) {
> + /* # levels is in .w */
> + orig_val.swizzle = BRW_SWIZZLE4(SWIZZLE_W, SWIZZLE_W, SWIZZLE_W,
> SWIZZLE_W);
> + emit(MOV(swizzled_result, orig_val));
> + return;
> + }
> +
> if (ir->op == ir_txs || ir->type == glsl_type::float_type
> || s == SWIZZLE_NOOP || ir->op == ir_tg4) {
> emit(MOV(swizzled_result, orig_val));
> --
> 1.8.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20131005/741cdb6a/attachment.html>
More information about the mesa-dev
mailing list