mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-28 12:30:09 +01:00
i965/fs: Factor out texture offset bitfield computation.
We'll want to reuse this for the VS, and it's complex enough that I'd rather not cut and paste it. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
d93aa54d2d
commit
475d70d6ef
3 changed files with 26 additions and 18 deletions
|
|
@ -1077,24 +1077,7 @@ fs_visitor::visit(ir_texture *ir)
|
|||
fs_reg coordinate = this->result;
|
||||
|
||||
if (ir->offset != NULL) {
|
||||
ir_constant *offset = ir->offset->as_constant();
|
||||
assert(offset != NULL);
|
||||
|
||||
signed char offsets[3];
|
||||
for (unsigned i = 0; i < ir->offset->type->vector_elements; i++)
|
||||
offsets[i] = (signed char) offset->value.i[i];
|
||||
|
||||
/* Combine all three offsets into a single unsigned dword:
|
||||
*
|
||||
* bits 11:8 - U Offset (X component)
|
||||
* bits 7:4 - V Offset (Y component)
|
||||
* bits 3:0 - R Offset (Z component)
|
||||
*/
|
||||
unsigned offset_bits = 0;
|
||||
for (unsigned i = 0; i < ir->offset->type->vector_elements; i++) {
|
||||
const unsigned shift = 4 * (2 - i);
|
||||
offset_bits |= (offsets[i] << shift) & (0xF << shift);
|
||||
}
|
||||
uint32_t offset_bits = brw_texture_offset(ir->offset->as_constant());
|
||||
|
||||
/* Explicitly set up the message header by copying g0 to msg reg m1. */
|
||||
emit(BRW_OPCODE_MOV, fs_reg(MRF, 1, BRW_REGISTER_TYPE_UD),
|
||||
|
|
|
|||
|
|
@ -239,3 +239,26 @@ brw_math_function(enum opcode op)
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t
|
||||
brw_texture_offset(ir_constant *offset)
|
||||
{
|
||||
assert(offset != NULL);
|
||||
|
||||
signed char offsets[3];
|
||||
for (unsigned i = 0; i < offset->type->vector_elements; i++)
|
||||
offsets[i] = (signed char) offset->value.i[i];
|
||||
|
||||
/* Combine all three offsets into a single unsigned dword:
|
||||
*
|
||||
* bits 11:8 - U Offset (X component)
|
||||
* bits 7:4 - V Offset (Y component)
|
||||
* bits 3:0 - R Offset (Z component)
|
||||
*/
|
||||
unsigned offset_bits = 0;
|
||||
for (unsigned i = 0; i < offset->type->vector_elements; i++) {
|
||||
const unsigned shift = 4 * (2 - i);
|
||||
offset_bits |= (offsets[i] << shift) & (0xF << shift);
|
||||
}
|
||||
return offset_bits;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,9 +23,11 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include "brw_defines.h"
|
||||
#include "glsl/ir.h"
|
||||
|
||||
#pragma once
|
||||
|
||||
int brw_type_for_base_type(const struct glsl_type *type);
|
||||
uint32_t brw_conditional_for_comparison(unsigned int op);
|
||||
uint32_t brw_math_function(enum opcode op);
|
||||
uint32_t brw_texture_offset(ir_constant *offset);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue