particle_oriented_animated_quad_vbuf_pixel_shader: use drm_radeon_cs2
This commit is contained in:
parent
1ec48e6323
commit
e622d769a4
@ -33,6 +33,8 @@
|
|||||||
#define TEXTURE_TILE_SHADER 3
|
#define TEXTURE_TILE_SHADER 3
|
||||||
#define PARTICLE_PHYSICS_SHADER 4
|
#define PARTICLE_PHYSICS_SHADER 4
|
||||||
|
|
||||||
|
#define PARTICLE_POSITION_RELOC_INDEX 5
|
||||||
|
|
||||||
const char * vertex_shader_paths[] = {
|
const char * vertex_shader_paths[] = {
|
||||||
"clear.vs.bin",
|
"clear.vs.bin",
|
||||||
"particle_plane_fan.vs.bin",
|
"particle_plane_fan.vs.bin",
|
||||||
@ -542,9 +544,7 @@ void _3d_particle(const shaders& shaders,
|
|||||||
|
|
||||||
int offset = state.length * 4 * 2;
|
int offset = state.length * 4 * 2;
|
||||||
int ix = 0;
|
int ix = 0;
|
||||||
|
|
||||||
particle_position * pos = state.position_output();
|
particle_position * pos = state.position_output();
|
||||||
|
|
||||||
for (int i = 0; i < state.length; i++) {
|
for (int i = 0; i < state.length; i++) {
|
||||||
const vec3& position = pos[i].position;
|
const vec3& position = pos[i].position;
|
||||||
for (int j = 0; j < 4; j++) {
|
for (int j = 0; j < 4; j++) {
|
||||||
@ -561,6 +561,12 @@ void _3d_particle(const shaders& shaders,
|
|||||||
_3d_particle_inner(state.length, offset);
|
_3d_particle_inner(state.length, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _copy_to_vertexbuffer(const shaders& shaders,
|
||||||
|
const floatbuffer_state& state)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int indirect_buffer(const shaders& shaders,
|
int indirect_buffer(const shaders& shaders,
|
||||||
const floatbuffer_state& state,
|
const floatbuffer_state& state,
|
||||||
//const particle * particles,
|
//const particle * particles,
|
||||||
@ -576,6 +582,8 @@ int indirect_buffer(const shaders& shaders,
|
|||||||
|
|
||||||
ib_generic_initialization();
|
ib_generic_initialization();
|
||||||
|
|
||||||
|
_copy_to_vertexbuffer(shaders, state);
|
||||||
|
|
||||||
T0V(RB3D_BLENDCNTL, 0);
|
T0V(RB3D_BLENDCNTL, 0);
|
||||||
T0V(RB3D_ABLENDCNTL, 0);
|
T0V(RB3D_ABLENDCNTL, 0);
|
||||||
|
|
||||||
@ -699,7 +707,7 @@ int init_particles_vertexbuffer(int fd, int particles_length, float ** ptr_out)
|
|||||||
const int vertex_count = 4;
|
const int vertex_count = 4;
|
||||||
|
|
||||||
const int size = particles_length * vertex_count * 2 * (sizeof (float))
|
const int size = particles_length * vertex_count * 2 * (sizeof (float))
|
||||||
+ particles_length * vertex_count * 2 * (sizeof (float));
|
+ particles_length * vertex_count * 3 * (sizeof (float));
|
||||||
|
|
||||||
void * ptr;
|
void * ptr;
|
||||||
int handle = create_buffer(fd, size, &ptr);
|
int handle = create_buffer(fd, size, &ptr);
|
||||||
@ -810,9 +818,10 @@ int _floatbuffer(const shaders& shaders,
|
|||||||
/*
|
/*
|
||||||
float vx = ((float)viewport_width) * 0.5f;
|
float vx = ((float)viewport_width) * 0.5f;
|
||||||
float vy = ((float)viewport_height) * 0.5f;
|
float vy = ((float)viewport_height) * 0.5f;
|
||||||
*/
|
|
||||||
float tx = 0.5f / ((float)texture_width);
|
float tx = 0.5f / ((float)texture_width);
|
||||||
float ty = 0.5f / ((float)texture_height);
|
float ty = 0.5f / ((float)texture_height);
|
||||||
|
*/
|
||||||
|
/*
|
||||||
printf("tx ty: %f %f\n", tx, ty);
|
printf("tx ty: %f %f\n", tx, ty);
|
||||||
|
|
||||||
printf("relocs: %d %d %d %d\n",
|
printf("relocs: %d %d %d %d\n",
|
||||||
@ -820,6 +829,7 @@ int _floatbuffer(const shaders& shaders,
|
|||||||
input_reloc_index1,
|
input_reloc_index1,
|
||||||
output_reloc_index0,
|
output_reloc_index0,
|
||||||
output_reloc_index1);
|
output_reloc_index1);
|
||||||
|
*/
|
||||||
|
|
||||||
int macrotile = 0;
|
int macrotile = 0;
|
||||||
int microtile = 0;
|
int microtile = 0;
|
||||||
@ -1143,13 +1153,22 @@ int main()
|
|||||||
theta,
|
theta,
|
||||||
vertexbuffer_ptr);
|
vertexbuffer_ptr);
|
||||||
|
|
||||||
int ret = drm_radeon_cs(fd,
|
assert(textures_length == 2);
|
||||||
colorbuffer_handle[colorbuffer_ix],
|
int particle_position_handle = state.handles[fb_output + 0];
|
||||||
zbuffer_handle,
|
int handles[] = {
|
||||||
vertexbuffer_handle,
|
colorbuffer_handle[colorbuffer_ix], // 0
|
||||||
texturebuffer_handle,
|
zbuffer_handle, // 1
|
||||||
textures_length,
|
vertexbuffer_handle, // 2
|
||||||
ib_dwords);
|
texturebuffer_handle[0], // 3
|
||||||
|
texturebuffer_handle[1], // 4
|
||||||
|
particle_position_handle, // 5
|
||||||
|
};
|
||||||
|
int handles_length = (sizeof (handles)) / (sizeof (handles[0]));
|
||||||
|
|
||||||
|
int ret = drm_radeon_cs2(fd,
|
||||||
|
handles,
|
||||||
|
handles_length,
|
||||||
|
ib_dwords);
|
||||||
|
|
||||||
if (ret == -1)
|
if (ret == -1)
|
||||||
break;
|
break;
|
||||||
@ -1162,28 +1181,6 @@ int main()
|
|||||||
colorbuffer_ix = (colorbuffer_ix + 1) & 1;
|
colorbuffer_ix = (colorbuffer_ix + 1) & 1;
|
||||||
|
|
||||||
state.flip = (state.flip + 1) & 1;
|
state.flip = (state.flip + 1) & 1;
|
||||||
|
|
||||||
//
|
|
||||||
// update particles
|
|
||||||
//
|
|
||||||
/*
|
|
||||||
for (int i = 0; i < particles_length; i++) {
|
|
||||||
if (particles[i].age <= 0) {
|
|
||||||
particles[i].age += max_age;
|
|
||||||
reset_particle(particles[i]);
|
|
||||||
} else {
|
|
||||||
particles[i].age -= 0.01f;
|
|
||||||
particles[i].position += vec3(particles[i].velocity.x * 0.9f,
|
|
||||||
particles[i].velocity.y * 5.0f,
|
|
||||||
particles[i].velocity.z * 0.9f);
|
|
||||||
particles[i].velocity += vec3(0, -0.04, 0);
|
|
||||||
if (particles[i].position.y < 0) {
|
|
||||||
particles[i].position.y = fabsf(particles[i].position.y);
|
|
||||||
particles[i].velocity.y *= -0.6f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user