projects
/
chai.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d508a93
)
It's not vertex data... it's an attribute
author
Cafe
<cafe@not.applicable>
Mon, 31 Jul 2017 00:00:00 +0000
(
00:00
+0000)
committer
Cafe
<cafe@not.applicable>
Mon, 31 Jul 2017 18:13:54 +0000
(18:13 +0000)
src/chai-notes.h
patch
|
blob
|
history
src/ktrace.c
patch
|
blob
|
history
diff --git
a/src/chai-notes.h
b/src/chai-notes.h
index 96b5a34fdc06b6c998eab3f6e84edcfa063f1d7f..92e4f49e017ad03a16ef909639da5669bfb0a4d1 100644
(file)
--- a/
src/chai-notes.h
+++ b/
src/chai-notes.h
@@
-77,6
+77,8
@@
struct payload_vertex_tiler32 {
uint32_t block2[36];
};
uint32_t block2[36];
};
+/* FIXME: This is very clearly wrong */
+
#define SHADER (1 << 0)
#define SHADER_VERTEX (1 << 2)
#define SHADER_FRAGMENT (1 << 3)
#define SHADER (1 << 0)
#define SHADER_VERTEX (1 << 2)
#define SHADER_FRAGMENT (1 << 3)
@@
-87,10
+89,10
@@
struct shader_meta {
uint64_t unknown2;
};
uint64_t unknown2;
};
-struct
vertex
_buffer {
- uint64_t
vertice
s;
- size_t
vertex
_size;
- size_t size;
+struct
attribute
_buffer {
+ uint64_t
element
s;
+ size_t
element
_size;
+ size_t
total_
size;
};
/* Synthesis of fragment_job from mali_kbase_reply.c with #defines from
};
/* Synthesis of fragment_job from mali_kbase_reply.c with #defines from
diff --git
a/src/ktrace.c
b/src/ktrace.c
index 51b2472e7fdbd6e808ad069eee65ebf5459332bd..4043e75190ed77dc2114ec7c656bad54f8e058fb 100644
(file)
--- a/
src/ktrace.c
+++ b/
src/ktrace.c
@@
-420,46
+420,54
@@
static void kbase_trace_fbd(struct kbase_context *kctx, uint32_t fbd)
kfree(mfbd);
}
kfree(mfbd);
}
-static void kbase_trace_ve
rtices(struct kbase_context *kctx, uint64_t address
)
+static void kbase_trace_ve
cN_as_uint32_hex(uint32_t *p, size_t count
)
{
{
- uint64_t raw, flags;
+ if(count == 1)
+ printk("\t<%X>,", p[0]);
+ else if(count == 2)
+ printk("\t<%X, %X>,", p[0], p[1]);
+ else if(count == 3)
+ printk("\t<%X, %X, %X>,", p[0], p[1], p[2]);
+ else if(count == 4)
+ printk("\t<%X, %X, %X, %X>,", p[0], p[1], p[2], p[3]);
+ else
+ printk("Cannot print vec%d", count);
+}
+
+static void kbase_trace_attribute(struct kbase_context *kctx, uint64_t address)
+{
+ uint64_t raw;
+ uint64_t flags;
int vertex_count;
int vertex_count;
+ int component_count;
uint32_t *v;
uint32_t *v;
+ uint32_t *p;
int i;
int i;
- struct
vertex
_buffer *vb =
- (struct
vertex
_buffer *) kbase_fetch_gpu(
+ struct
attribute
_buffer *vb =
+ (struct
attribute
_buffer *) kbase_fetch_gpu(
kctx, address,
kctx, address,
- NULL, sizeof(struct
vertex
_buffer));
+ NULL, sizeof(struct
attribute
_buffer));
if (!vb) return;
if (!vb) return;
-
raw = vb->vertices & ~3
;
-
flags = vb->vertices ^ raw
;
+
vertex_count = vb->total_size / vb->element_size
;
+
component_count = vb->element_size / sizeof(float)
;
- v = kbase_fetch_gpu(kctx, raw, NULL, vb->size);
+ raw = vb->elements & ~3;
+ flags = vb->elements ^ raw;
- if (vb->vertex_size != 3 * sizeof(float)) {
- printk("Bad vertex size %x", vb->vertex_size);
- return;
- }
+ p = v = kbase_fetch_gpu(kctx, raw, NULL, vb->total_size);
-
vertex_count = vb->size / vb->vertex_size
;
+
printk("attribute vec%d mem%LXflag%LX = {", component_count, raw, flags)
;
- kfree(vb);
+ for (i = 0; i < vertex_count; i++, p += component_count)
+ kbase_trace_vecN_as_uint32_hex(p, component_count);
- printk("
Vertices at %LX (flag %LX):", raw, flags
);
+ printk("
}"
);
- for (i = 0; i < vertex_count * 3; i += 3) {
- printk("<%X, %X, %X>", v[i], v[i + 1], v[i + 2]);
+ kbase_push_gpu(kctx, v, raw, vb->total_size);
- /* Interfere for fun */
- if(i == 3) {
- printk("Interfering for fun");
- v[i + 0] = v[i + 1] = 0x3F800000;
- }
- }
-
- kbase_push_gpu(kctx, v, raw, vb->size);
+ kfree(vb);
}
static void kbase_trace_hw_chain(struct kbase_context *kctx, uint64_t chain)
}
static void kbase_trace_hw_chain(struct kbase_context *kctx, uint64_t chain)
@@
-529,7
+537,7
@@
static void kbase_trace_hw_chain(struct kbase_context *kctx, uint64_t chain)
kfree(shader);
kfree(i_shader);
kfree(shader);
kfree(i_shader);
- kbase_trace_
vertices
(kctx, v->vertices);
+ kbase_trace_
attribute
(kctx, v->vertices);
if (h->job_type == JOB_TYPE_TILER)
printk("Drawing in %s", kbase_gl_mode_name(((uint8_t *) v->block1)[8]));
if (h->job_type == JOB_TYPE_TILER)
printk("Drawing in %s", kbase_gl_mode_name(((uint8_t *) v->block1)[8]));
@@
-552,7
+560,7
@@
static void kbase_trace_hw_chain(struct kbase_context *kctx, uint64_t chain)
/* Structure known. Skip hex dump */
if (addr == 2) continue;
if (addr == 3) continue;
/* Structure known. Skip hex dump */
if (addr == 2) continue;
if (addr == 3) continue;
-
//
if (addr == 6) continue;
+ if (addr == 6) continue;
if (addr == 10 && h->job_type == JOB_TYPE_VERTEX) continue;
if (addr == 11) continue;
if (addr == 12) continue;
if (addr == 10 && h->job_type == JOB_TYPE_VERTEX) continue;
if (addr == 11) continue;
if (addr == 12) continue;
@@
-565,8
+573,6
@@
static void kbase_trace_hw_chain(struct kbase_context *kctx, uint64_t chain)
if (addr == 7) sz = 0x10;
if (addr == 8) sz = 0x20;
if (addr == 7) sz = 0x10;
if (addr == 8) sz = 0x20;
- if (addr == 6) sz = 0x80;
-
printk("Addr %d %X", addr, address);
if (!address) continue;
printk("Addr %d %X", addr, address);
if (!address) continue;