mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
i965/fs: Reimplement emit_mcs_fetch() in terms of logical sends.
Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
ba78a50071
commit
59979b133d
2 changed files with 15 additions and 24 deletions
|
|
@ -243,7 +243,8 @@ public:
|
|||
uint32_t sampler,
|
||||
fs_reg sampler_reg,
|
||||
int texunit);
|
||||
fs_reg emit_mcs_fetch(fs_reg coordinate, int components, fs_reg sampler);
|
||||
fs_reg emit_mcs_fetch(const fs_reg &coordinate, unsigned components,
|
||||
const fs_reg &sampler);
|
||||
void emit_gen6_gather_wa(uint8_t wa, fs_reg dst);
|
||||
void resolve_source_modifiers(fs_reg *src);
|
||||
void emit_discard_jump();
|
||||
|
|
|
|||
|
|
@ -797,31 +797,21 @@ fs_visitor::rescale_texcoord(fs_reg coordinate, int coord_components,
|
|||
|
||||
/* Sample from the MCS surface attached to this multisample texture. */
|
||||
fs_reg
|
||||
fs_visitor::emit_mcs_fetch(fs_reg coordinate, int components, fs_reg sampler)
|
||||
fs_visitor::emit_mcs_fetch(const fs_reg &coordinate, unsigned components,
|
||||
const fs_reg &sampler)
|
||||
{
|
||||
int reg_width = dispatch_width / 8;
|
||||
fs_reg payload = fs_reg(GRF, alloc.allocate(components * reg_width),
|
||||
BRW_REGISTER_TYPE_F);
|
||||
fs_reg dest = vgrf(glsl_type::uvec4_type);
|
||||
fs_reg *sources = ralloc_array(mem_ctx, fs_reg, components);
|
||||
const fs_reg dest = vgrf(glsl_type::uvec4_type);
|
||||
const fs_reg srcs[] = {
|
||||
coordinate, fs_reg(), fs_reg(), fs_reg(), fs_reg(), fs_reg(),
|
||||
sampler, fs_reg(), fs_reg(components), fs_reg(0)
|
||||
};
|
||||
fs_inst *inst = bld.emit(SHADER_OPCODE_TXF_MCS_LOGICAL, dest, srcs,
|
||||
ARRAY_SIZE(srcs));
|
||||
|
||||
/* parameters are: u, v, r; missing parameters are treated as zero */
|
||||
for (int i = 0; i < components; i++) {
|
||||
sources[i] = vgrf(glsl_type::float_type);
|
||||
bld.MOV(retype(sources[i], BRW_REGISTER_TYPE_D), coordinate);
|
||||
coordinate = offset(coordinate, bld, 1);
|
||||
}
|
||||
|
||||
bld.LOAD_PAYLOAD(payload, sources, components, 0);
|
||||
|
||||
fs_inst *inst = bld.emit(SHADER_OPCODE_TXF_MCS, dest, payload, sampler);
|
||||
inst->base_mrf = -1;
|
||||
inst->mlen = components * reg_width;
|
||||
inst->header_size = 0;
|
||||
inst->regs_written = 4 * reg_width; /* we only care about one reg of
|
||||
* response, but the sampler always
|
||||
* writes 4/8
|
||||
*/
|
||||
/* We only care about one reg of response, but the sampler always writes
|
||||
* 4/8.
|
||||
*/
|
||||
inst->regs_written = 4 * dispatch_width / 8;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue