st/glsl_to_tgsi: provide Texture and Format information for image ops
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
3243b6fc97
commit
dfcf420412
|
@ -1242,7 +1242,9 @@ ureg_emit_texture_offset(struct ureg_program *ureg,
|
|||
void
|
||||
ureg_emit_memory(struct ureg_program *ureg,
|
||||
unsigned extended_token,
|
||||
unsigned qualifier)
|
||||
unsigned qualifier,
|
||||
unsigned texture,
|
||||
unsigned format)
|
||||
{
|
||||
union tgsi_any_token *out, *insn;
|
||||
|
||||
|
@ -1253,6 +1255,8 @@ ureg_emit_memory(struct ureg_program *ureg,
|
|||
|
||||
out[0].value = 0;
|
||||
out[0].insn_memory.Qualifier = qualifier;
|
||||
out[0].insn_memory.Texture = texture;
|
||||
out[0].insn_memory.Format = format;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1413,7 +1417,9 @@ ureg_memory_insn(struct ureg_program *ureg,
|
|||
unsigned nr_dst,
|
||||
const struct ureg_src *src,
|
||||
unsigned nr_src,
|
||||
unsigned qualifier)
|
||||
unsigned qualifier,
|
||||
unsigned texture,
|
||||
unsigned format)
|
||||
{
|
||||
struct ureg_emit_insn_result insn;
|
||||
unsigned i;
|
||||
|
@ -1430,7 +1436,7 @@ ureg_memory_insn(struct ureg_program *ureg,
|
|||
nr_dst,
|
||||
nr_src);
|
||||
|
||||
ureg_emit_memory(ureg, insn.extended_token, qualifier);
|
||||
ureg_emit_memory(ureg, insn.extended_token, qualifier, texture, format);
|
||||
|
||||
for (i = 0; i < nr_dst; i++)
|
||||
ureg_emit_dst(ureg, dst[i]);
|
||||
|
|
|
@ -541,7 +541,9 @@ ureg_memory_insn(struct ureg_program *ureg,
|
|||
unsigned nr_dst,
|
||||
const struct ureg_src *src,
|
||||
unsigned nr_src,
|
||||
unsigned qualifier);
|
||||
unsigned qualifier,
|
||||
unsigned texture,
|
||||
unsigned format);
|
||||
|
||||
/***********************************************************************
|
||||
* Internal instruction helpers, don't call these directly:
|
||||
|
@ -582,7 +584,9 @@ ureg_emit_texture_offset(struct ureg_program *ureg,
|
|||
void
|
||||
ureg_emit_memory(struct ureg_program *ureg,
|
||||
unsigned insn_token,
|
||||
unsigned qualifier);
|
||||
unsigned qualifier,
|
||||
unsigned texture,
|
||||
unsigned format);
|
||||
|
||||
void
|
||||
ureg_emit_dst( struct ureg_program *ureg,
|
||||
|
|
|
@ -5572,7 +5572,7 @@ compile_tgsi_instruction(struct st_translate *t,
|
|||
|
||||
int num_dst;
|
||||
int num_src;
|
||||
unsigned tex_target;
|
||||
unsigned tex_target = 0;
|
||||
|
||||
num_dst = num_inst_dst_regs(inst);
|
||||
num_src = num_inst_src_regs(inst);
|
||||
|
@ -5647,32 +5647,38 @@ compile_tgsi_instruction(struct st_translate *t,
|
|||
for (i = num_src - 1; i >= 0; i--)
|
||||
src[i + 1] = src[i];
|
||||
num_src++;
|
||||
if (inst->buffer.file == PROGRAM_MEMORY)
|
||||
if (inst->buffer.file == PROGRAM_MEMORY) {
|
||||
src[0] = t->shared_memory;
|
||||
else if (inst->buffer.file == PROGRAM_BUFFER)
|
||||
} else if (inst->buffer.file == PROGRAM_BUFFER) {
|
||||
src[0] = t->buffers[inst->buffer.index];
|
||||
else
|
||||
} else {
|
||||
src[0] = t->images[inst->buffer.index];
|
||||
tex_target = st_translate_texture_target(inst->tex_target, inst->tex_shadow);
|
||||
}
|
||||
if (inst->buffer.reladdr)
|
||||
src[0] = ureg_src_indirect(src[0], ureg_src(t->address[2]));
|
||||
assert(src[0].File != TGSI_FILE_NULL);
|
||||
ureg_memory_insn(ureg, inst->op, dst, num_dst, src, num_src,
|
||||
inst->buffer_access);
|
||||
inst->buffer_access,
|
||||
tex_target, inst->image_format);
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_STORE:
|
||||
if (inst->buffer.file == PROGRAM_MEMORY)
|
||||
if (inst->buffer.file == PROGRAM_MEMORY) {
|
||||
dst[0] = ureg_dst(t->shared_memory);
|
||||
else if (inst->buffer.file == PROGRAM_BUFFER)
|
||||
} else if (inst->buffer.file == PROGRAM_BUFFER) {
|
||||
dst[0] = ureg_dst(t->buffers[inst->buffer.index]);
|
||||
else
|
||||
} else {
|
||||
dst[0] = ureg_dst(t->images[inst->buffer.index]);
|
||||
tex_target = st_translate_texture_target(inst->tex_target, inst->tex_shadow);
|
||||
}
|
||||
dst[0] = ureg_writemask(dst[0], inst->dst[0].writemask);
|
||||
if (inst->buffer.reladdr)
|
||||
dst[0] = ureg_dst_indirect(dst[0], ureg_src(t->address[2]));
|
||||
assert(dst[0].File != TGSI_FILE_NULL);
|
||||
ureg_memory_insn(ureg, inst->op, dst, num_dst, src, num_src,
|
||||
inst->buffer_access);
|
||||
inst->buffer_access,
|
||||
tex_target, inst->image_format);
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_SCS:
|
||||
|
|
Loading…
Reference in New Issue