Commit Graph

523 Commits

Author SHA1 Message Date
barry
479a297bc6 Correction to recent changes to boundary weights of box-spline triangles:
- fixed corner vertex cases (two boundary edges) in both Far and Osd
2019-02-06 18:30:26 -08:00
David G Yu
abb8af32c5 Minor changes to BoxSplineTri boundary computation
The computation to adjust patch evaluation weights
for box spline triangle patches to account for boundaries
has been updated to use simple conditional logic instead
of index indirection tables. This results in better register
resource usage for some shader compiler implementations.
Previously, these methods could fail to compile on some
systems.
2019-02-05 12:57:41 -08:00
David G Yu
e4375aea9e
Merge pull request #1048 from barfowl/glsl_adaptive_tess_levels
Minor refactoring of GLSL functions to compute adaptive tess levels
2019-01-31 00:54:06 -08:00
Barry Fowler
cbbfc5b64b
Merge pull request #1049 from davidgyu/glsl_gregory_tri_varying_fix 2019-01-30 20:10:11 -08:00
barry
e8fdec9f88 Made use of newer GLSL adaptive tess functions in patch shaders:
- replaced use of "LimitPoints" functions in all patch shaders
    - removed the unreleased "LimitPointsTriangle" functions
    - added internal tess functions for processing patch boundaries
    - updated Bezier quad and tri tess evaluation to use boundary functions
2019-01-30 10:25:04 -08:00
barry
e8859cac85 Added GLSL adaptive tess functions to reflect associated patch types:
- renamed core "LimitPoints" functions to reflect the patch type (Bezier)
    - overloaded new functions with the additionally computed tess level
    - preserved stubs of all "LimitPoints" functions for compatibility
2019-01-30 10:12:15 -08:00
barry
73f4ab5db7 Added normal derivatives to GLSL Bezier triangle evaluation:
- added alternate intermediate calculations for normal derivatives
    - use normal derivates to resolve a degenerate normal
2019-01-28 10:20:31 -08:00
David G Yu
0545056271 Fixed varying interp for gregory triangle patches
The point indices used to interpolate varying data should
be the points at the outer corners of the patch.
2019-01-25 19:15:45 -08:00
barry
a0e72d80c3 Changed Gregory triangle from cubic/quartic hyrid to full quartic:
- changed Far::PatchDescriptor size for GREGORY_TRIANGLE to 18
    - modified Far::LoopPatchBuilder to construct full quartic Gregory patch
    - fixed Far::LoopPatchBuilder bug related to face points near boundaries
    - updated Far patch basis evaluation for Gregory and Bezier triangles
    - updated Osd patch basis evaluation to match Far
    - updated Osd GLSL patch size for Gregory triangle to 18
    - modified Osd GLSL Gregory triangle eval and tess settings for quartic
2019-01-24 12:56:09 -08:00
barry
7ab065a0c4 Changed GLSL conversion of regular Loop patch to quartic Bezier:
- updated sizes for the Box-spline triangle shader to generate 15 points
    - updated conversion of Box-spline from hybrid Bezier to fully quartic
    - added resolution of degenerate normal to Bezier triangle evaluation
    - updated hybrid Gregory triangle conversion to quartic Bezier
    - updated adaptive tessellation of Bezier triangle for quartic boundaries
2019-01-22 09:48:19 -08:00
David G Yu
83486cddae Added GLSL support for drawing triangle patches
- Added GLSL patch shaders for BoxSplineTriangle and GregoryTriangle
  patches. These both convert to a hybrid Bezier patch for drawing
  similar to the basis conversion done for quad patches.
- Added evaluation of hybrid Bezier triangle patches and
  GregoryTriangle patches to the common shader source.
- Added OsdGetPatchIsTriangleRotated() to detect rotated triangles.
- Added OsdInterpolatePatchCoordTriangle() for eval of triangle patches.
- Added boundary point extrapolation for BoxSplineTriangle patches.
- Fixed boundary point extrapolation for unisolated BSpline patches.
- Added tess factor and tess evaluation location computation for
  triangle patches.
- Limit surface edge mid points for both quad and triangle patches
  are now computed directly.
2019-01-18 18:18:45 -08:00
David G Yu
494f45605f Moved GLSL tess factor code to separate file
Moved shader code which computes tessellation factors and
tessellation parameterization into a separate source file.
2019-01-18 18:17:38 -08:00
David G Yu
2ccd70fec3 Moved GLSL legacy shader code to separate file
Moved shader code used for evaluation of legacy gregory patches
to a separate source file along with macros which implement
simple linear face-varying interpolation.

These should not be used for new development, but are provided
for backward compatibility.
2019-01-18 18:15:43 -08:00
David G Yu
d855643b80 Fixed osd patch basis typos and macros 2019-01-18 18:14:00 -08:00
David G Yu
ff34c514f5 Improved patch basis eval for Osd to match Far
This updates the patch basis evaluation functions in Osd
to match recent changes to far/patchBasis.

This also exposes a common facility for dealing with PatchCoord,
PatchArray, and PatchParam. These are exposed as global functions
operating on struct data, since C++ style class methods are not
supported by all of the Osd shader and kernel execution envirionments.

Changes:
    - Merged far/patchBasis.cpp to osd/patchBasisCommon{,Types,Eval}.h
    - Exposed PatchCoord, PatchArray, and PatchParam to Osd kernels
    - exposed OsdEvaluatePatchBasis and OsdEvaluatePatchBasisNormalized
    - Updated CPU, TBB, Omp, CUDA, OpenCL, GLSL, HLSL, and Metal evaluators
    - Updated glFVarViewer
2018-11-15 17:11:50 -08:00
barry
484c2746d1 Minor refactoring of internal functions in far/patchBasis.*:
- individual basis functions now purely normalized with no PatchParam
    - two new higher level functions deal with patch type and PatchParam
    - updated Far::PatchTable and Osd evaluators that used old methods
2018-11-06 13:29:16 -08:00
David G Yu
c5c9704b90
Merge pull request #1003 from barfowl/tri_patch_support
Added low-level support in Far for triangular patches
2018-10-03 17:44:01 -07:00
barry
d6572ab226 Updated Osd evaluators to deal with changes to PatchParam boundary:
- updated evaluators to extract the extended 5-bit mask from PatchParam
2018-09-27 20:13:01 -07:00
barry
89c4ce78b7 Corrected initialization of patch arrays in Osd::CpuPatchTable
- assigned appropriate patch count and base offsets to varying arrays
    - assigned appropriate patch count and base offsets to face-varying arrays
    - fixed append to face-varying PatchParam buffer for each array
2018-09-25 15:13:55 -07:00
barry
b542bc78c3 Added missing include of <algorithm> for std::max with stricter compilers 2018-09-17 11:46:41 -07:00
barry
45928c1b81 Extended face-varying patch arrays to properly support two types:
- extended Far::PatchTable's FVar channels with two descriptors and stride
    - updated Far::PatchTableFactory to properly construct FVar patch arrays
    - extended Osd::PatchArray with two descriptors and common stride
    - updated Osd::CpuPatchTable and CpuEvaluator to use PatchArray extensions
2018-09-13 16:51:53 -07:00
barry
0f63aa997d Added bilinear end-cap option to Osd::MeshBits 2018-08-06 16:29:07 -07:00
barfowl
9c9108c3db
Merge pull request #959 from davidgyu/hlsl_patch_normals
Thanks David
2018-01-16 15:31:33 -08:00
barfowl
dcd82f4137
Merge pull request #960 from davidgyu/mtl_patch_normals
Metal patch shader changes for degenerate normals
2018-01-16 15:31:11 -08:00
David G Yu
6e02082bd7 Metal patch shader changes for degenerate normals
Updated Metal patch shaders to resolve degenerate normals.
This fix was ported from the GLSL patch shader source.

Also, added missing inf sharp test cases to mtlViewer.
2017-12-12 08:46:00 -08:00
David G Yu
917fc36dde HLSL patch shader changes for degenerate normals
Updated HLSL patch shaders to resolve degenerate normals.
This fix was ported from the GLSL patch shader source.

Also, added missing inf sharp test cases to dxViewer.
2017-11-21 18:01:57 -08:00
barry
0c2dd830b0 Updated GLSL patch shaders to resolve degenerate normals:
- modified Gregory patch shader to use existing Bezier patch evaluation
    - rewrote Bezier patch evaluation to use intermediate bilinear points
    - added detection and resolution of degenerate normal
    - eval normal partials no longer uses Weingarten eqns (requires N != 0)
    - updated normal partials to use differentiation/projection
2017-09-13 11:03:03 -07:00
David G Yu
58d867feea Fixed a typo in MTLPatchShaderSource
This fixes a shader compile error when enabling
the OPENSUBDIV_GREGORY_EVAL_TRUE_DERIVATIVES option.
2017-07-25 12:15:31 -07:00
David G Yu
2bcdedf0cc Fixed MtlComputeEvaluator docs and overloads
Updated MtlComputeEvaluator documentation to be
consistent with the documentation for other compute
evaluator implementations and fixed missing or
incorrect doxygen tags.

Also, updated the overloads for the EvalStencils
and EvalPatches methods to account for 1st and
2nd derivative evaluation.
2017-07-17 18:12:49 -07:00
Nicholas Blasingame
bdca520459 Added fvar support for metla as well as a ui for fvar. 2017-06-05 15:06:47 -07:00
David G Yu
dc950cf5fb Removed duplicate mtlVertexBuffer build config 2017-04-19 17:25:23 -07:00
Michael Harris
30cd2df37c Added Metal support 2017-04-19 16:49:53 -07:00
David G Yu
a725188081 Fixed Cpu Omp and GLXFB EvalStencils w/ deriv
Fixed a few bugs uncovered during testing.
2017-01-31 10:23:55 -08:00
David G Yu
63fdb39912 Improved XFB Evaluation of 1st and 2nd derivatives
Most GL implementations support a maximum of 4 transform
feedback buffer bindings. With the addition of 1st and 2nd
derivative evaluation up to 6 bindings might be required,
i.e. dst, du, dv, duu, duv, dvv.

This change extends the GLXFB Evaluator interface to allow
a client to specialize the evaluator when it is known that
(at least) the 1st derivative and 2nd derivative outputs
are interleaved together into shared buffers.

When this option is used, the maximum number of transform
feedback buffer bindings can be reduced to 3 instead of 6.
2017-01-30 12:12:00 -08:00
George ElKoura
a410a52f4e Merge pull request #924 from davidgyu/dev_osd_eval_deriv
Updated Osd Evaluator methods for derivative eval
2017-01-27 18:38:41 -08:00
David G Yu
8d3ba7372a Updated OsdMesh for 2nd partial deriv buffers 2017-01-27 17:14:27 -08:00
David G Yu
fe38ad8cda Added missing Osd Evaluator methods for deriv eval
Now that Far::LimitStencilTable and Far::PatchTable
support evaluation of 1st and 2nd derivatives the
Osd Evaluator API for evaluating stencils and patches
has been updated to match.
2017-01-27 17:14:18 -08:00
David G Yu
432b6b235f Updated doxygen comments for Osd Evaluator classes 2017-01-27 16:53:39 -08:00
barry
e3dd0f1798 Publicly exposed choice for smooth boundary patches at smooth corners:
- added Far::PatchTableFactory::Options::generateLegacySharpCornerPatches
    - legacy behavior of sharp patches at smooth corners preserved by default
    - added corresponding option bit to Osd::MeshBits
    - updated examples/glViewer with option
2017-01-27 16:22:04 -08:00
Takahito Tejima
044b25e818 Merge pull request #918 from davidgyu/dev_fix_spelling_731
Fixed spelling errors and typos in comments
2017-01-26 13:18:01 -08:00
David G Yu
66e8592ac6 Fixed program delete in Osd::GLComputeEvaluator
This fixes an inadvertant double delete of the previous GL progam
when compiling a compute kernel.
2017-01-25 17:00:33 -08:00
Thomas Thomassen
05352272b1 Fixed some typos in comments. 2017-01-24 22:48:48 -08:00
Mike Erwin
fc19cd2604 spelling phase 2
For completeness, ran files through an automated spell checker (Visual
Studio plugin) which caught several things missed while reading.
2017-01-24 22:48:44 -08:00
Mike Erwin
0beb654f0b spelling
Noticed a few typos when browsing comments. Proceeded with a "manual
spell check", reading all comments and tweaking spelling, grammar,
punctuation.

Didn't bother with Hbr library.

Comments only, no functional changes.
2017-01-11 12:40:49 -08:00
David G Yu
552e308266 Added OsdGetPatchIsRegular() for GLSL and HLSL 2016-10-17 15:25:17 -07:00
David G Yu
5ad64bc33e Addressed some FVar PatchTable API review notes
Fixed some inconsistencies with the methods added
to support face-varying patches.
2016-10-14 20:11:17 -07:00
barfowl
532013f5df Merge pull request #879 from davidgyu/patch_table_api_fixes
Fixed naming inconsistencies in Far::PatchTable
2016-10-11 22:12:08 -07:00
David G Yu
838fce27ab Exposed control for Gregory derivative weight eval
The symbol OPENSUBDIV_GREGORY_EVAL_TRUE_DERIVATIVES
determines the method used to compute derivative weights
for Gregory basis patches.

Setting this symbol during CMake configuration (and
hence during C++ and shader compilation) will enable
the use of true derivative weights.

The default behavior is to use a simpler approximation
for consistency with earlier releases.
2016-10-11 18:50:25 -07:00
David G Yu
df5d01ad3c Fixed naming inconsistencies in Far::PatchTable
The methods which return arrays of FVarPatchParam have
been made plural, e.g. GetFVarPatchParams(), for consistency
with the other methods in PatchTable.

Also fixed a missing doxygen tag.
2016-10-11 17:07:14 -07:00
David G. Yu
8257516427 Updated Osd mesh util classes for InfSharp patches
This adds some support to the Osd::*Mesh classes for
refining and populating infinitely sharp patches.
2016-09-30 10:56:22 -07:00