nvc0: identify VERTEX_QUARANTINE
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Fri, 11 Mar 2011 10:03:33 +0000 (11:03 +0100)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Sun, 13 Mar 2011 12:23:55 +0000 (13:23 +0100)
Well, not sure what exactly it is, but it certainly doesn't contain
the control flow stack, but vertex data.

Not sure about size, I've only seen the first few KiB written, but
the binary driver seems to allocate more.

src/gallium/drivers/nvc0/nvc0_3d.xml.h
src/gallium/drivers/nvc0/nvc0_screen.c
src/gallium/drivers/nvc0/nvc0_screen.h

index 5857f7cee9ef537143f95b20fef4163d21ea4343..94fa081ad7eb70533afebe2b79719d92c08573c0 100644 (file)
@@ -927,6 +927,15 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #define NVC0_3D_ZETA_BASE_LAYER                                        0x0000179c
 
+#define NVC0_3D_VERTEX_QUARANTINE_ADDRESS_HIGH                 0x000017bc
+
+#define NVC0_3D_VERTEX_QUARANTINE_ADDRESS_LOW                  0x000017c0
+
+#define NVC0_3D_VERTEX_QUARANTINE_SIZE                         0x000017c4
+#define NVC0_3D_VERTEX_QUARANTINE_SIZE_16K                     0x00000001
+#define NVC0_3D_VERTEX_QUARANTINE_SIZE_32K                     0x00000002
+#define NVC0_3D_VERTEX_QUARANTINE_SIZE_64K                     0x00000003
+
 #define NVC0_3D_STRMOUT_UNK1780(i0)                           (0x00001780 + 0x4*(i0))
 #define NVC0_3D_STRMOUT_UNK1780__ESIZE                         0x00000004
 #define NVC0_3D_STRMOUT_UNK1780__LEN                           0x00000004
index 675bbe0fe31d98e4829835c57e706dc462015771..1047ba3c3377822dbdc9bd26c9478089d8b096f1 100644 (file)
@@ -207,7 +207,7 @@ nvc0_screen_destroy(struct pipe_screen *pscreen)
    nouveau_bo_ref(NULL, &screen->tls);
    nouveau_bo_ref(NULL, &screen->txc);
    nouveau_bo_ref(NULL, &screen->fence.bo);
-   nouveau_bo_ref(NULL, &screen->mp_stack_bo);
+   nouveau_bo_ref(NULL, &screen->vfetch_cache);
 
    nouveau_resource_destroy(&screen->text_heap);
 
@@ -496,14 +496,14 @@ nvc0_screen_create(struct pipe_winsys *ws, struct nouveau_device *dev)
    OUT_RING  (chan, 0);
 
    ret = nouveau_bo_new(dev, NOUVEAU_BO_VRAM, 1 << 17, 1 << 20,
-                        &screen->mp_stack_bo);
+                        &screen->vfetch_cache);
    if (ret)
       goto fail;
 
-   BEGIN_RING(chan, RING_3D_(0x17bc), 3);
-   OUT_RELOCh(chan, screen->mp_stack_bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR);
-   OUT_RELOCl(chan, screen->mp_stack_bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR);
-   OUT_RING  (chan, 1);
+   BEGIN_RING(chan, RING_3D(VERTEX_QUARANTINE_ADDRESS_HIGH), 3);
+   OUT_RELOCh(chan, screen->vfetch_cache, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR);
+   OUT_RELOCl(chan, screen->vfetch_cache, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR);
+   OUT_RING  (chan, 3);
 
    ret = nouveau_bo_new(dev, NOUVEAU_BO_VRAM, 1 << 17, 1 << 17, &screen->txc);
    if (ret)
@@ -635,7 +635,7 @@ nvc0_screen_make_buffers_resident(struct nvc0_screen *screen)
    nouveau_bo_validate(chan, screen->text, flags);
    nouveau_bo_validate(chan, screen->uniforms, flags);
    nouveau_bo_validate(chan, screen->txc, flags);
-   nouveau_bo_validate(chan, screen->mp_stack_bo, flags);
+   nouveau_bo_validate(chan, screen->vfetch_cache, flags);
 
    if (screen->cur_ctx && screen->cur_ctx->state.tls_required)
       nouveau_bo_validate(chan, screen->tls, flags);
index 81f404ada830b4302e19dac52c25053f20c41b7c..94bf0cf348151df0237d1b2b90f3c7c63fe45d62 100644 (file)
@@ -26,7 +26,7 @@ struct nvc0_screen {
    struct nouveau_bo *uniforms;
    struct nouveau_bo *tls;
    struct nouveau_bo *txc; /* TIC (offset 0) and TSC (65536) */
-   struct nouveau_bo *mp_stack_bo;
+   struct nouveau_bo *vfetch_cache;
 
    uint64_t tls_size;