Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explicit unicode support for windows #1580

Merged

Conversation

aloysbaillet
Copy link
Contributor

Description of Change(s)

This change adds explicit windows support for UTF-8 characters in file paths.
As discussed in #1443 these changes are not necessary if the calling executable is patched to use the UTF-8 code page on recent versions of Windows (see https://docs.microsoft.com/en-us/windows/apps/design/globalizing/use-utf8-code-page for details).
Unfortunately these changes are necessary for applications that need to be used without changing the OS default settings.

Fixes Issue(s)

@aloysbaillet
Copy link
Contributor Author

I just updated the PR by replacing the wstring_convert which caused big slowdowns on our side, with the Windows API MultiByteToWideChar and WideCharToMultiByte which are much faster and do not seem to impact performance at all.
BTW the slowdown was found in a simple usdz file containing 25k references to a tiny geometry file, which probably is the worst case scenario for this change (loading that file went from 10s to 45s on my machine without the last change!).

@jilliene
Copy link

jilliene commented Aug 6, 2021

Filed as internal issue #USD-6819

@gitamohr
Copy link
Contributor

Hey Aloys -- I'm getting back to this one now. Was there more you wanted to do here or do you feel this is ready to go?

@aloysbaillet
Copy link
Contributor Author

Hi Alex, I believe this PR is good to go, it has been used for some time now and no regression was reported until now...
That said I'd love to get your feedback on if there's a nicer way to do this!

pixar-oss pushed a commit that referenced this pull request Sep 24, 2021
…support

for Windows.

See #1580

(Internal change: 2188891)
@pixar-oss pixar-oss merged commit 9793abb into PixarAnimationStudios:release Nov 1, 2021
lightwolf added a commit to lightwolf/USD that referenced this pull request Nov 8, 2021
commit 8f842146f69d51608dccefdc78afb128da392537
Author: tcauchois <[email protected]>
Date:   Tue Oct 5 16:49:21 2021 -0700

    [hd, hdSt, usdImaging] Change the format of UsdImagingDelegate::Get("/PointInstancer", "rotate") to VtArray<GfQuath>, to match SamplePrimvar; change expected hydra quaternion layout for "rotate" from (r,i,j,k) to (i,j,k,r).

    Quaternions in USD are stored as GfQuath arrays, with (i,j,k,r) component layout.  Before this change, UsdImagingDelegate::SamplePrimvar() would return an array of GfQuath for the "rotate" primvar on a point instancer; however, UsdImagingDelegate::Get() would convert the quaternions to GfVec4f format, with (r,i,j,k) component layout.  The main motivation for this change was to resolve the API incompatibility, by having Get() return an array of GfQuath as well.

    In order to not need to rewrite the array in processing, this code also adds half vector and quaternion support to HdVtBufferSource and hdStorm; GfQuath is now interpreted as a 4-component vector of halfs-floats, and hydra can transport this data all the way to the GPU.  This saves us the array copy, and also saves us some GPU memory and bandwidth since the data is sent packed.

    hdStorm half support is implemented with GL_HALF_FLOAT for vertex attributes.  For other binding points, like SSBOs, the half floats are sent as uint[] and unpacked by the generated HdGet_ functions.  Ext-computation output to half-float vectors is also supported.  hdStorm only supports half2 and half4; half1 and half3 are omitted since they are more complicated to index into.

    (Internal change: 2192012)

commit f83be08b7e7479ff9372a93abed5e5c1d70f875e
Author: sunyab <[email protected]>
Date:   Tue Oct 5 16:16:49 2021 -0700

    Fixes for Docker image used for PyPI generation

    - Pin the manylinux image to a specific tag. This avoids
      mysterious segfaults that occurred when trying to use
      the generated PyPI packages outside of the docker
      container.

      (The segfaults appear to be due to some kind of missing
      symbol error in TBB, but I haven't dug much further.
      I also did not bisect the manylinux images to determine
      the last one that did not have this issue)

    - Remove CMake build step. The manylinux image used here
         has CMake 3.20 installed, so we don't need to build
      CMake ourselves. This avoids an "expired certificate"
      error when trying to download the CMake source via wget.

    Fixes #1644

    (Internal change: 2191996)

commit 69e341791632b867c1c216fdd8e8d33db9185fa8
Author: stevelavietes <[email protected]>
Date:   Tue Oct 5 14:25:58 2021 -0700

    fallback case for HdSceneIndexAdapterSceneDelegate::Get when known cases (or requested primvar datasource) is not present

    (Internal change: 2191962)

commit 22853b19d5c8fe6aec775c1b1bbbbc2bc59b83cc
Author: sunyab <[email protected]>
Date:   Mon Oct 4 12:10:49 2021 -0700

    Update download locations in build_usd.py to avoid issues
    due to Let's Encrypt root certificate expiration on systems
    with OpenSSL version 1.0.2.

    This change updates build_usd.py to download library sources
    from alternate locations that are not affected by the
    certificate issues. These are still "official" locations
    listed on the websites for these libraries.

    (Internal change: 2191554)

commit 243d9d12e6309aa61deabd61969caa09fe466030
Author: spiffmon <[email protected]>
Date:   Fri Oct 1 23:15:24 2021 -0700

    This test update got stuck in the default changelist when submitting
    change 2191223

    (Internal change: 2191246)

commit 335363e8cb6df435989d7af518757f7881bd92fa
Author: spiffmon <[email protected]>
Date:   Thu Sep 30 16:06:06 2021 -0700

    Add some needful validations to usdchecker:
    - No Boundables under Gprims
    - No non-container Connectables under anything other than a connectable
       container
    - All textures that feed UsdPreviewSurface's _normal_ input should be
       recognizably linear encoding for 8 bit images, which should also
       set inputs:scale and inputs:bias appropriately.  We cannot properly
       recognize linear 8-bit images without a plugin to perform image
       loading and interrogation, which will come in a followup change. So,
       for now, we formulate the linearity check as a warning rather than an error.
    - Require more stage metadata

    Issuing warnings required some boilerplate for introducing the concept to
    the Rules and ComplianceChecker, and updating the two calling clients.

    Also cleaned up and corrected some flat-out wrong rule descriptions,
    comments, and logic:
    - The check for authored upAxis = 'Y' for consumer content was not actually
      validating the data was authored, so in most installations it wasn't actually
      checking anything
    - Texture asset checks were only being performed on Shader prims, but they
      are legal for all content classes on other Connectable prims such as Materials,
      so we now test all Connectable prims.
    - Provide scene paths in error messages wherever relevant
    - Make the texture check sensitive to consumer content mode and whether
      asset is a usdz package, since they affect what formats are legal.
    - Changed format of "--dumpRules" to provide the rule names, so that
      error messages referring to rules by name are more useful.

    TO DO:
    - complianceChecker logic really needs more unit testing for new checks
    - More asset level checks (such as rel and conn target encapsulation) and model
    hierarchy checks would be useful.
    - PrimEncapsulationChecker should validate that Connectable containers that enforce
    encapsulation actually do encapsuate their networks.

    (Internal change: 2191223)

commit d1aa521f6fbe48db1d4973c398d2611746d34ae1
Author: sunyab <[email protected]>
Date:   Thu Sep 30 10:55:24 2021 -0700

    Fix bug in build_usd.py where the script was not checking
    if the "use_cxx11_abi" argument was present. This argument
    is Linux-specific and is not defined on Windows/macOS.

    (Internal change: 2191163)

commit 0cbebd0e18ba626e42d59c38e167bd434aa03ade
Author: sunyab <[email protected]>
Date:   Wed Sep 29 21:14:49 2021 -0700

    Disable tests that use special test-only plugins on
    static library builds. The build system currently does
    not support this.

    (Internal change: 2190992)

commit 2edb141396a4d5decd0fbb97d3c534a32e29c728
Author: sunyab <[email protected]>
Date:   Wed Sep 29 01:11:22 2021 -0700

    Avoid calling ArResolver::OpenAsset multiple times when
    opening a .usd layer.

    This change adds private API to the .usda and .usdc file
    formats to read from a given ArAsset. The .usd file format
    now calls OpenAsset itself to retrieve the ArAsset and
    then passes it directly to the file formats.

    Fixes #1613

    (Internal change: 2190915)

commit f482550ecc87d5b7df7dc672af6206ac4e97e55a
Author: sunyab <[email protected]>
Date:   Wed Sep 29 01:10:50 2021 -0700

    Add UsdResolverExample

    UsdResolverExample provides a sample ArResolver implementation
    that supports URI asset paths of the form:

    asset:<asset_name>/<path_to_file>

    This example is meant to demonstrate how one could implement
    a URI resolver for USD and also illustrate concepts like the
    use of resolver contexts to drive resolution behavior. See
    overview.dox for more information.

    (Internal change: 2190914)

commit 326b63ef6e121b3d3b345e3ad64954f907049b96
Author: klucknav <[email protected]>
Date:   Wed Sep 29 01:10:22 2021 -0700

    [hdSt] Make sure all sizes of domelight textures supported in Storm.

    (Internal change: 2190881)

commit b6b4e7c56f55274e0f43c876b9803b067bc2adf3
Author: sunyab <[email protected]>
Date:   Wed Sep 29 01:10:07 2021 -0700

    [ar 2.0] Enable Ar 2.0 by default

    Ar 1.0 is now deprecated and will be removed in an
    upcoming release. If necessary, users can revert
    to Ar 1.0 by specifying PXR_USE_AR_2=OFF when running
    CMake.

    (Internal change: 2190873)

commit 2628628445f82448e909936ed67567158caaf6de
Author: sunyab <[email protected]>
Date:   Wed Sep 29 01:09:52 2021 -0700

    [ar 2.0] Add default implementation for ArResolver::GetExtension

    (Internal change: 2190866)

commit c6aa60fd820b2daa4ba7b0490b3322f9c310fc79
Author: clach <[email protected]>
Date:   Wed Sep 29 01:09:13 2021 -0700

    [hdPrman] Adds functionality in hdPrman when processing primvars for a gprim to check for a "dummy" node "PrimvarPass", which can hold primvar opinions expressed by the material. These opinions will not override any primvars already set.

    This is currently used in MatfiltConvertPreviewMaterial to add the "displacementbound:sphere" primvar with a value of 1 to UsdPreviewSurface materials. This primvar should only have an effect is displacement is present.

    (Internal change: 2190862)

commit fb1b8a7c3ce2160e40e110d2f47b03673a4e30fd
Author: tallytalwar <[email protected]>
Date:   Wed Sep 29 01:08:16 2021 -0700

    Include MeshLightAPI and VolumeLightAPI in light sdr def

    - Updated UsdLux discovery to add specific APISchemas like MeshLightAPI and VolumeLightAPI for sdr representation
    - Updated lightDefParser to Parse nodes associated with MeshLightAPI and VolumeLightAPI with their respective shaderId (MeshLight, VolumeLight) as identifiers.
    - Updated testUsdLuxLight to include logic for above.
    - Updated MeshLightAPI and VolumeLightAPI schemas to include light:shaderId
    - regen usdRiPxr schemas using updated args files for PxrMeshLight to use MeshLight and not the deprecated GeometryLight.
    - Note that the PxrMeshLightAPI auto applied to both UsdLuxMeshLightAPI and UsdLuxVolumeLightAPI, as that is how its used for renderman's purposes.

    (Internal change: 2190853)

commit 7a059235ca0ff5cfb1425ffdbdcf01d8facd5275
Author: davidgyu <[email protected]>
Date:   Wed Sep 29 01:07:42 2021 -0700

    [HdSt] Moved barycentric coord generation to codeGen

    This is preparation for using built-in barycentric coords
    when suported by the the graphics back end..

    (Internal change: 2190848)

commit ed9fe492c103cae8d0eec76e7f25f96f815a1f02
Author: pixar-oss <[email protected]>
Date:   Wed Sep 29 01:07:07 2021 -0700

    Adding the lightFilter:shaderId attribute to the UsdLuxLightFilter schema along with the functions for getting the appropriate shader ID for a list of render contexts from a light filter. This is the exact same API as exists on UsdLuxLightAPI for getting a light's shader ID.
    Also update UsdImaging to use UsdLuxLightFilter::GetShaderId to get the identifier for a light filter node in the material networks produced for GetMaterialResource

    (Internal change: 2190754)

commit 7d781f8942e4d0a1b8a4bbb060c714021d72650b
Author: sunyab <[email protected]>
Date:   Wed Sep 29 01:06:47 2021 -0700

    Avoid opening .usdz asset twice when loading .usdz layer

    Previously, the .usdz asset would be opened once to
    determine the primary layer in the archive and then again
    when the actually reading that layer from the archive.
    Usd_UsdzFileFormat now uses an ArResolverScopedCache to
    ensure that the .usdz asset will be opened just once.

    Fixes #1613

    (Internal change: 2190719)

commit d40019721010974eba8bacf5ea7966810b2d3a48
Author: sunyab <[email protected]>
Date:   Wed Sep 29 01:06:07 2021 -0700

    Fix bug in ArchGetStackFrames on Windows and macOS where
    invalid stack frame pointers would be copied if the number
    of frames to skip was greater than the number of frames in
    the backtrace.

    This was exposed by the test cases for the new exception
    code in Tf. The tests were updated to print out the stack
    trace contained in the exception for debugging.

    (Internal change: 2190718)

commit 1f2c05d312d70038d7e0b18acd2768f45bb6aa0a
Author: pixar-oss <[email protected]>
Date:   Wed Sep 29 01:05:52 2021 -0700

    Simplifying and optimizing UsdPrim::HasAPI now that we know API schemas will not inherit from other API schemas.

    (Internal change: 2190700)

commit a0f37664fe8df024e3d92f272b9adb7a0b9adce9
Author: pixar-oss <[email protected]>
Date:   Wed Sep 29 01:05:19 2021 -0700

    usdGenSchema no longer allows API schemas that inherit from other API schemas.

    (Internal change: 2190699)

commit ac735bdaf2dcd60ab3c43b3c9e5465a28567ea10
Author: gitamohr <[email protected]>
Date:   Wed Sep 29 01:05:02 2021 -0700

    tf: Add test to CMakeLists, missed in prior change.

    (Internal change: 2190698)

commit cce114070361c3443a80929b9dc655d9342e4748
Author: gitamohr <[email protected]>
Date:   Wed Sep 29 01:04:36 2021 -0700

    usd: Add usd/errors.{cpp,h} and UsdExpiredPrimAccessError, an exception thrown
    by the Usd core if code accesses an expired or null prim object.

    (Internal change: 2190686)

commit 1fa12e1c60336cee23a5e8816772449d76ca8fdb
Author: andrewbutts <[email protected]>
Date:   Wed Sep 29 00:58:44 2021 -0700

    Let hdSt draw BasisCurves that don't completely cover the
    supplied points or other primvars.

    If the client supplies a primvar that doesn't meet one of the size
    criteria, a fallback primvar value is used instead.  Previously,
    the valid authored size options were:
    a) Size 1
    b) Size equal to the number of elements implied by the topology and
    primvar class specifier (varying or vertex)
    c) Size less than the number of vertices, provided there are curve
    indices supplied

    Now, we adjust (b) for curves with curveIndices. If a client supplies
    indices (which specify a specific point index for each vert, in arbitrary
    order, with multiples, and possibly not covering the whole points
    array), primvars larger than numVerts are now permitted, and
    the primvar is truncated according to the primvar size implied by
    the topology and indices.

    Varying primvars of unexpected size are still counted invalid.

    Vertex primvars of unexpected size and lacking indices are also still
    counted invalid, as this is more likely an authoring mistake than
    an intentional sparsification as would be the case with indices.

    This strictly increases the configurations that are valid.

    This change does not tackle deindexing or compacting large
    primvars which are only sparsely used, because at the moment
    we have no mechanism in place for aliasing point IDs for drawn
    points.

    (Internal change: 2190663)

commit eab641c266a87975dab6870708320dbd845bb5ca
Author: sunyab <[email protected]>
Date:   Wed Sep 29 00:58:32 2021 -0700

    [ar 2.0] Add more docs for CreateIdentifier and IsContextDependentPath

    (Internal change: 2190662)

commit 0b5e117c9af4f3e65caf5605a6818d6eb906fbcf
Author: sunyab <[email protected]>
Date:   Wed Sep 29 00:58:12 2021 -0700

    Add option to build_usd.py to control libstdc++ ABI

    Users can now specify "--use-cpp11-abi={0, 1}" to set the
    _GLIBCXX_USE_CXX11_ABI define to the given value when
    building USD and its dependencies. This allows users to
    override their compiler's default ABI setting, which
    may be necessary to match other libraries that link
    against USD.

    There should be no difference in behavior if this
    option is not specified. By default, build_usd.py will
    not define this macro one way or another to allow the
    compiler to use its own default setting.

    Fixes #1609

    (Internal change: 2190658)

commit 7b8d6befba7fd823899c6dda18cbb33c8f500f64
Author: sunyab <[email protected]>
Date:   Wed Sep 29 00:57:57 2021 -0700

    Change default prefix for libraries to "libusd_" on Linux and
    macOS and "usd_" on Windows. This is to avoid name collisions
    with other libraries that may also use generic names like
    "trace" or "js".

    The previous behavior may be restored by specifying
    -DPXR_LIB_PREFIX="lib" or "" when running CMake.

    Fixes #1615

    (Internal change: 2190561)

commit c299ff75aac862a102a260fe144c6e670c3fe31f
Author: davidgyu <[email protected]>
Date:   Wed Sep 29 00:57:12 2021 -0700

    [HdSt] Consolidated edge param calculations

    This removes some duplicated shader code.

    (Internal change: 2190506)

commit ee79bb2fa1de9d3ef72e74d301b11f15e79b2213
Author: davidgyu <[email protected]>
Date:   Wed Sep 29 00:56:49 2021 -0700

    [HgiVulkan] Use shaderc to compile GLSL to SPIR-V

    Updated HgiVulkan to use the shaderc compiler interface
    to access the GLSL to SPIR-V compiler. Using this higher
    level interface allows for a simpler implementation as well
    as a simpler and more portable build configuration.

    (Internal change: 2190456)

commit 5d7a13bce182933670cb719bf63b66fa2d5df553
Author: clach <[email protected]>
Date:   Wed Sep 29 00:52:22 2021 -0700

    [hdPrman] In RtxHioImagePlugin, adds function to convert various texture formats to type float, so they can be passed to Renderman.

    Fixes #1313

    (Internal change: 2190386)

commit d04cd7e5e8a2d9ddb69a48d6cb1ab5879ca0c74a
Author: davidgyu <[email protected]>
Date:   Wed Sep 29 00:52:10 2021 -0700

    [HdSt] Implemented IsValid() for HdStUdimTextureObject

    This matches the test condition used for ptex texture objects,
    and also fixes a comment.

    (Internal change: 2190360)

commit 1635222affdbe342636db71297077768858b63b9
Author: tcauchois <[email protected]>
Date:   Tue Sep 28 13:18:32 2021 -0700

    [hd] In SceneIndexAdapter, add a 1-entry LRU cache for locators -> dirty bits translation.

    HdDirtyBitTranslator attempts to optimize the locator to dirty bit translation process, but it was still showing up in traces specifically when we invalidate the whole scene (due to, e.g., root level xform or visibility controls).  In those cases, we'll have 100k calls in a row translating a single locator to a single dirty bit.

    Adding an LRU cache to the translator vastly speeds up those invalidations, without really affecting typical frame-advance invalidations (which are more heterogenous).

    Note: currently, the cache only applies to rprims.

    (Internal change: 2190309)

commit 6cdb0759522507017511bc0b2e5fb0bc26c91d8d
Author: tcauchois <[email protected]>
Date:   Tue Sep 28 13:17:15 2021 -0700

    [hd] Break apart display style scene delegate calls.

    (Internal change: 2190306)

commit 759c3833cc4c0b4da5ebf27df33c1043eef4f31a
Author: pixar-oss <[email protected]>
Date:   Tue Sep 28 13:14:39 2021 -0700

    Adding lights prefix to LightAPI's filters relationship.

    (Internal change: 2190281)

commit 2a2d380fbb5b510847febbc9a57327ed71249451
Author: gitamohr <[email protected]>
Date:   Tue Sep 28 13:14:32 2021 -0700

    tf: Support TfBaseException in Tf_TerminateHandler.

    (Internal change: 2190201)

commit d58984f7dd0f8f7a13233b6077cd6a24d86ff8d2
Author: gitamohr <[email protected]>
Date:   Tue Sep 28 13:14:24 2021 -0700

    tf: Add basic exception support.

    (Internal change: 2190157)
    (Internal change: 2190292)

commit af1c2ae25d5ec2332b5b12cd31c783f3855de2e6
Author: pixar-oss <[email protected]>
Date:   Tue Sep 28 10:15:49 2021 -0700

    Additional schema adjustments to UsdLux
    - Added materialSyncMode attribute to LightAPI and overrides to its default value in MeshLightAPI and VolumeLightAPI
    - Added an authored default extent to PortalLight matching its behavior as a unit rectangle in the XY plane.
    - Added default values for the light:shaderId attribute for all built-in canonical lights which match the light's type name.

    (Internal change: 2190129)

commit f9572734a6a52d141efaecd287259ee491b54058
Author: tallytalwar <[email protected]>
Date:   Tue Sep 28 10:02:34 2021 -0700

    Update usdRiPxr schemas to reflect updates in renderman lightfilter args files for sdrDefinitionName using ri:lightFilter:* instead of ri:light.

    Sdr Background and Reasoning:

    We decided that it make sense for sdr node's context (pxr/usd/sdr/shaderNode.h#53-66) to be used for sdrDefinitionName.

    Reasoning for lightFilter and not lightfilter, that is the context token we have settled on in hdprman code:
    third_party/renderman-24/plugin/rmanArgsParser/rmanArgsParser.cpp#292

    (Internal change: 2190122)

commit e5229ba486acb0a91f68fad9a3f451ef26f9b4a4
Author: tcauchois <[email protected]>
Date:   Tue Sep 28 10:02:12 2021 -0700

    [usdImaging] Early-out of UsdImagingDelegate::Sync if the list of sync paths is empty.

    (Internal change: 2190112)

commit f3ebcb27352973a519ae74d8189cbccc613b123f
Author: stevelavietes <[email protected]>
Date:   Tue Sep 28 09:37:06 2021 -0700

    - moves renderIndexPrepSceneIndex functionality into sceneIndexAdapterSceneDelegate for efficiency
    - disables HdFlatteningSceneIndex for now

    (Internal change: 2190082)

commit f48dd0603dae8be775b941a46649b092dd501fb6
Author: tallytalwar <[email protected]>
Date:   Tue Sep 28 09:35:41 2021 -0700

    UpdateSchemaWithSdrNode now adds shaderId attrSpec with default value corresponding to sdrNode identifier

    - usdgenschemafromsdr is updated such that schemaConfig now provides a renderContext ("ri" for renderman nodes as an example), this is then passed down to UsdUtilsUpdateSchemaWithSdrNode which uses this information along with SdrShaderNode's context field to create an attribute spec for shaderId and assigns it the shader's identifier as a default value.
    - cleaned usage of string constants in usdgenschemafromsdr

    Note that we need to provide identifier (overrideIdentifier parameter) to be used for sdrNodes which are queried using explicit asset paths. This should only be used when clients know the identifier being passed is the true identifier which sdr Runtime will provide when querying using GetShaderNodeByNameAndType, etc.

    This change also updates the usdRiPxr schemas by appropriately running the updated usdgenschemafromsdr on the "updated" rman schemaConfig.json files.
           - also updates these schema to reflect changes from usdLux sdr nodes only having core types properties and shadowAPI and shapingAPI properties.

    (Internal change: 2190059)

commit 9793abb56d4604c23753350794a07c4c3e71728c
Merge: c1efe0bb5 e001b6c12
Author: pixar-oss <[email protected]>
Date:   Tue Sep 28 09:35:08 2021 -0700

    Merge pull request #1580 from aloysbaillet/win32-utf8-support

    Explicit unicode support for windows

    (Internal change: 2190048)

commit c1efe0bb52914cbd9664f2bbea224b101ad8a6d7
Author: gitamohr <[email protected]>
Date:   Thu Sep 23 16:27:16 2021 -0700

    arch: Simplify crash message, also add argument to skip unknown frames when printing stack traces.

    (Internal change: 2190014)

commit e0da0a7f55c26fb4acd7717c431e7ab3755ca710
Author: tcauchois <[email protected]>
Date:   Thu Sep 23 16:26:10 2021 -0700

    [usdImaging] Fix GprimAdapter::_AddRprim material resolution order to be consistent with other functions.

    In GetMaterialId (on instancers and gprims) and GprimAdapter::UpdateForTime, we consider the local material binding to take precedence over the instancer material binding.  This is consistent with the basic USD rules, where more local material assignments take precedence.  However, this was flipped in _AddRprim, which would preferentially take the instancer material binding.

    For many scene structures, this wasn't causing issues, since only one of the material bindings would be non-empty; or they would point to the same path, which is sketchy but worked in practice.  However, this specifically fixes a bug concerning scenes where a point instancer prototype is marked as instanceable, and the material bound to the prototype is inside the instance; in this case, the old code would have a disagreement about whether the material was named /World/path/to/material or /Prototype_N/path/to/material, and so the relationship in hydra would be broken.

    Fixes #1626

    (Internal change: 2190000)

commit 2c060ecbc0018af88ad72d670a4558435336a76d
Author: pixar-oss <[email protected]>
Date:   Thu Sep 23 16:25:45 2021 -0700

    Updates to the SdrShaderNodes that are generated for concrete UsdLux types
    1. SdrShaderNodes are only generated for concrete UsdLux library light types. We no longer generate nodes for the empty UsdLuxLightFilter and therefore any light filters.
    2. ShadowAPI and ShapingAPI input attributes are now included in every light type's shader node.
    3. The shader nodes for these lights will no longer include inputs that come from auto-applied API schemas (like the auto applied rman API schemas).

    (Internal change: 2189986)

commit 82981a9328725cf2f719fd4f28c905bcc89a84c8
Author: comand <[email protected]>
Date:   Thu Sep 23 00:34:50 2021 -0700

    Remove lone use of boost::format from pxr.

    (Internal change: 2189856)

commit 04fe0da60ae8afcf520162bb9eb037bd5acdc5b4
Author: gitamohr <[email protected]>
Date:   Thu Sep 23 00:33:39 2021 -0700

    hio: Just return nullptr instead of creating a static const null shared_ptr and
    returning that.  Creating the static const shared_ptr generates a lot of extra
    code that we don't need.

    (Internal change: 2189642)

commit 3e6caf17e8ed43fa061d3f479db5aedb32a201b5
Author: sunyab <[email protected]>
Date:   Thu Sep 23 00:32:46 2021 -0700

    [ar 2.0] Make ArResolver::GetModificationTimestamp optional

    ArResolver now provides a default implementation for
    ArResolver::GetModificationTimestamp that just returns an
    invalid ArTimestamp.

    SdfLayer no longer requires a layer to have a valid timestamp.
    Previously SdfLayer would issue a coding error and fail if a
    timestamp could not be retrieved, even if the layer itself was
    opened and read successfully.

    The timestamp was used by SdfLayer::Reload to determine if
    a layer had been changed externally and needed to be reloaded.
    SdfLayer::Reload will now consider any layer with an invalid
    timestamp and any layer with external asset dependencies with
    invalid timestamps as "dirtied" and will always reload that
    layer.

    (Internal change: 2189596)
    (Internal change: 2189952)

commit a4647187e1a5fca05f7344214ebf6ec3ed041ac7
Author: clach <[email protected]>
Date:   Thu Sep 23 00:32:29 2021 -0700

    Adds "displacementbound:sphere" primvar (with value of 1) to meshes in HdPrman if they do not already have it, allowing displacement to be seen if mesh is using a UsdPreviewSurface material with displacement.

    (Internal change: 2189573)

commit 31a6180a6005e6038a691df999bd8c8705d06474
Author: clach <[email protected]>
Date:   Thu Sep 23 00:32:15 2021 -0700

    [hdPrman] Fixes bug when checking for "displacement" input param on UsdPreviewSurface node. Only add PxrDisplace node when value of displacement param is not 0.

    (Internal change: 2189570)

commit de1bcf044b9a9251ccd46b0cab6ec7fdd6edd381
Author: tallytalwar <[email protected]>
Date:   Thu Sep 23 00:31:11 2021 -0700

    Allows for shader writers to explicitly provide the Sdf type associated with SdrProperty

        - This can be provided by setting the sdrUsdDefinitionType field in the shader to the appropriate sdf type.

        - Note that there is an assumption that the default value set on the
        such a property is in accordance with the SdfValueTypeName set in
        SdrUsdDefinitionType metadata. Hence we wll try to cast the VtValue to the appropriate sdf type.

        - Introduces _sdfTypeDefaultValue member on SdrShaderProperty which is
        set in _ConformSdfTypeDefaultValue. GetDefaultValueAsSdfType() can be used to access this value.
        Note that GetDefaultValueAsSdfType on the base NdrProperty returns an empty
        VtValue, in allignment with the implementation of NdrProperty::GetTypeAsSdfType

       - GetDefaultValue() returns the parsed sdr default value, though some minimal conformance check
         and correction are applied as part of _ConformSdrDefaultValue.

       - XXX: Note that for backwards compatibility we currently override the value of _defaultValue with
         _sdfTypeDefaultValue and this specific code is guarded by an envSetting. Once all appropriate code sites
         for GetDefaultValue are updated to use GetSdfTypeDefaultValue, this envSettings and the backward compatibility code should be removed.

       - Included a test in schema gen through sdr to use this feature.

    (Internal change: 2189531)
    (Internal change: 2189658)

commit 8690742e53c79738ad3c175eb2581d54d70055ce
Merge: 237f3d7fd 73cd8cd60
Author: pixar-oss <[email protected]>
Date:   Thu Sep 23 00:31:05 2021 -0700

    Merge pull request #1625 from kcoley/dev_usd_compliancechecker_and_usdtransform2d

    complianceChecker.py returns false error for not recognizing the UsdTransform2d node

    (Internal change: 2189454)

commit 237f3d7fd17584008babd105889376e24aa7bed1
Author: pixar-oss <[email protected]>
Date:   Thu Sep 23 00:30:40 2021 -0700

    Adding the MeshLightAPI and VolumeLightAPI schema classes to UsdLux.

    (Internal change: 2189453)

commit 141b2b95f4c1e39f4d58d33a968705000fefb401
Author: blevin <[email protected]>
Date:   Thu Sep 23 00:28:40 2021 -0700

    HdPrman now supports additional clip planes.

    (Internal change: 2189427)

commit c4efe02226134deaf61c27d8b1cf8d9a60016907
Author: davidgyu <[email protected]>
Date:   Thu Sep 23 00:27:52 2021 -0700

    [HgiMetal] Check buffer storage mode before blit sync

    Added a check of the storage mode of the source cpuBuffer before
    executing synchronizeResource.

    Contribution: Jon Creighton

    (Internal change: 2189421)

commit 6b4aaf919daf8652955ac1c5319b258cf5ff1c34
Author: tcauchois <[email protected]>
Date:   Thu Sep 23 00:19:21 2021 -0700

    [usdImaging] Fix a possible crash when invalidating items, then deleting them, then drawing.

    UsdImagingDelegate uses _dirtyCachePaths to maintain a list of prims to call UpdateForTime on, based on recent invalidation.  When prims in the underlying stage are deleted, we don't prune this list (for efficiency of removes), which means that it's possible for _dirtyCachePaths to point to nonexistent prims.  Previously, this would trip an assert; this CL relaxes the assert.

    (Internal change: 2189221)

commit 21eb93f3d87fb88b783cec14b0a28160283a4076
Author: clach <[email protected]>
Date:   Thu Sep 23 00:14:49 2021 -0700

    Add support for UsdPreviewSurface's displacement in HdPrman. Modifies MatfiltConvertPreviewMaterial() to check if the UsdPreviewSurface node has displacement set, and if so, inserts a PxrDisplace terminal node.

    (Internal change: 2189084)

commit 57bd3b2926128b69e00ccc13e85fcb5ccf301798
Author: pixar-oss <[email protected]>
Date:   Thu Sep 23 00:12:17 2021 -0700

    Registering USD extent computations for the boundable lights, namely CylinderLight, DiskLight, RectLight, SphereLight.
    This skips PortalLight which has no parameters that contribute to bounds computations.

    (Internal change: 2189066)

commit 0a875ff71509c5308c7472a741e749abc40cd9cc
Author: sunyab <[email protected]>
Date:   Thu Sep 23 00:08:03 2021 -0700

    Fix regression introduced in change 2188569

    Per comments in the file, we need to make sure that
    _assetModificationTime is reset to an empty VtValue in
    SdfLayer::SetIdentifier if the resolver returns an
    invalid ArTimestamp since this indicates the layer
    hasn't been serialized to its new location yet. Prior to
    the above change, ArResolver would have just returned
    an empty VtValue in this case.

    (Internal change: 2189050)
    (Internal change: 2189055)

commit 64ad38717b0374b5ec7e06fb96b79b5424cde413
Author: pixar-oss <[email protected]>
Date:   Fri Sep 17 23:30:08 2021 -0700

    hdPrman should use RtxHioImage for lightColorMap.

    We want the ability to pass asset paths that refer to things other than
    .tex files on disk to prman for the lightColorMap property on lights.
    We can do this by using the RtxHioImage rtxplugin but there are three
    complications:

    1) We must distinguish (at least) .tex files. Users will
    not be able to read them via HioImage so these asset paths must be
    passed directly (without using rtxplugin).

    2) Unlike other textures, lightColorMap textures should not be
    flipped vertically.

    3) Only image assets should use RtxHioImage.

    This change changes hdPrman/light.cpp to use the RtxHioImage plugin
    with flipping disabled for resolved asset paths that don't have a .tex
    extension for the texture:file input.  It also changes material.cpp
    to use the RtxHioImage plugin for resolved asset paths that don't have
    a .tex extension, and are either image assets on disk or for a light's
    texture:file input.  This is a heuristic: an unresolved asset path is
    probably (?) a relative path for RMAN_TEXTUREPATH to find, and a
    resolved asset path that has the "tex" extension could really only
    be a .tex file on disk.
    If the resolved asset is on disk then we can check to see if it's an
    image.  If it's for a light's texture:file we know its an image and
    it must not be flipped.

    This change adds a new TfDebug code, HDPRMAN_IMAGE_ASSET_RESOLVE, that
    prints resolved image asset paths.  It's now used for lightColorMap,
    assets in materials, and material filters.

    (Internal change: 2189040)

commit 5d0b89cecd786115cfff83098b32ba3603214cbe
Author: pixar-oss <[email protected]>
Date:   Fri Sep 17 23:29:11 2021 -0700

    Trace HioImageRegistry::_ConstructImage().

    Added TRACE_FUNCTION to the method to keep an eye on its possible
    non-negligible cost.

    (Internal change: 2189037)

commit 0885d20ebb6c363d7880a8e20e454dfe0d6b426e
Author: pixar-oss <[email protected]>
Date:   Fri Sep 17 23:28:45 2021 -0700

    Add flipped flag to RtxHioImage plugin.

    The plugin will normally flip images vertically on load.  This change
    allows the client to send a "flipped=false" argument to prevent that.
    Texture maps on lights should not be flipped.

    (Internal change: 2189036)

commit 8f9bb9563980b41e7695148b63bf09f7abd38a41
Author: gitamohr <[email protected]>
Date:   Fri Sep 17 23:28:16 2021 -0700

    hio: Update stb_image code to latest versions, enable UTF-8 filename support
    for Windows.

    See #1580

    (Internal change: 2188891)

commit cbb7f3832e86e669ab202e28ca2feec59df6e158
Author: sunyab <[email protected]>
Date:   Fri Sep 17 23:26:58 2021 -0700

    [ar 2.0] Add ArFilesystemAsset::GetModificationTimestamp

    This is a convenience method that resolver implementations
    can use to retrieve a modification timestamp for a file on
    disk. Updated callers that were using ArchGetModificationTime
    directly to use this new method.

    (Internal change: 2188869)

commit bb8c7c626b77cd71166003dd6fd4a477ff5d1dc6
Author: clach <[email protected]>
Date:   Fri Sep 17 23:17:55 2021 -0700

    Adds support for UsdUvTexture's "sourceColorSpace" input and fixes UsdPreviewSurface's normal mapping in HdPrman.

    When MatfiltConvertPreviewMaterial() finds a UsdUvTexture node, we now check for a sourceColorSpace input token and pass it to the texture loader. HdPrman and Storm both check for a sourceColorSpace string. MatfiltConvertPreviewMaterial() is also modified to ensure the "normal" input signal is passed properly.

    (Internal change: 2188716)

commit bfb41b839a583772ac58dfe273ab593de90c7f8a
Author: tcauchois <[email protected]>
Date:   Fri Sep 17 23:17:25 2021 -0700

    [Hd] Performance improvements for HdRenderIndexPrepSceneIndex.

    (Internal change: 2188699)
    (Internal change: 2189212)

commit 6c89bf909c42a5a4b32177ca2693a0c349999334
Author: tcauchois <[email protected]>
Date:   Fri Sep 17 23:16:43 2021 -0700

    [usdImaging] Let usdImaging manage delegate sync.

    usdImaging changetracking is good enough now that we don't need the sync request vector to call UpdateForTime.

    (Internal change: 2188698)

commit 07d456fd95b3222b1435feae5fd9addf506c07fb
Author: pixar-oss <[email protected]>
Date:   Fri Sep 17 23:16:08 2021 -0700

    Deleting UsdLuxLight and UsdLuxLightPortal.

    (Internal change: 2188607)

commit d43f0724d241cc4eb3a8a4d0e51a29206e434e8a
Author: sunyab <[email protected]>
Date:   Fri Sep 17 23:10:38 2021 -0700

    [ar 2.0] Require Unix time for asset modification times

    ArResolver implementations were previously free to use any
    object to represent an asset's modification time as long as
    that object could be equality-compared to determine if an
    asset had been modified. This provided maximum flexibility.

    However, with the introduction of URI resolvers in Ar 2.0,
    clients may now be working in environments with multiple
    active resolver implementations. In these cases, allowing
    each implementation to use different objects for timestamps
    would restrict the ability to compare timestamps from
    different assets, e.g. to determine if one asset had been
    more recently modified than another. This is not something
    the USD core currently does, but could be useful in various
    pipeline use cases.

    To enable these comparisons, Ar now requires asset
    modification times to be represented using Unix time. This
    change modifies ArResolver::GetModificationTimestamp to
    return a new ArTimestamp object which documents this
    requirement. Client code in the core has been updated to
    accommodate this API change.

    (Internal change: 2188569)

commit 87b25a1972c09728588e5c7d9591b63699ec40b7
Author: tcauchois <[email protected]>
Date:   Fri Sep 17 23:09:17 2021 -0700

    [hd] Performance fix for HdFlatteningSceneIndex xform computation.

    1.) If the xform is fully composed, don't bother looking up the parent prim.
    2.) If the xform is fully composed, cache it instead of returning with nothing cached.

    (Internal change: 2188429)

commit 8947ffd04e3014f16daedeeed234437ab5ffdce4
Author: tcauchois <[email protected]>
Date:   Fri Sep 17 23:07:03 2021 -0700

    [Hd] PrimDataSourceOverlayCache: don't use a per-prim TBB datastructure.

    PrimDataSourceOverlayCache holds, per-prim, a series of attributes that have been computed and added to that prim.  Those new attributes are currently living inside a tbb::concurrent_unordered_map, but it turns out this is super expensive.  It's also not needed in current uses of the PrimDataSourceOverlayCache, since hydra has a (mostly) strong guarantee of only one thread accessing each prim.

    We'll need to revisit this if we add hierarchical computations to PrimDataSourceOverlayCache, but at that point we have many solutions that aren't as expensive as a TBB datastructure.

    (Internal change: 2188421)

commit f89af062a0cf332da7557dbcea4da17d58754e0c
Author: tcauchois <[email protected]>
Date:   Fri Sep 17 23:06:16 2021 -0700

    [usdImaging] Delete PrimvarDescCache::Extract and ::GarbageCollect, and UsdImagingDelegate::PostSyncCleanup.

    This whole codepath wasn't being used, since we never extract things from the desc cache anymore; we only use Find().

    (Internal change: 2188420)

commit 6d317699a389dd5c560873c5791870173b4649f0
Author: pixar-oss <[email protected]>
Date:   Fri Sep 17 23:04:38 2021 -0700

    Updating BoundableLightBase to inherit from Boundable and NonboundableLightBase to inherit from Xformable.
    This completely removes any dependencies on the UsdLuxLight schema class which can be deleted following this change.

    (Internal change: 2188389)

commit dcb16701a0e034af123cd1b14179c5abd6bb739b
Author: blevin <[email protected]>
Date:   Fri Sep 17 23:04:09 2021 -0700

    usdview hard-codes 1024 samples for HdPrman

    (Internal change: 2188127)

commit 7743b25909e40fcf5471d87bca356ae0a6fb9d2b
Author: tcauchois <[email protected]>
Date:   Fri Sep 17 23:03:33 2021 -0700

    [Hd] Speed up HdLegacyPrimSceneIndex::DirtyPrims.

    Skip looking up the legacy datasource if the locator's not relevant.

    (Internal change: 2188041)

commit 16790cd84a68a220dd759d638a3d24bdfbc6f1f3
Author: tcauchois <[email protected]>
Date:   Fri Sep 17 23:03:09 2021 -0700

    [usdImaging] Add a trace to UsdImagingDelegate::Sync.

    (Internal change: 2188040)

commit 11a6c0071e284e27e3d332047d9027a6c36275f6
Author: blevin <[email protected]>
Date:   Fri Sep 17 23:02:23 2021 -0700

    Fix HdPrman's fallback maxSamples to match the RenderMan fallback (64).

    (Internal change: 2188006)

commit c5a31418a53d25ca4bccbe8947e17e51e2445978
Author: blevin <[email protected]>
Date:   Fri Sep 17 23:01:10 2021 -0700

    Adjust HdPrman's fallback volume shader to match Storm's.
    Visually, this fallback approximates something like smoke:
    - low albedo
    - isotropic (i.e. scattering has no directional bias)
    - single-scatter integration is often sufficient

    (Internal change: 2187915)

commit 0507b1582041096e32613ef9201b500d94a51ee4
Author: tallytalwar <[email protected]>
Date:   Fri Sep 17 22:57:51 2021 -0700

    Update ConnectableAPIBehavior and UsdGeomBoundableComputeExtent to not clear the entire cache every time new plugins are registered

        UsdShadeConnectableAPIBehavior:
            - On a new plugins registered notice, erase the entries in _primTypeIdCache
              which have a null behavior registered, since newly-registered plugins may
              provide valid behavior for these primTypeId entries. Note that we retain
              entries which have valid connectableAPIBehavior defined.

            - Update the _GetBehaviorForPrimTypeId to also cache primTypeId for
              which no behavior is found.

            - Added a test which checks the state of behavior cache before and after
              new plugins have been registered.
            - Re-orgs testUsdShadeConnectableAPIBehavior resource directory

        UsdGeomBoundableComputeExtent:
            - Erase the entries in _registry which have a null ComputeExtentFunction
              registered, since newly-registered plugins may provide a valid
              computeExtentFunction for these type entries. Note that we retain entries
              which have valid ComputeExtentFunction defined.

    (Internal change: 2187908)

commit c8c8b0232835a31094a436726d6189642e91c93d
Author: stevelavietes <[email protected]>
Date:   Fri Sep 17 22:54:12 2021 -0700

    Only advertise volumeFieldBinding as data source name for volumes within dataSourceLegacyPrim
    This only affected cases which rely on advertised names to know what to query,
    It revealed a case where a scene delegate could crash if non-existent volume field data was requested for all gprims (fixed separately)

    (Internal change: 2187718)

commit da65150d59ee0d04ea1bc040b2af17fdab03ad93
Author: stevelavietes <[email protected]>
Date:   Fri Sep 17 22:52:46 2021 -0700

    HdRenderIndex::GetSceneDelegateForRprim falls back to back-end adapting scene delegate when a prim doesn't contain a "delegate" data source.

    (Internal change: 2187715)

commit 2dc2bf134f92a4521cdb5518a63dad9825b3e6ee
Author: jewalker <[email protected]>
Date:   Fri Sep 17 22:49:40 2021 -0700

    Extracted the euler filtering portion of GfRotation:DecomposeRotation

    Pulled out the portion of GfRotation::DecomposeRotation that is
    responsible for making sure that a given rotation is the closest
    possible rotation to a hint rotation into a standalone function called
    ClosestSolution.

    (Internal change: 2187674)

commit 7888d5ba664817d6689167fdc2782407d314f3fc
Author: jewalker <[email protected]>
Date:   Fri Sep 17 22:45:17 2021 -0700

    Replace Gf::_PiShift with a simpler and more correct algorithm

    The original Gf::_PiShift algorithm tried to calculate the result in as
    few operations as possible, however the algorithm is slightly confusing
    and is incorrect in a few cases (it sometimes doesn't return a value
    within Pi of the hint). Replacing with a simpler iterative algorithm.

    (Internal change: 2187673)

commit 429819564f12cff5469b24019b3a691dfa0a0f84
Author: jewalker <[email protected]>
Date:   Fri Sep 17 22:40:41 2021 -0700

    Replace use of NULL with nullptr in GfRotation

    (Internal change: 2187672)

commit 5c29d519e6292d3b522c917fbf0298e00c9816c1
Author: pixar-oss <[email protected]>
Date:   Fri Sep 17 22:31:31 2021 -0700

    HasConnectableAPI() now does a full search.

    Previously this function (on UsdShadeConnectableAPI) would only check a
    cache.  If the type hadn't been cached already then the function would
    return false even if it would've been true after caching.  Now we do
    the full search algorithm from GetBehavior() to fill the cache if
    necessary so clients are no longer on the hook to call GetBehavior()
    (indirectly) to get the right results.

    The change moves the code from GetBehavior() into another function and
    has GetBehavior(), GetBehaviorForType() (which HasConnectableAPI()
    calls), and GetBehaviorForPrimTypeId() call the new function.

    Please note that this makes GetBehaviorForPrimTypeId() and
    GetBehaviorForType() significantly more expensive if the result isn't
    cached.  This is necessary to get the correct answer.

    testUsdShadeConnectableAPIBehavior was changed to reflect the new
    behavior.  One part of a test became redundant and was removed while
    parts of two other tests that depend on the new behavior were enabled.
    A type lookup bug was also fixed;  this bug prevented a couple of
    tests from checking what they were intended to check.

    (Internal change: 2187449)

commit d0a35fd5f4ebbbbb60c527cd36a22fd53f358ec9
Author: tallytalwar <[email protected]>
Date:   Fri Sep 17 22:31:10 2021 -0700

    Regen usdRiPxr/pxUsdRiPxr schemas using the updated schemaBase metadata from args files.

    (Internal change: 2187265)

commit a26ea21208fafc4de1a5e48970cbbfdc6b43e049
Author: stevelavietes <[email protected]>
Date:   Fri Sep 17 14:30:00 2021 -0700

    HdDataSourceLegacyPrim::GetNames advertises "material" as a possible child data source for lights
    (This makes GetMaterialResource results inspectable for legacy scene delegate lights.)

    (Internal change: 2187069)

commit 85c5f6e612b4369bfb4b26031079626abaa3262b
Author: tcauchois <[email protected]>
Date:   Fri Sep 17 13:46:28 2021 -0700

    [hd] Re-enable Scene Index Emulation.

    Scene Index Emulation is a major new imaging feature.  It was originally turned on in CL 2185534, but due to some performance issues it was disabled in CL 2186347.  We've addressed many of the performance issues now, so we're re-enabling it.  We expect to continue working on performance after this CL, though.

    (Internal change: 2187040)

commit db0633d7044dc56d42b030a3e89cd7cbc58f04a9
Author: sunyab <[email protected]>
Date:   Fri Sep 17 13:45:07 2021 -0700

    Tweaks for specifying build variants in build_usd.py

    - Restored default build variant to 'release'. This was
      changed to 'relwithdebinfo' in change 2184287 but in
      hindsight it seems a little odd for the default to
      not be 'release' and produce a potentially much larger
      build due to the inclusion of the debugging info.

    - Removed individual build variant flags to minimize the
      (growing) number of command line arguments to the build
      script. Users now specify the build variant with:

      '--build-variant {debug, release, relwithdebug}'

    - Small refactor to provide more readable description
      in summary and remove unnecessary function.

    (Internal change: 2186949)

commit b6a2fbf1d15b716803ffdc7b2b62b4ba79bda401
Author: pixar-oss <[email protected]>
Date:   Fri Sep 17 13:43:58 2021 -0700

    Updates in usdLux to replace references to UsdLuxLight.
    The Ndr discovery plugin and parser for lights now finds all types that derive from the BoundableLIghtBase and NonboundableLightBase types.
    Light tests now use the UsdLux.LightAPI object.

    (Internal change: 2186931)

commit 66c6acd1e6a201e71c8dd3fe797b1750afd1f194
Author: tallytalwar <[email protected]>
Date:   Fri Sep 17 13:43:41 2021 -0700

    Document sdr property metadata to SdrProperty spec metadata translations

    (Internal change: 2186888)

commit 2152151a61a6ad122d57af83ece46e922f43fa97
Author: klucknav <[email protected]>
Date:   Fri Sep 17 13:35:58 2021 -0700

    [hdx] built-in lights in HdPrman
    Extending the HdxTaskController to add the built-in lights regardless of backend.

    (Internal change: 2186877)

commit 73cd8cd60662bbb88da88a7f8a15b3fcf0add1c6
Author: Kacey Coley <[email protected]>
Date:   Thu Sep 16 15:41:31 2021 -0700

    Add UsdTransform2d as a shader id option

commit 562750fc25f24b404bd38798582be55e33eb7dfb
Author: tcauchois <[email protected]>
Date:   Sun Sep 12 23:42:03 2021 -0700

    [hd] Streamline HdFlatteningSceneIndex PrimsAdded and PrimsDirtied calls.

    - When we get an Added/Dirtied for primPath and invalidate its subtree, don't generate a dirty notice for primPath since that's redundant.
    - The wrapper invalidation now takes a locator set, and we filter for relevancy against a locator set.  This reduces the number of times we translate back and forth.
    - If we're invalidating a subtree and a prim doesn't have any cached data, don't invalidate its children, on the assumption that they didn't reference this prim for their value computations.  (This particularly helps avoid large invalidations before the scene is populated).

    (Internal change: 2186846)

commit d9b0f28ef2fc4b9876d29863b792ae356fa97874
Author: tcauchois <[email protected]>
Date:   Sun Sep 12 23:41:58 2021 -0700

    [hd] Speed up scene index emulation teardown.

    Special case scene index prim removal for the case of path == "/".

    (Internal change: 2186837)

commit 8ffa7e00c75eccec9cfa88743203856c686abb34
Author: sunyab <[email protected]>
Date:   Sun Sep 12 23:41:31 2021 -0700

    Fixed bug that could cause UsdNotice::ObjectsChanged notice
    emitted after a call to UsdStage::Reload to contain pointers
    to destroyed objects, leading to invalid memory accesses
    when calling certain methods on the notice.

    Change 2175340 added a batching mechanism for processing
    changes in UsdStage, primarily to allow stage changes that
    occurred during a call to UsdStage::Reload to be combined
    into a single round of notification. These changes could be
    due to a resolver change, or layers being reloaded.

    In the latter case, UsdStage::_HandleLayersDidChange would
    save pointers to data in the SdfNotice::LayersDidChange
    notice it received so they could be included in the
    ObjectsChanged notice emitted in _ProcessPendingChanges.
    However, _ProcessPendingChanges would be called *after* the
    LayersDidChange notice went out of scope, leaving the
    pointers in the ObjectsChanged notice dangling.

    This fix makes UsdStage::_HandleLayersDidChange process and
    send out the ObjectsChanged notice immediately to ensure the
    LayersDidChange notice is alive when the ObjectsChanged
    notice is sent. This should still result in a single round
    of notifications if UsdStage::Reload causes resolver change
    and layer reloads, since the layer reloads happen after
    the resolver changes are processed.

    Fixes #1605

    (Internal change: 2186836)

commit 055fce522d53b6afca3c3ff43d528baf7e492ce5
Author: tcauchois <[email protected]>
Date:   Sun Sep 12 23:41:18 2021 -0700

    [hd] Speed up UsdImagingDelegate::Sync() when some of the request paths are not present.

    In scene index emulation, UsdImagingDelegate::Sync() can receive prim paths of other delegates.  If we discover these, we want to continue to the next prim path as soon as possible.  Previously, the first thing we did with these paths was to convert index -> cache path, and then check if the prim info was present.  However, if the prim info isn't present, the index->cache path map entry won't be present, and we'll do an SdfPath::ReplacePrefix before discovering that the primInfo map is empty.

    Now, we directly look at the index -> cache path table, skipping the ReplacePrefix.  If we don't find the path translation entry, we know the prim info doesn't exist, since the two datastructures are maintained in parallel.

    (Internal change: 2186829)

commit b89fa3b377a1231b1a0a284e59279538ca98420f
Author: spiffmon <[email protected]>
Date:   Sun Sep 12 23:40:32 2021 -0700

    Remove a vestigial call to UsdAttribute::Get().  This may have
    been an early attempt to deal with "blocked" values, but it is
    now documented that HasAuthoredValue() will return false if
    an attribute is blocked.

    (Internal change: 2186825)

commit c1c251e6e855302dc153711c75f615784e973dcc
Author: pixar-oss <[email protected]>
Date:   Sun Sep 12 23:40:10 2021 -0700

    Updating the usdRi lights - PxParticleLight, PxVoxelLight, PxrAovLight, and PxrEnvDayLight - to inherit from NonboundableLightBase
    This just updates the schemas for these lights but not the script that generates the schemas (which is a separate task).
    The reason for updating these schemas manually is it a necessary step towards deleting the UsdLuxLight base schema.

    (Internal change: 2186771)

commit 4f4a4edbcdb9aaf0eaf96fd97b617f140dd9d377
Author: pixar-oss <[email protected]>
Date:   Sun Sep 12 23:39:49 2021 -0700

    Changing the built-in UsdLuxLights to inherit from the correct UsdLuxBoundableLightBase or UsdNonboundableLightBase instead of UsdLuxLight.
    Inherits from BoundableLightBase - CylinderLight, DiskLight, PortalLight, RectLight, and SphereLight.
    Inherits from NonboundableLightBase - DistantLight, DomeLight, and GeometryLight (deprecated)
    PluginLight is special and inherits directly from Xformable and has a built-in LightAPI.
    This change also deprecates GeometryLight.
    Note that all lights do still inherit from UsdLuxLight as the two base classes still do. This will be changed in the near future to completely remove UsdLuxLight.

    (Internal change: 2186770)

commit cdaaa65433b4a63d32c14eb35980118f7ae94023
Merge: 8bbca3646 f85afd68b
Author: pixar-oss <[email protected]>
Date:   Sun Sep 12 23:39:40 2021 -0700

    Merge pull request #1608 from marktucker/dev_instancer_update_optimization

    Improve UsdImagingDelegate performance when editing many instances of the same prototype

    (Internal change: 2186726)

commit 8bbca3646e084ae8e856cb894f8992647e64a5f4
Author: sunyab <[email protected]>
Date:   Sun Sep 12 23:39:22 2021 -0700

    [ar 2.0] Rework test to avoid path comparison issues on Windows

    The test now creates resolver context objects for comparison
    in exactly the same way as the underlying resolver
    implementation. This fixes testArURIResolver_CPP on Windows.

    (Internal change: 2186719)

commit ad29720dbb5e120e12986d8a62875da74c45b142
Author: stevelavietes <[email protected]>
Date:   Sun Sep 12 23:39:07 2021 -0700

    Removes topology caching from prim-level data source to shared amongst children of new "mesh" and "basisCurves" data sources and schemas.

    By having meshTopology and geomSubsets as children of the prim-level container data source, we had multiple existing HdSceneDelegate calls repeatedly querying for meshToplogy.
    The existing solution cached topology data sources as member variables of the prim-level HdLegacyPrimDataSource. This increased memory usage.
    By introducing an additional level of nesting ("mesh" and "basisCurves" container data sources), we can share the result of a single call to GetMeshTopology among data sources beneath.
    This lives as long as any of those data sources instances are alive rather than the lifetime of the prim.

    (Internal change: 2186684)
    (Internal change: 2186820)

commit 14e9246c222607ebfe43250a0acd259a39964181
Author: jloy <[email protected]>
Date:   Sun Sep 12 23:39:02 2021 -0700

    sdf: remove unused variable

    (Internal change: 2186636)

commit 747ca6b4eb750764b5c09fd0de9fc6de2d5155f5
Author: adamrwoodbury <[email protected]>
Date:   Sun Sep 12 23:38:33 2021 -0700

    Remove UsdGeomImageable::ComputeVisibility overload that takes a parentVisibility
    parameter.

    It was originally added in change 1930290 but was unused, outside of tests.

    (Internal change: 2186609)

commit ac104480f52172ba99c7e0aaa4cddd7cf8b934c3
Author: jloy <[email protected]>
Date:   Sun Sep 12 23:38:30 2021 -0700

    sdf: fix docs for Sdf_RelationshipTargetListEditor

    (Internal change: 2186517)

commit f48d431ab8232832f58669a43be1d0ceb7492afa
Author: sunyab <[email protected]>
Date:   Sun Sep 12 23:38:17 2021 -0700

    Workaround error when building OpenColorIO on Windows
    under the RelWithDebInfo configuration in build_usd.py.

    (Internal change: 2186512)

commit 333403fb9e1a7c15942f8f667533740cbbefa498
Author: blevin <[email protected]>
Date:   Sun Sep 12 23:37:38 2021 -0700

    Improve Storm's 1st order approximations of the basic UsdLux area lights.

    SphereLight, DiskLight, RectLight, DistantLight, and CylinderLight
    now provide an approximation of the direct lighting response of
    their path-traced area light forms, including controls for:

    - intensity, exposure, color temperature
    - diffuse and scalar multipliers
    - geometric controls, normalization, and directionality
    - cone angle and cosine focus

    Visibility on these lights also now works.

    A major difference is that previously these lights did not
    attenuate with distance; now they do.  As a result, tests
    that used UsdLux lights with Storm have been updated to
    produce similar visual results in-camera.

    (Internal change: 2186473)

commit 903cec115af663eb5c29ffb5a10e5bac0bfa6b61
Author: tallytalwar <[email protected]>
Date:   Sun Sep 12 23:35:52 2021 -0700

    Update usdRiPxr schemas to include PxrCameraProjectionAPI

    This PxrCameraProjectionAPI schema provides connectibilityBehavior and
    is auto applied (ONLY) to UsdGeomCamera. Note that other Renderman
    camera properties will be generated via usdgenschemafromsdr off the
    PRManCamera.args file in subsequent change(s).

    Concrete Light schemas are also updated to have LightAPI schema applied,
    resulting in exclusion of the properties previously implicitly added because
    "Light" inheritance.

    This change also adds a simple overview.dox describing the usdRiPxr
    codeless schemas.

    (Internal change: 2186471)

commit 4e3e575c41765119f55b268eda1fd1bebf5e3366
Author: adamrwoodbury <[email protected]>
Date:   Sun Sep 12 23:22:03 2021 -0700

    Add ComputeEffectiveVisibility and GetPurposeVisibilityAttr methods to UsdGeomImageable.

    This provides the UsdGeom reference implementation for purpose visibility.

    (Internal change: 2186434)

commit 4361f9fe40c71f0ff4c038e4c638a8299619ef57
Author: tcauchois <[email protected]>
Date:   Sun Sep 12 23:21:07 2021 -0700

    [hd] Temporarily disable scene index emulation.

    Scene index emulation is a significant new imaging feature that was enabled by changing a config flag in CL 2185534.  This CL is turning off emulation by reverting the config flag, for the sake of stability.  However, the plan is to re-enable the config flag as soon as we have a few performance fixes in.

    (Internal change: 2186347)

commit 5f05017a37cc31e6dddaf3dbf1481b2e69a7bb97
Author: tcauchois <[email protected]>
Date:   Fri Sep 3 15:38:00 2021 -0700

    [hd] GetInstanceIndices() in emulation speedups.

    - Pull a datasource access out of an inner loop.
    - Be careful not to break VtArray sharing.

    (Internal change: 2186217)

commit 3b92fbec5bdef975e56dfecc3d98ed3519671170
Author: tcauchois <[email protected]>
Date:   Fri Sep 3 15:37:42 2021 -0700

    [hd] GetInstanceIndices() speedup: cache the top level instancer topology datasource.

    This change caches the Hd_InstancerTopologyDataSource, primarily so we can cache the result of GetInstancerPrototypes and the translation of said value to a VtArray.  Those two operations can end up being surprisingly expensive, since if we do them once per prototype rprim we end up with O(#prototypes^2) SdfPath copies and some of our scenes are very highly instanced.

    Caching with an atomic guarantees we get some caching and answers are always correct, but if there's contention in _GetInstancerTopologyDataSource we can end up doing duplicate work.  In some unscientific testing, this version is a bit slower than synchronizing on a mutex (1.3x on one of our highly instanced sets); but it benefits from not having a std::mutex per prim, which would cost a lot of memory.  With this change, the runtime of GetInstanceIndices() is once again reasonable and no longer the tall nail in our traces.

    (Internal change: 2186216)

commit 2607698851e3891b28516aec20b4742daa0281d6
Author: tallytalwar <[email protected]>
Date:   Fri Sep 3 15:37:19 2021 -0700

    Import distutils.utils in the function instead of for the entire python module.

    (Internal change: 2186215)

commit 824a754331c442339d6014b287a6ebd47556aac2
Author: tallytalwar <[email protected]>
Date:   Fri Sep 3 15:37:10 2021 -0700

    Fix UsdPhysics python to work with windows py38+

    __init__.py should be using the code introduced with change 2161883

    (Internal change: 2186043)

commit b5db0b845e2dae46469cb8beebeecead79680604
Author: tcauchois <[email protected]>
Date:   Fri Sep 3 15:37:04 2021 -0700

    [hd] Speed up GetInstanceIndices in emulation.

    GetInstanceIndices was implemented naively in emulation, construcing the whole instancer topology for each prototype.  For highly branched instancers, this can explode the runtime of this call.  The fix is simply to make the pull of instance index buffers lazy (i.e. push the scene delegate access one level down in the hierarchy).

    (Internal change: 2186008)

commit 0f3143f450333feb51ce63031b739f1ca1fb2a6e
Author: pixar-oss <[email protected]>
Date:   Fri Sep 3 15:33:27 2021 -0700

    Extend check for valid lights to include non light prims with LightAPI applied in HdPrman

    (Internal change: 2186005)

commit ae24c13d1562c89ba13ecdc716ca200c885dfad0
Author: pixar-oss <[email protected]>
Date:   Fri Sep 3 15:33:22 2021 -0700

    Making the light:shaderId attribute in UsdLuxLightAPI uniform

    (Internal change: 2186003)

commit 694f04a053a258aea8cf9b6ca80e4054c7ad797d
Author: sunyab <[email protected]>
Date:   Fri Sep 3 15:33:16 2021 -0700

    Restore commented-out check now that the hang in NdrRegistry
    that required this workaround has been fixed.

    (Internal change: 2185904)

commit 6aa319ee565873b0bd29bbdcd420cfe6c349a3c6
Author: sunyab <[email protected]>
Date:   Fri Sep 3 15:27:33 2021 -0700

    Fix possible deadlock with Python GIL in NdrRegistry

    NdrRegistry::GetNodesByFamily could wind up calling into
    Python from worker threads when loading plugins. This
    would cause a deadlock on the Python GIL if this method
    were originally called from Python.

    This changes fixes the issue by releasing the GIL during
    the parallel portion of the method.

    (Internal change: 2185903)

commit 5478ea54b56f32204323e9e290ddf61c082d9940
Author: pixar-oss <[email protected]>
Date:   Fri Sep 3 15:27:23 2021 -0700

    Adding support to UsdImaging for new LightAPI features.
    1. Updated the materialParamUtils to take a list of render contexts (as provided through render delegates' GetMaterialRenderContexts) when creating a material network for a prim. For prim's that implement UsdLuxLightAPI …
marktucker added a commit to sideeffects/USD that referenced this pull request Mar 12, 2022
…rAnimationStudios#1580 (presumably by accident).

Add a FILE_SHARE_READ flag to the CreateFile call that is used to open a symlink location on Windows. This failure was manifesting as a rare intermittent failure to properly resolve a file path inside a symlinked directory on Windows when running many simultaneous processes reading and writing USD files inside this symlinked directory.
marktucker added a commit to sideeffects/USD that referenced this pull request Mar 12, 2022
…rAnimationStudios#1580 (presumably by accident).

Add a FILE_SHARE_READ flag to the CreateFile call that is used to open a symlink location on Windows. This failure was manifesting as a rare intermittent failure to properly resolve a file path inside a symlinked directory on Windows when running many simultaneous processes reading and writing USD files inside this symlinked directory.
pixar-oss added a commit that referenced this pull request Mar 31, 2022
Reapply fix from #1465 that was reverted by #1580

(Internal change: 2223690)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants