[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