smallGame

Member
  • Content count

    78
  • Joined

  • Last visited

Community Reputation

211 Neutral

About smallGame

  • Rank
    Member
  1.   ok , I tried it does compile!! Thanks   When I run it on Nvidia hardware it crashes, so now I need someone to look at it which has an Nvidia hardware ...
  2. Thanks for your answer, yes but I am block before that, I cannot compile my program because I don't know clGetDeviceIDsFromD3D11NV_fn which is in the Nvdia SDK.   So yes that the idea, I can even use the GetPlatformInfo or GetDeviceInfo to know which extension I can use.   Even if I buy a new PC with Nvidia hardware my program won't compile anymore because I won't have AMD SDK installed on it.   So I come back with my initial question:  What's happen if I install both graphics card SDK on a same PC ?? Can I really do that ?   I guess it's my only solution...
  3. Hi,   I want to use the interoperability between OpenCL and DirectX11. I have a Radeon graphics card, and I want to run my .exe on an Nvidia card.   Is is it possible ?   So far I use this pointer function type   clGetDeviceIDsFromD3D11KHR_fn avaible in the AMD SDK but I guess I need to use this type clGetDeviceIDsFromD3D11NV_fn available in the Nvidia SDK.   I guess I am going to do something wrong if I install the Nvidia SDK https://developer.nvidia.com/cuda-toolkit-31-downloads with a Radeon card.   Any solution for me ?   thanks,
  4. Particle System Vidoes

    I replied this private message that could be interested :     Thanks for feedback !     I am using openCL to compute the physics simulation. You can use my physics library with any renderer, even mine if you want. I use DirectX11.   No     Physics particles simulation library is free, my renderer is free, the framework to have all demos and sample is also free I could send you a nice package where you should have only to press F5 to have it working... If you need additional feature, manage other collision shape, or mesh, I  could develop them (also for free) I have also some limitations that I could explain to you, and I also could remove them (also for free )
  5. Particle System Vidoes

    Hi,   I d like to share my youtube channel, with some particles using my library. performance are in the videos description:   http://www.youtube.com/user/uuuq78/videos     You can also look at the interface I provide : #ifndef PHYSICS_PARTICLE #define PHYSICS_PARTICLE #ifdef EXPORT_DLL #define MYPROJECT_API __declspec(dllexport) #else #define MYPROJECT_API __declspec(dllimport) #endif struct ID3D11Device; struct ID3D11Buffer; // A vector 3 struct MYPROJECT_API vrVec3 { float x, y, z; }; // A vector 4 struct MYPROJECT_API vrVec4 : public vrVec3 { float w; }; // An Axis Aligned Bounding Volume struct MYPROJECT_API vrAabb { vrVec4 m_Min; vrVec4 m_Max; }; // A sphere struct MYPROJECT_API vrSphere { vrVec3 m_Position; float m_Radius; }; // A distance constraint between two paricles struct MYPROJECT_API vrSpring { int m_ParticleIndex1; int m_ParticleIndex2; float m_Distance; int m_Pad; vrSpring():m_Pad(0) {} }; // A particle accelerator // Type 0 is a force field, // Type 1 is a simple force, that uses only the directionvector struct MYPROJECT_API vrAccelerator { enum { FORCE_FIELD = 0, SIMPLE_FORCE = 1, ACCELRATOR_TYPES_COUNT}; vrVec4 m_Position; vrVec4 m_Direction; float m_Radius; unsigned int m_Type; }; class MYPROJECT_API PhysicsParticle { public: PhysicsParticle(); ~PhysicsParticle(); // Particles positions accesor vrVec4 *GetParticlePositions() const; vrVec4 *GetPreviousPositions() const; int GetParticlesCount() const; // Setters void SetParticlesMass(float mass); void SetParticlesGazConstant(float mass); void SetParticlesViscosity(float viscosity); void SetParticlesAcceleration(const vrVec4 &acceleration); void SetDamping(float damping); // Getters float GetParticlesMass() const; float GetParticlesGazConstant() const; float GetParticlesViscosity() const; // Initialize particles start position void Initialize(vrVec4 *positions,int positionsCount); // Intialize openCL device void InitializeOpenCL( ID3D11Device *d3D11Device = 0 , ID3D11Buffer *d3D11buffer = 0); // Initialize data to the device void InitializeOpenClData(); // Physics step void Simulate(); // Release allocated memory void Release(); // Dynamic grid used to test or to get neighbors information void CreateGrid(vrVec4 *positions, int positionsCount); void CreateGrid(); int GetNeighbors(int currentIndex, int *neighbors, int neighborsMaxCount); // Add collision geometry void AddInsideAabb(const vrAabb& aabb); void AddOutsideAabb(const vrAabb& aabb); void AddInsideSphere(const vrSphere& sphere); void AddOutsideSphere(const vrSphere& sphere); // Accesor to modify them, the returned ponters could change when // collision geometries are added vrAabb *GetInsideAabbs(); vrSphere *GetOutsideSpheres(); int GetInsideAabbsCount() const; int GetOutsideSpheresCount() const; // Add a constraint between two particles void AddSpring(const vrSpring& spring); // Accelerators // Add an accelerator, to use to setup a force field or simple gravity void AddAccelerator(const vrAccelerator & accelerator); // Removes all accelerator void ClearAccelerators(); void UpdateAccelerator(int index, const vrAccelerator& accelerator); // Physcal parameter // Grid and sph void SetEnableGridOnGPU(bool isCreatingGridOnGPU); void SetEnableSPHAndIntegrateOnGPU(bool sphAndIntegrateOnGPU); void SetEnableCollisionOnGPU(bool collisionOnGPU); void SetEnableSpringOnGPU(bool springOnGPU); void SetEnableAcceleratorOnGPU(bool acceleratorOnGPU); // Cloth only for springs void SetClothCount(int clothCount); // Enabling interoperability void SetIsUsingInteroperability(bool isUsingInteroperability); bool IsUsingInteroperability() const; // Running physics on the CPU, GPU is used by default void SetIsUsingCPU(bool isUsingCPU); }; #endif // PHYSICS_PARTICLE If someone is interested to try it let's me know...
  6. Particles engine interface feedback

      Good point :)
  7. Particles engine interface feedback

    Thanks for your feedback,       Internally my data are SIMD friendly, I use SIMD vector, and allocations are aligned. I copy the given vectors, the user can delete or do whatever with the given data I don't keep any reference on it. Anyway it won't changed anything because internally I am using float4 from openCL. The use of the  SetIsUsingCPU (true); function also use openCL.   Why are you telling me about SIMD ? Do you think my perfs are terrible ?       Yes it is. And you point out what is really bad; at this stage I only handle one set of particles, I have to remove this limitation...       The indices are referencing the particles positions set  by: Initialize(vrVec4 *positions, int positionsCount); 0 -> first particle position. Not sure to see what it is not clear there. but for sure there are some missing comments. By the way I have done some other tests and I solve about 24 000 constraints (vrSpring) in 0.17ms, by removing a CPU transfer...         Yes you're completely right I have a Radeon serie 79 something.I also have to use a a real profiler maybe. I am using my own at this stage...     Thanks for your comments, and if you want to try it I can give it. I have a particle renderer, this particle interface and a framework which has a keyboard, a mouse control, a basic camera, and that use the physics output to give it to the renderer. I also have the different sample we can see on my Youtube channel.        
  8.  Hi,   I started to write a physics particle engine, I still have to finish a lot of stuff before releasing the 0.1 version.   I d like to have some feedback on the interface I provide at this stage. #ifndef PHYSICS_PARTICLE #define PHYSICS_PARTICLE #ifdef EXPORT_DLL #define MYPROJECT_API __declspec(dllexport) #else #define MYPROJECT_API __declspec(dllimport) #endif struct ID3D11Device; struct ID3D11Buffer; // A vector 3 struct MYPROJECT_API vrVec3 { float x, y, z; }; // A vector 4 struct MYPROJECT_API vrVec4 : public vrVec3 { float w; }; // An Axis Aligned Bounding Volume struct MYPROJECT_API vrAabb { vrVec4 m_Min; vrVec4 m_Max; }; // A sphere struct MYPROJECT_API vrSphere { vrVec3 m_Position; float m_Radius; }; // A distance constraint between two paricles struct MYPROJECT_API vrSpring { int m_ParticleIndex1; int m_ParticleIndex2; float m_Distance; int m_Pad; vrSpring():m_Pad(0) {} }; // A particle accelerator // Type 0 is a force field, // Type 1 is a simple force, that uses only the directionvector struct MYPROJECT_API vrAccelerator { enum { FORCE_FIELD = 0, SIMPLE_FORCE = 1, ACCELRATOR_TYPES_COUNT}; vrVec4 m_Position; vrVec4 m_Direction; float m_Radius; unsigned int m_Type; }; class MYPROJECT_API PhysicsParticle { public: PhysicsParticle(); ~PhysicsParticle(); // Particles positions accesor vrVec4 *GetParticlePositions() const; vrVec4 *GetPreviousPositions() const; int GetParticlesCount() const; // Setters void SetParticlesMass(float mass); void SetParticlesGazConstant(float mass); void SetParticlesViscosity(float viscosity); void SetParticlesAcceleration(const vrVec4 &acceleration); void SetDamping(float damping); // Getters float GetParticlesMass() const; float GetParticlesGazConstant() const; float GetParticlesViscosity() const; // Initialize particles start position void Initialize(vrVec4 *positions,int positionsCount); // Intialize openCL device void InitializeOpenCL( ID3D11Device *d3D11Device = 0 , ID3D11Buffer *d3D11buffer = 0); // Initialize data to the device void InitializeOpenClData(); // Physics step void Simulate(); // Release allocated memory void Release(); // Dynamic grid used to test or to get neighbors information void CreateGrid(vrVec4 *positions, int positionsCount); void CreateGrid(); int GetNeighbors(int currentIndex, int *neighbors, int neighborsMaxCount); // Add collision geometry void AddInsideAabb(const vrAabb& aabb); void AddOutsideAabb(const vrAabb& aabb); void AddInsideSphere(const vrSphere& sphere); void AddOutsideSphere(const vrSphere& sphere); // Accesor to modify them, the returned ponters could change when // collision geometries are added vrAabb *GetInsideAabbs(); vrSphere *GetOutsideSpheres(); int GetInsideAabbsCount() const; int GetOutsideSpheresCount() const; // Add a constraint between two particles void AddSpring(const vrSpring& spring); // Accelerators // Add an accelerator, to use to setup a force field or simple gravity void AddAccelerator(const vrAccelerator & accelerator); // Removes all accelerator void ClearAccelerators(); void UpdateAccelerator(int index, const vrAccelerator& accelerator); // Physcal parameter // Grid and sph void SetEnableGridOnGPU(bool isCreatingGridOnGPU); void SetEnableSPHAndIntegrateOnGPU(bool sphAndIntegrateOnGPU); void SetEnableCollisionOnGPU(bool collisionOnGPU); void SetEnableSpringOnGPU(bool springOnGPU); void SetEnableAcceleratorOnGPU(bool acceleratorOnGPU); // Cloth only for springs void SetClothCount(int clothCount); // Enabling interoperability void SetIsUsingInteroperability(bool isUsingInteroperability); bool IsUsingInteroperability() const; // Running physics on the CPU, GPU is used by default void SetIsUsingCPU(bool isUsingCPU); }; #endif // PHYSICS_PARTICLE I also have a Youtube channel where you can see some samples : http://www.youtube.com/user/uuuq78/videos perf in description.   Cheers,
  9. Need help with forward declarations C++

    Hi,   #include "track.h"  // Include   class track; // forward declaration You have to split in two files like you ve just tried. In brick.h you put the forward declaration and in brick.cpp you include brick.h and track.h. Then everything should work.
  10. Compression in HLSL

    Hi,   Thanks for your help ! Everything is working perfectly ! So it was an easy question I miss-read the doc ;)   see you
  11. Compression in HLSL

    Hi Hodgman,   I am using shader model 4 and 5, I don't have any restriction...   I saw you are helping a lot of people on this forum, so I guess I ll have a solution quite soon :) . I am really wondering why talented people like you spend so much time to help people stuck like me :).   Thanks,
  12. Hi,   I want to put 4 values of 256 bits in a float and read these 4 values in HLSL. Do you know if it is possible, in c++ I see several way to do that by using union or reinterpret_cast. But both are not avaible in HLSL:   To be clear I wrote a simple example : // 4 values in c++ char v1 = 1, v2 = 2, v3 = 3, v4 = 4; // Store them in C++ int store = (v1 << 0) | (v2 << 8) | (v3 << 16) | (v4 << 24); // Put them in a float float valueStored = *reinterpret_cast<float*>(&store); // Now I want to use these values // Oh no I cannot use reinterpret_cast!! :( in HLSL int uncompress = *reinterpret_cast<int*>(&valueStored); // Read the value char o1, o2, o3, o4; o1 = (char) uncompress & 0xFF; o2 = (char)(uncompress >> 8) & 0xFF; o3 = (char)(uncompress >> 16) & 0xFF; o4 = (char)(uncompress >> 24) & 0xFF; I want to use a float and not an int because I want to send a float4 to the GPU, with 3 floats and 1 float with 4 values.   Thanks for your help,   cheers,
  13. Interoperability openCL DirectX11

    I don't know exactly why I used openCL, I wanted to use this tech like a aim. I was thinking to port my code from openCL to Direct Compute but then I thought it will be easier to integrate the interoperability. And I think there is something really good with openCL, it is scalable even on CPU, so I don't have to do some multi-threading , openCL will do it for me. The other good thing with openCL it is that is portable. I also wanted to integrate my stuff in a friend engine which is in OpenGL on i Platform.   So maybe now you d like to know why I used DirectX11 :) I wanted also used this tech because it was used in my job, and I knew some HLSL.   I don't have any screen shot but I created a Youtube channel : http://www.youtube.com/user/uuuq78/videos Galaxy is the one I was talking about. In the video description I put the benchmarks in ms. I will update my videos and benchmarks with the interoperability when I will have integrated it correctly.
  14. Interoperability openCL DirectX11

    Thanks a lot !! This stuff is amazing, I was simulating 1 million force field particles at 30 FPS, now at more than 400 FPS :) I was expecting a big gain because of all return tickets I was paying from CPU to GPU, now there is none !
  15. Hi,   My problem is at the compilation stage, or even before :   I don't have the functions : clGetDeviceIDsFromD3D11KHR, ...etc in my <CL/cl_d3d11.h>, instead I have this function pointer clGetDeviceIDsFromD3D11KHR_fn.   I have the "cl_khr_d3d11_sharing" strng in my platform extension information.   I tried to add #pragma OPENCL EXTENSION cl_khr_d3d11_sharing : enable, but doesn't work.   So if you have any idea, or if you already used it I am really interested.   Thanks,