ae28d55f81
Source: RGB-D -> Dyn-HaMR -> L20 retargeting -> FoundationPose -> reference repair -> SPIDER, documented in docs/PIPELINE_LATEST.md and docs/SETUP_AND_WEIGHTS.md. Adds FoundationPose and nvdiffrast upstream snapshots, requirements/pipeline_venv.txt and the FoundationPose weight manifest/downloader. Assets (Git LFS): weights/ (WiLoR detector, HandFlow denoiser, UniDepth-L), FoundationPose checkpoints, HaMeR checkpoint, Dyn-HaMR HMP model and BMC constraints, L20 URDF/meshes, the 20260915_171525 D405 recording and the two box CADs. MANO models are not redistributed (third_party/hamer/_DATA/data/mano/README.txt). Environments, caches and run outputs excluded. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
154 lines
5.6 KiB
C++
154 lines
5.6 KiB
C++
// Copyright (c) 2009-2022, NVIDIA CORPORATION. All rights reserved.
|
|
//
|
|
// NVIDIA CORPORATION and its licensors retain all intellectual property
|
|
// and proprietary rights in and to this software, related documentation
|
|
// and any modifications thereto. Any use, reproduction, disclosure or
|
|
// distribution of this software and related documentation without an express
|
|
// license agreement from NVIDIA CORPORATION is strictly prohibited.
|
|
|
|
#pragma once
|
|
#include "Defs.hpp"
|
|
#include "Constants.hpp"
|
|
|
|
namespace CR
|
|
{
|
|
//------------------------------------------------------------------------
|
|
// Projected triangle.
|
|
//------------------------------------------------------------------------
|
|
|
|
struct CRTriangleHeader
|
|
{
|
|
S16 v0x; // Subpixels relative to viewport center. Valid if triSubtris = 1.
|
|
S16 v0y;
|
|
S16 v1x;
|
|
S16 v1y;
|
|
S16 v2x;
|
|
S16 v2y;
|
|
|
|
U32 misc; // triSubtris=1: (zmin:20, f01:4, f12:4, f20:4), triSubtris>=2: (subtriBase)
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
struct CRTriangleData
|
|
{
|
|
U32 zx; // zx * sampleX + zy * sampleY + zb = lerp(CR_DEPTH_MIN, CR_DEPTH_MAX, (clipZ / clipW + 1) / 2)
|
|
U32 zy;
|
|
U32 zb;
|
|
U32 id; // Triangle id.
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
// Device-side structures.
|
|
//------------------------------------------------------------------------
|
|
|
|
struct CRAtomics
|
|
{
|
|
// Setup.
|
|
S32 numSubtris; // = numTris
|
|
|
|
// Bin.
|
|
S32 binCounter; // = 0
|
|
S32 numBinSegs; // = 0
|
|
|
|
// Coarse.
|
|
S32 coarseCounter; // = 0
|
|
S32 numTileSegs; // = 0
|
|
S32 numActiveTiles; // = 0
|
|
|
|
// Fine.
|
|
S32 fineCounter; // = 0
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
struct CRImageParams
|
|
{
|
|
S32 triOffset; // First triangle index to draw.
|
|
S32 triCount; // Number of triangles to draw.
|
|
S32 binBatchSize; // Number of triangles per batch.
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
struct CRParams
|
|
{
|
|
// Common.
|
|
|
|
CRAtomics* atomics; // Work counters. Per-image.
|
|
S32 numImages; // Batch size.
|
|
S32 totalCount; // In range mode, total number of triangles to render.
|
|
S32 instanceMode; // 0 = range mode, 1 = instance mode.
|
|
|
|
S32 numVertices; // Number of vertices in input buffer, not counting multiples in instance mode.
|
|
S32 numTriangles; // Number of triangles in input buffer.
|
|
void* vertexBuffer; // numVertices * float4(x, y, z, w)
|
|
void* indexBuffer; // numTriangles * int3(vi0, vi1, vi2)
|
|
|
|
S32 widthPixels; // Render buffer size in pixels. Must be multiple of tile size (8x8).
|
|
S32 heightPixels;
|
|
S32 widthPixelsVp; // Viewport size in pixels.
|
|
S32 heightPixelsVp;
|
|
S32 widthBins; // widthPixels / CR_BIN_SIZE
|
|
S32 heightBins; // heightPixels / CR_BIN_SIZE
|
|
S32 numBins; // widthBins * heightBins
|
|
|
|
F32 xs; // Vertex position adjustments for tiled rendering.
|
|
F32 ys;
|
|
F32 xo;
|
|
F32 yo;
|
|
|
|
S32 widthTiles; // widthPixels / CR_TILE_SIZE
|
|
S32 heightTiles; // heightPixels / CR_TILE_SIZE
|
|
S32 numTiles; // widthTiles * heightTiles
|
|
|
|
U32 renderModeFlags;
|
|
S32 deferredClear; // 1 = Clear framebuffer before rendering triangles.
|
|
U32 clearColor;
|
|
U32 clearDepth;
|
|
|
|
// These are uniform across batch.
|
|
|
|
S32 maxSubtris;
|
|
S32 maxBinSegs;
|
|
S32 maxTileSegs;
|
|
|
|
// Setup output / bin input.
|
|
|
|
void* triSubtris; // maxSubtris * U8
|
|
void* triHeader; // maxSubtris * CRTriangleHeader
|
|
void* triData; // maxSubtris * CRTriangleData
|
|
|
|
// Bin output / coarse input.
|
|
|
|
void* binSegData; // maxBinSegs * CR_BIN_SEG_SIZE * S32
|
|
void* binSegNext; // maxBinSegs * S32
|
|
void* binSegCount; // maxBinSegs * S32
|
|
void* binFirstSeg; // CR_MAXBINS_SQR * CR_BIN_STREAMS_SIZE * (S32 segIdx), -1 = none
|
|
void* binTotal; // CR_MAXBINS_SQR * CR_BIN_STREAMS_SIZE * (S32 numTris)
|
|
|
|
// Coarse output / fine input.
|
|
|
|
void* tileSegData; // maxTileSegs * CR_TILE_SEG_SIZE * S32
|
|
void* tileSegNext; // maxTileSegs * S32
|
|
void* tileSegCount; // maxTileSegs * S32
|
|
void* activeTiles; // CR_MAXTILES_SQR * (S32 tileIdx)
|
|
void* tileFirstSeg; // CR_MAXTILES_SQR * (S32 segIdx), -1 = none
|
|
|
|
// Surface buffers. Outer tile offset is baked into pointers.
|
|
|
|
void* colorBuffer; // sizePixels.x * sizePixels.y * numImages * U32
|
|
void* depthBuffer; // sizePixels.x * sizePixels.y * numImages * U32
|
|
void* peelBuffer; // sizePixels.x * sizePixels.y * numImages * U32, only if peeling enabled.
|
|
S32 strideX; // horizontal size in pixels
|
|
S32 strideY; // vertical stride in pixels
|
|
|
|
// Per-image parameters for first images are embedded here to avoid extra memcpy for small batches.
|
|
|
|
CRImageParams imageParamsFirst[CR_EMBED_IMAGE_PARAMS];
|
|
const CRImageParams* imageParamsExtra; // After CR_EMBED_IMAGE_PARAMS.
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
}
|