mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 06:58:05 +02:00
pan/midgard: Identify and disassemble indirect texture/sampler
A pair of special flags can turn the texture/sampler handle fields into register selects. This means code like: texture(uTextures[hr28.w], ...) can be compiled to something like: texture ..., fsampler[hr28.w], texture[hr28.w] Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
8c1bc3c000
commit
7f14916372
2 changed files with 28 additions and 6 deletions
|
|
@ -1208,8 +1208,6 @@ print_texture_word(uint32_t *word, unsigned tabs)
|
|||
/* Specific format in question */
|
||||
print_texture_format(texture->format);
|
||||
|
||||
assert(texture->zero == 0);
|
||||
|
||||
/* Instruction "modifiers" parallel the ALU instructions. */
|
||||
|
||||
if (texture->shadow)
|
||||
|
|
@ -1230,11 +1228,25 @@ print_texture_word(uint32_t *word, unsigned tabs)
|
|||
print_mask_4(texture->mask);
|
||||
printf(", ");
|
||||
|
||||
printf("texture%d, ", texture->texture_handle);
|
||||
if (texture->texture_register) {
|
||||
printf("texture[");
|
||||
print_texture_reg_select(texture->texture_handle);
|
||||
printf("], ");
|
||||
} else {
|
||||
printf("texture%d, ", texture->texture_handle);
|
||||
}
|
||||
|
||||
/* Print the type, GL style */
|
||||
printf("%c", sampler_type_name(texture->sampler_type));
|
||||
printf("sampler%d", texture->sampler_handle);
|
||||
printf("%csampler", sampler_type_name(texture->sampler_type));
|
||||
|
||||
if (texture->sampler_register) {
|
||||
printf("[");
|
||||
print_texture_reg_select(texture->sampler_handle);
|
||||
printf("]");
|
||||
} else {
|
||||
printf("%d", texture->sampler_handle);
|
||||
}
|
||||
|
||||
print_swizzle_vec4(texture->swizzle, false, false);
|
||||
printf(", ");
|
||||
|
||||
|
|
|
|||
|
|
@ -628,7 +628,13 @@ __attribute__((__packed__))
|
|||
unsigned last : 1;
|
||||
|
||||
enum mali_texture_type format : 2;
|
||||
unsigned zero : 2;
|
||||
|
||||
/* Are sampler_handle/texture_handler respectively set by registers? If
|
||||
* true, the lower 8-bits of the respective field is a register word.
|
||||
* If false, they are an immediate */
|
||||
|
||||
unsigned sampler_register : 1;
|
||||
unsigned texture_register : 1;
|
||||
|
||||
/* Is a register used to specify the
|
||||
* LOD/bias/offset? If set, use the `bias` field as
|
||||
|
|
@ -693,6 +699,10 @@ __attribute__((__packed__))
|
|||
unsigned bias : 8;
|
||||
signed bias_int : 8;
|
||||
|
||||
/* If sampler/texture_register is set, the bottom 8-bits are
|
||||
* midgard_tex_register_select and the top 8-bits are zero. If they are
|
||||
* clear, they are immediate texture indices */
|
||||
|
||||
unsigned sampler_handle : 16;
|
||||
unsigned texture_handle : 16;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue