Commit Graph

355 Commits

Author SHA1 Message Date
Takahito Tejima
8da827336d Removes FarKernelBatch.
This is the first step to tease off Osd compute controller/contexts
from Far API.
Currently FarStencilTable only creates a kernelbatch for the entire range,
so we can use [0, numStencils) for all cases instead of KernelBatch.
This might not be true if we apply non-factorized level-wise stencils,
then we'll add another modular utility to serve those cases.
2015-04-10 11:08:24 -07:00
Takahito Tejima
24f9dc154b Enable GregoryBasis patch.
PatchTablesFactory fills 20 indices topology into patchtable, and use it for eval and draw.

note: currently screen-space adaptive tessellation of gregory basis patches is
broken and cracks appear around them.
2015-04-08 17:07:10 -07:00
barfowl
9222c9e169 Removed use of "full topology" flag with Far::AdaptiveOptions:
- it was always ignored as full topology is required for PatchTables
    - it will soon be removed from AdaptiveOptions entirely
2015-04-01 14:57:28 -07:00
manuelk
d0a624f373 Add "smooth UVs" to Far
- extend Far::PatchTables data structures & interfaces to store requisite
  information for channels of face-varying bi-cubic patches
- implement gather function in Far::PatchTablesFactory to populate face-varying
  channels with adaptive patches
- extend accessor interface in Vtr::Level
- propagate code fall-out throughout OpenSubdiv code base, examples & tutorials
- extend vtrViewer code to visualize tessellated bi-cubic face-varying patches
2015-02-26 13:57:47 -08:00
manuelk
866b88b7c9 Add support for single-crease patches to D3D draw context & controller
- also updated the dxViewer code example

note: dxPtexViewer still needs to be updated
2015-02-08 17:31:55 -08:00
manuelk
c646ac2e3c Refactor & cleanup patch interpolation
- move patch interpolation code out of Far::PatchTables into far/interpolate
- add bilinear quad interpolation function with derivatives
- switch OsdCpuEvalLimitController to far/interpolate
- add support for bilinear quad interpolation & clean varying interpolation
2015-01-27 15:38:30 -08:00
Manuel Kraemer
558733298b Merge pull request #375 from hsdk/gregory_optimizations
Minor gregory patch shader optimizations
2015-01-13 16:03:49 -08:00
Manuel Kraemer
2071123148 Merge pull request #378 from hsdk/FixComputeBoundaryBug
Fix boundary bug of DX/CL kernels.
2015-01-13 09:55:19 -08:00
Henry Schaefer
eb8abc0da6 Optimize GL/DX compute dispatches. 2015-01-13 10:59:06 +01:00
Henry Schaefer
19aad3cd54 Fixing boundary bug of DX/CL kernels. 2015-01-13 10:40:51 +01:00
Takahito Tejima
d1863eea12 fix batching bug of GLSL/GLSLXFB compute controllers. 2015-01-12 17:03:21 -08:00
Takahito Tejima
0178b09a38 fix boundary bug of GLSL/GLSLXFB kernels. 2015-01-12 17:02:54 -08:00
Henry Schaefer
18440e2f08 Fix GLTransformFeedback crash in computeStencil
- changed loop counter names in addWithWeight and readVertex that have overwritten the outer loop counter due to unrolling
2015-01-11 02:55:06 +01:00
Henry Schaefer
1b05cd8ee2 gregory patch shader optimization
- reduces instruction count by ~1/5
 - improves readability
2015-01-10 21:28:54 +01:00
manuelk
974462e3db Fix 'single-crease' crash bug in OsdGLDrawContext
- unset sharpness indices are -1, which should not be used to look up into the sharpness values vector...
2015-01-09 19:50:12 -08:00
Henry Schaefer
7c73cf0128 dxPtexViewer fixes:
- changed ptex layout data types in shaders to match srv format
 - changed ptex srv type to unorm format for uchar data
 - fixed hlsl compiler warning: initialized edgeDistance of OutputVertex struct in domain shader even if we are not in wireframe mode
 - added directx debug device and enabled automatic break points to easily spot dx errors
2015-01-09 02:03:42 +01:00
manuelk
bfbd868fe2 Modify Far::TopologyRefiner refinement options
- move level of refinement / isolation into the Options structs
- fix splash damage in rest of the code

note 1: this is less than ideal, because most compilers accept the previous
        call to these functions with an incorrect parameter list (ie. passing
        the level instead of the struct issues no warnings and compiles...)
        caveat emptor...

note 2: the level parameter names may not be final for adaptive modes
        as we will likely want independent controls over crease vs.
        extraordinary vertex isolation.
2014-12-30 14:07:24 -08:00
manuelk
7954fbab37 Fix tangents in Osd::EvalLimitController
- don't rotate (s,t) coordinates but rotate the patch instead !

- refactor osd/cpuEvalLimitKernels to share Far::PatchTables cubic spline
  interpolation functions : this replaces tensor product formulation with
  weight matrices, which does not really impact performance here, but would
  have to be replaced when implementing regular gridding functions.

- fix OsdCpuEvalLimitController to not rotate coordinates and pass the rotation bitfields

- expose Far::PatchTables spline interpolation API (protected -> public)

- fix glEvalLimit tangent buffers (remove empty padding - see below)

- change policy for tangent buffers : the output buffer descriptor is
  **NO LONGER APPLIED** to tangent output buffers. Tangent primvar data
  buffers are no longer applying the offset and stride from the descriptor
  (because it doesn't make sense to share it). If more flexiblity is
  required, we will consider adding independent descriptors for the tangent
  buffers. This change will impact existing code that generates tangents
  with the EvalLimit controller.

fixes #370
2014-12-25 13:22:27 -08:00
manuelk
5944ada0f9 Add Options structs to Far::TopologyRefiner refinement methods
- fix all splash damage to tutorials / examples...
2014-12-23 10:07:24 -08:00
manuelk
48cf4b6528 Refactor Vtr::Array for better "const" safety
Const' declared instances of Vtr::Array do not protect the pointer held
privately by the class properly. In order to force the compiler to
protect this pointer, we removed all non-const accessors from Vtr::Array
(now renamed Vtr::ConstArray) and moved them to a child class (Vtr::Array),
which requires const_cast<> operators internally to allow access.

The change & renaming is then propagated to all internal dependencies.
2014-12-15 10:23:13 -08:00
manuelk
0ff7b15711 Fix Win build
- make sure we don't get conflicting enums (CODE_ERROR)
- fix template specialization for Far::TopologyRefinerFactory in regression/common/vtr_utils
- fix remaining error reporting code around osd
2014-12-03 20:04:35 -08:00
manuelk
cc6c0925a3 Refactor error reporting system
- change error codes from situational to general (fatal / coding / run-time...)
- pull error functions from Osd into Far
- add a templated topology validation reporting system to Far::TopologyRefinerFactory
- fix fallout on rest of code-base
2014-12-03 17:19:07 -08:00
manuelk
538c13f394 Fix Windows build 2014-11-25 14:14:59 -08:00
manuelk
b27b55e4a8 Refactor Far::PatchTables
- split Far::PatchDescriptor into its own class (mirrors Far::PatchParam)
- hide PatchArray as a private internal structure
- add public accessors patterned after Far::TopologyRefiner (returning Vtr::Arrays)
- propagate new API to all dependent code

note: some direct table accessors have not been removed *yet* - see code for details
2014-11-25 12:41:19 -08:00
manuelk
9158a430ac Fix Far::PatchTables control vertex indexing to use 4 CVs to represent the 0-ring
- we were allocating 20 CVs for the Gregory basis, but only need 4
 (the 20 CVs are stored in the stencil table)
2014-11-12 13:20:55 -08:00
manuelk
e8210886a8 Extend stencil-driven Gregory basis code support to Osd::EvalLimit (cpu) 2014-11-11 17:35:52 -08:00
manuelk
82a53c4278 Fix bug in cpuEvalLimitKernel.cpp
apparently an offset to a basis vertex was incorrectly set
2014-10-31 17:06:34 -07:00
David G Yu
1e00056d8a Improved stability on OSX drivers by not declaring unused shader in/out vars. 2014-10-23 15:59:05 -07:00
David G. Yu
b11d5e22f0 Fixed d3d11 and gl mesh wrappers to be
consistent wrt the MeshInterface API.
2014-10-23 13:45:57 -07:00
David G. Yu
6cc24d32fd Fixed missing namespace closing brace. 2014-10-23 13:43:45 -07:00
David G. Yu
fce3dcca00 Fixed vec array initializer. 2014-10-23 13:41:27 -07:00
manuelk
f4c2f8d9e1 Fix Windows build of Osd OMP CPU kernel
note: we #include <vector> instead malloc.h for portability
2014-10-23 12:07:12 -07:00
manuelk
f145f70fd2 Refactor Far::StencilTablesFactory
- re-implement the pool allocator
    - use templates to remove code redundancy between regular & limit stencils
    - leverage [] operator overloading to simplify stencil factorization
    - add the ability to treat subdivision levels independently (see below)

- refactor Far::TopologyRefiner::Interpolate<>() methods to pass buffers by reference
  (allows overloading of [] operator)

- rename some of the stencil factory options
- propagate changes to Osd / examples / tutorials...
2014-10-21 16:36:26 -07:00
manuelk
a16d558a3e Fix GLSL compute code version defintion
- remove #version declaration from the kernel code
- move it in front of shader sources before compiling to prevent some drivers from throwing errors

fixes #360
2014-10-20 18:09:30 -07:00
Takahito Tejima
c0907c7bc1 Introduces 'single-crease patch' : implements "Efficient Evaluation of Semi-Smooth Creases in
Catmull-Clark Subdivision Surfaces", Niessner et al, Eurographics 2012.

This change includes;
-topology identification for single-crease patch during adaptive refinement.
-patch array population (similar to boundary)
-sharpness buffer generation
-glsl shader

Eval stuffs will be coming.
2014-10-13 08:52:09 -07:00
manuelk
cea1dd1880 Change FarStencilTables indices from 'unsigned int' to Far::Index type 2014-10-09 16:36:23 -07:00
manuelk
a79832b3a1 Far::PatchTables re-factor & clean-up
- remove Descriptor iterators
- switch 'unsigned int' indices to typed Far::Index

We aren't done yet... but its a step in the right direction
2014-10-09 14:48:50 -07:00
manuelk
639788abbe Fix vec array initialization in GLSL & HLSL (should fix some DX compiler problems)
Fixes #354
2014-10-04 16:22:43 -07:00
manuelk
d3fa91deaa Fix incorrect assert in Osd::DrawContext 2014-10-03 10:35:00 -07:00
manuelk
82e7a1bcc5 Minor EvalLimit naming refactor
- also added some additional animation to the glEvalLimit code example
2014-09-22 16:01:43 -07:00
manuelk
ad402d3623 Fix inconsistent file access permissions 2014-09-17 13:45:50 -07:00
Nathan Litke
78ae830794 Fixed Osd::Mesh constructors that initialize member variables from user variables. 2014-09-17 13:41:45 -07:00
Manuel Kraemer
8fc5371ec9 Merge pull request #350 from nathan-at-digitalfish/build_android
Fix build for Android
2014-09-12 17:27:57 -07:00
manuelk
c66ee724a8 WIP limit stencils factory
todo:
- fix rotated tangents on patches
- add "end-caps" (bilinear or Gregory ?)
- add pure bilinear stencil mode
2014-09-12 16:59:16 -07:00
manuelk
e538261f7d Fix Cuda compile warning in osd/cudaKernel.cu 2014-09-12 10:43:18 -07:00
Julien Demouth
29b2d033e3 Introduces a kernel for NUM_ELEMENTS=4. It's faster and not buggy,
anymore.
2014-09-12 10:22:30 -07:00
Julien Demouth
cf0fe60ab4 Add a first pass of optimization in CUDA kernels
Conflicts:
	opensubdiv/osd/cudaKernel.cu
2014-09-12 10:21:46 -07:00
Nathan Litke
d7311801c1 Fix compiler errors for OpenGL-ES. 2014-09-11 16:30:50 -07:00
Takahito Tejima
b3f6f52bb9 Fixes the bug of glShareTopology. This example mutates patchDescriptor in drawcontext, so it needs a write access.
Adding another GetPatchArray() returning non-const reference. We should think about better API for this.
2014-09-10 15:24:16 -07:00
manuelk
c399655dcc Landing 3.0.0.alpha
Sync'ing the 'dev' branch with the 'feature_3.0dev' branch at commit 68c6d11fc36761ae1a5e6cdc3457be16f2e9704a

The branch 'feature_3.0dev' is now locked and preserved for historical purposes.
2014-09-05 15:07:46 -07:00