[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [61361] trunk/lib/darwin-9.x.universal/ opensubdiv: OSX/osd: add opencl capability

jens verwiebe info at jensverwiebe.de
Tue May 20 21:50:49 CEST 2014


Revision: 61361
          https://developer.blender.org/rBL61361
Author:   jensverwiebe
Date:     2014-05-20 19:50:49 +0000 (Tue, 20 May 2014)
Log Message:
-----------
OSX/osd: add opencl capability

Modified Paths:
--------------
    trunk/lib/darwin-9.x.universal/opensubdiv/lib/libosdCPU.a
    trunk/lib/darwin-9.x.universal/opensubdiv/lib/libosdGPU.a
    trunk/lib/darwin-9.x.universal/opensubdiv/lib/libosdutil.a

Added Paths:
-----------
    trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osd/clComputeContext.h
    trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osd/clComputeController.h
    trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osd/clGLVertexBuffer.h
    trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osd/clVertexBuffer.h
    trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osdutil/batchCL.h

Added: trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osd/clComputeContext.h
===================================================================
--- trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osd/clComputeContext.h	                        (rev 0)
+++ trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osd/clComputeContext.h	2014-05-20 19:50:49 UTC (rev 61361)
@@ -0,0 +1,149 @@
+//
+//   Copyright 2013 Pixar
+//
+//   Licensed under the Apache License, Version 2.0 (the "Apache License")
+//   with the following modification; you may not use this file except in
+//   compliance with the Apache License and the following modification to it:
+//   Section 6. Trademarks. is deleted and replaced with:
+//
+//   6. Trademarks. This License does not grant permission to use the trade
+//      names, trademarks, service marks, or product names of the Licensor
+//      and its affiliates, except as required to comply with Section 4(c) of
+//      the License and to reproduce the content of the NOTICE file.
+//
+//   You may obtain a copy of the Apache License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the Apache License with the above modification is
+//   distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+//   KIND, either express or implied. See the Apache License for the specific
+//   language governing permissions and limitations under the Apache License.
+//
+
+#ifndef OSD_CL_COMPUTE_CONTEXT_H
+#define OSD_CL_COMPUTE_CONTEXT_H
+
+#include "../version.h"
+
+#include "../far/subdivisionTables.h"
+#include "../far/vertexEditTables.h"
+#include "../osd/vertex.h"
+#include "../osd/nonCopyable.h"
+
+#if defined(__APPLE__)
+    #include <OpenCL/opencl.h>
+#else
+    #include <CL/opencl.h>
+#endif
+
+#include <vector>
+
+namespace OpenSubdiv {
+namespace OPENSUBDIV_VERSION {
+
+class OsdCLKernelBundle;
+
+
+class OsdCLTable : OsdNonCopyable<OsdCLTable> {
+public:
+    template<typename T>
+        OsdCLTable(const std::vector<T> &table, cl_context clContext) {
+        createCLBuffer(table.size() * sizeof(T), table.empty() ? NULL : &table[0], clContext);
+    }
+
+    virtual ~OsdCLTable();
+
+    cl_mem GetDevicePtr() const;
+
+private:
+    void createCLBuffer(size_t size, const void *ptr, cl_context clContext);
+    cl_mem _devicePtr;
+};
+
+
+class OsdCLHEditTable : OsdNonCopyable<OsdCLHEditTable> {
+public:
+    OsdCLHEditTable(const FarVertexEditTables::
+                    VertexEditBatch &batch, cl_context clContext);
+
+    virtual ~OsdCLHEditTable();
+
+    const OsdCLTable * GetPrimvarIndices() const;
+
+    const OsdCLTable * GetEditValues() const;
+
+    int GetOperation() const;
+
+    int GetPrimvarOffset() const;
+
+    int GetPrimvarWidth() const;
+
+private:
+    OsdCLTable *_primvarIndicesTable;
+    OsdCLTable *_editValuesTable;
+
+    int _operation;
+    int _primvarOffset;
+    int _primvarWidth;
+};
+
+///
+/// \brief OpenCL Refine Context
+///
+/// The OpenCL implementation of the Refine module contextual functionality. 
+///
+/// Contexts interface the serialized topological data pertaining to the 
+/// geometric primitives with the capabilities of the selected discrete 
+/// compute device.
+///
+class OsdCLComputeContext : public OsdNonCopyable<OsdCLComputeContext> {
+
+public:
+    /// Creates an OsdCLComputeContext instance
+    ///
+    /// @param subdivisionTables the FarSubdivisionTables used for this Context.
+    ///
+    /// @param vertexEditTables the FarVertexEditTables used for this Context.
+    ///
+    /// @param clContext  a valid active OpenCL context
+    ///
+    static OsdCLComputeContext * Create(FarSubdivisionTables const *subdivisionTables,
+                                        FarVertexEditTables const *vertexEditTables,
+                                        cl_context clContext);
+
+    /// Destructor
+    virtual ~OsdCLComputeContext();
+
+    /// Returns one of the vertex refinement tables.
+    ///
+    /// @param tableIndex the type of table
+    ///
+    const OsdCLTable * GetTable(int tableIndex) const;
+
+    /// Returns the number of hierarchical edit tables
+    int GetNumEditTables() const;
+
+    /// Returns a specific hierarchical edit table
+    ///
+    /// @param tableIndex the index of the table
+    ///
+    const OsdCLHEditTable * GetEditTable(int tableIndex) const;
+
+protected:
+    explicit OsdCLComputeContext(FarSubdivisionTables const *subdivisionTables,
+                                 FarVertexEditTables const *vertexEditTables,
+                                 cl_context clContext);
+
+private:
+    std::vector<OsdCLTable*> _tables;
+    std::vector<OsdCLHEditTable*> _editTables;
+};
+
+}  // end namespace OPENSUBDIV_VERSION
+using namespace OPENSUBDIV_VERSION;
+
+}  // end namespace OpenSubdiv
+
+#endif  // OSD_CL_COMPUTE_CONTEXT_H

Added: trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osd/clComputeController.h
===================================================================
--- trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osd/clComputeController.h	                        (rev 0)
+++ trunk/lib/darwin-9.x.universal/opensubdiv/include/opensubdiv/osd/clComputeController.h	2014-05-20 19:50:49 UTC (rev 61361)
@@ -0,0 +1,230 @@
+//
+//   Copyright 2013 Pixar
+//
+//   Licensed under the Apache License, Version 2.0 (the "Apache License")
+//   with the following modification; you may not use this file except in
+//   compliance with the Apache License and the following modification to it:
+//   Section 6. Trademarks. is deleted and replaced with:
+//
+//   6. Trademarks. This License does not grant permission to use the trade
+//      names, trademarks, service marks, or product names of the Licensor
+//      and its affiliates, except as required to comply with Section 4(c) of
+//      the License and to reproduce the content of the NOTICE file.
+//
+//   You may obtain a copy of the Apache License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the Apache License with the above modification is
+//   distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+//   KIND, either express or implied. See the Apache License for the specific
+//   language governing permissions and limitations under the Apache License.
+//
+
+#ifndef OSD_CL_COMPUTE_CONTROLLER_H
+#define OSD_CL_COMPUTE_CONTROLLER_H
+
+#include "../version.h"
+
+#include "../far/dispatcher.h"
+#include "../osd/clComputeContext.h"
+#include "../osd/vertexDescriptor.h"
+
+#if defined(__APPLE__)
+    #include <OpenCL/opencl.h>
+#else
+    #include <CL/opencl.h>
+#endif
+
+#include <vector>
+
+namespace OpenSubdiv {
+namespace OPENSUBDIV_VERSION {
+
+class OsdCLKernelBundle;
+
+/// \brief Compute controller for launching OpenCL subdivision kernels.
+///
+/// OsdCLComputeController is a compute controller class to launch
+/// OpenCL subdivision kernels. It requires OsdCLVertexBufferInterface
+/// as arguments of Refine function.
+///
+/// Controller entities execute requests from Context instances that they share
+/// common interfaces with. Controllers are attached to discrete compute devices
+/// and share the devices resources with Context entities.
+///
+class OsdCLComputeController {
+public:
+    typedef OsdCLComputeContext ComputeContext;
+
+    /// Constructor.
+    ///
+    /// @param clContext a valid instanciated OpenCL context
+    ///
+    /// @param queue a valid non-zero OpenCL command queue
+    ///
+    OsdCLComputeController(cl_context clContext, cl_command_queue queue);
+
+    /// Destructor.
+    ~OsdCLComputeController();
+
+    /// Launch subdivision kernels and apply to given vertex buffers.
+    ///
+    /// @param  context       the OsdCpuContext to apply refinement operations to
+    ///
+    /// @param  batches       vector of batches of vertices organized by operative 
+    ///                       kernel
+    ///
+    /// @param  vertexBuffer  vertex-interpolated data buffer
+    ///
+    /// @param  varyingBuffer varying-interpolated data buffer
+    ///
+    /// @param  vertexDesc    the descriptor of vertex elements to be refined.
+    ///                       if it's null, all primvars in the vertex buffer
+    ///                       will be refined.
+    ///
+    /// @param  varyingDesc   the descriptor of varying elements to be refined.
+    ///                       if it's null, all primvars in the varying buffer
+    ///                       will be refined.
+    ///
+    template<class VERTEX_BUFFER, class VARYING_BUFFER>
+    void Refine(ComputeContext const *context,
+                FarKernelBatchVector const &batches,
+                VERTEX_BUFFER *vertexBuffer,
+                VARYING_BUFFER *varyingBuffer,
+                OsdVertexBufferDescriptor const *vertexDesc=NULL,
+                OsdVertexBufferDescriptor const *varyingDesc=NULL) {
+
+        if (batches.empty()) return;
+
+        bind(vertexBuffer, varyingBuffer, vertexDesc, varyingDesc);
+
+        FarDispatcher::Refine(this, context, batches, /*maxlevel*/-1);
+
+        unbind();
+    }
+
+    /// Launch subdivision kernels and apply to given vertex buffers.
+    ///
+    /// @param  context       the OsdCpuContext to apply refinement operations to
+    ///
+    /// @param  batches       vector of batches of vertices organized by operative 
+    ///                       kernel
+    ///
+    /// @param  vertexBuffer  vertex-interpolated data buffer
+    ///
+    template<class VERTEX_BUFFER>
+    void Refine(ComputeContext const *context,
+                FarKernelBatchVector const &batches,
+                VERTEX_BUFFER *vertexBuffer) {
+        Refine(context, batches, vertexBuffer, (VERTEX_BUFFER*)NULL);
+    }
+
+    /// Waits until all running subdivision kernels finish.
+    void Synchronize();
+
+    /// Returns CL context
+    cl_context GetContext() const { return _clContext; }
+
+    /// Returns CL command queue
+    cl_command_queue GetCommandQueue() const { return _clQueue; }
+
+protected:
+    friend class FarDispatcher;
+
+    void ApplyBilinearFaceVerticesKernel(FarKernelBatch const &batch, ComputeContext const *context) const;
+
+    void ApplyBilinearEdgeVerticesKernel(FarKernelBatch const &batch, ComputeContext const *context) const;
+

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list