freedreno: Fix OUT_REG() on address regs without a .bo supplied.
Sometimes you want to zero out an address by supplying a NULL BO, but without this we would end up only emitting one dword. Increases size of fd6_gmem.o by .8%, though it's not clear to me why (no obvious terrible codegen happening) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3455>
This commit is contained in:
@@ -179,6 +179,7 @@ class Bitset(object):
|
|||||||
print(" fields.unknown | fields.dword,")
|
print(" fields.unknown | fields.dword,")
|
||||||
|
|
||||||
if address:
|
if address:
|
||||||
|
print(" .is_address = true,")
|
||||||
print(" .bo = fields.bo,")
|
print(" .bo = fields.bo,")
|
||||||
if f.type == "waddress":
|
if f.type == "waddress":
|
||||||
print(" .bo_write = true,")
|
print(" .bo_write = true,")
|
||||||
|
@@ -30,6 +30,7 @@ struct fd_reg_pair {
|
|||||||
uint32_t reg;
|
uint32_t reg;
|
||||||
uint64_t value;
|
uint64_t value;
|
||||||
struct fd_bo *bo;
|
struct fd_bo *bo;
|
||||||
|
bool is_address;
|
||||||
bool bo_write;
|
bool bo_write;
|
||||||
uint32_t bo_offset;
|
uint32_t bo_offset;
|
||||||
uint32_t bo_shift;
|
uint32_t bo_shift;
|
||||||
@@ -68,6 +69,8 @@ struct fd_reg_pair {
|
|||||||
fd_ringbuffer_reloc(ring, &reloc); \
|
fd_ringbuffer_reloc(ring, &reloc); \
|
||||||
} else { \
|
} else { \
|
||||||
*p++ = regs[i].value; \
|
*p++ = regs[i].value; \
|
||||||
|
if (regs[i].is_address) \
|
||||||
|
*p++ = regs[i].value >> 32; \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
Reference in New Issue
Block a user