diff --git a/drm/matrix.cpp b/drm/matrix.cpp index d526177..a67cad0 100644 --- a/drm/matrix.cpp +++ b/drm/matrix.cpp @@ -1018,7 +1018,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/matrix_cubesphere.cpp b/drm/matrix_cubesphere.cpp index 31d6c62..9d00113 100644 --- a/drm/matrix_cubesphere.cpp +++ b/drm/matrix_cubesphere.cpp @@ -1105,7 +1105,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/matrix_cubesphere_specular.cpp b/drm/matrix_cubesphere_specular.cpp index edaa360..15591c9 100644 --- a/drm/matrix_cubesphere_specular.cpp +++ b/drm/matrix_cubesphere_specular.cpp @@ -1126,7 +1126,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/matrix_cubesphere_specular_suzanne.cpp b/drm/matrix_cubesphere_specular_suzanne.cpp index 0d698c2..282af48 100644 --- a/drm/matrix_cubesphere_specular_suzanne.cpp +++ b/drm/matrix_cubesphere_specular_suzanne.cpp @@ -1188,7 +1188,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture.c b/drm/texture.c index b1e3e82..3cd8571 100644 --- a/drm/texture.c +++ b/drm/texture.c @@ -646,7 +646,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture_blur.c b/drm/texture_blur.c index e252340..5cdc078 100644 --- a/drm/texture_blur.c +++ b/drm/texture_blur.c @@ -663,7 +663,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_128x128_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_128x128_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture_blur_combined.c b/drm/texture_blur_combined.c index 9dd1f4a..d12d051 100644 --- a/drm/texture_blur_combined.c +++ b/drm/texture_blur_combined.c @@ -707,7 +707,7 @@ int main() intermediate_handle[1] = create_colorbuffer(fd, texture_size, NULL); { - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { ((uint32_t*)texturebuffer_ptr)[i] = ((uint32_t*)texture_buf)[i]; diff --git a/drm/texture_cube.c b/drm/texture_cube.c index 716285b..13b4ed2 100644 --- a/drm/texture_cube.c +++ b/drm/texture_cube.c @@ -765,7 +765,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture_cube_clear.c b/drm/texture_cube_clear.c index dce5d88..f3dec3b 100644 --- a/drm/texture_cube_clear.c +++ b/drm/texture_cube_clear.c @@ -935,7 +935,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture_cube_clear_zwrite.c b/drm/texture_cube_clear_zwrite.c index d3d5289..fc0abbe 100644 --- a/drm/texture_cube_clear_zwrite.c +++ b/drm/texture_cube_clear_zwrite.c @@ -991,7 +991,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture_cube_clear_zwrite_vertex_shader.c b/drm/texture_cube_clear_zwrite_vertex_shader.c index 93f5142..fd1f6db 100644 --- a/drm/texture_cube_clear_zwrite_vertex_shader.c +++ b/drm/texture_cube_clear_zwrite_vertex_shader.c @@ -981,7 +981,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture_cube_clear_zwrite_vertex_shader_aos.c b/drm/texture_cube_clear_zwrite_vertex_shader_aos.c index 2ea71be..98e2f2d 100644 --- a/drm/texture_cube_clear_zwrite_vertex_shader_aos.c +++ b/drm/texture_cube_clear_zwrite_vertex_shader_aos.c @@ -1040,7 +1040,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture_cube_clear_zwrite_vertex_shader_optimize.c b/drm/texture_cube_clear_zwrite_vertex_shader_optimize.c index e11dafd..321c092 100644 --- a/drm/texture_cube_clear_zwrite_vertex_shader_optimize.c +++ b/drm/texture_cube_clear_zwrite_vertex_shader_optimize.c @@ -981,7 +981,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture_cube_clear_zwrite_vertex_shader_optimize_zscale.c b/drm/texture_cube_clear_zwrite_vertex_shader_optimize_zscale.c index a77b145..80030c7 100644 --- a/drm/texture_cube_clear_zwrite_vertex_shader_optimize_zscale.c +++ b/drm/texture_cube_clear_zwrite_vertex_shader_optimize_zscale.c @@ -990,7 +990,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture_cube_warping.c b/drm/texture_cube_warping.c index f7683d1..43e9394 100644 --- a/drm/texture_cube_warping.c +++ b/drm/texture_cube_warping.c @@ -996,7 +996,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/drm/texture_dual.c b/drm/texture_dual.c index 319da69..e5d27ab 100644 --- a/drm/texture_dual.c +++ b/drm/texture_dual.c @@ -699,10 +699,10 @@ int main() const int texture_size = 1024 * 1024 * 4; texturebuffer_handle[0] = load_texture(fd, - "../texture/butterfly_1024x1024_argb8888.data", + "../texture/butterfly_1024x1024_rgba8888.data", texture_size); texturebuffer_handle[1] = load_texture(fd, - "../texture/bird_1024x1024_argb8888.data", + "../texture/bird_1024x1024_rgba8888.data", texture_size); { // clear colorbuffer diff --git a/drm/zbuffer_test.c b/drm/zbuffer_test.c index a61b005..de66043 100644 --- a/drm/zbuffer_test.c +++ b/drm/zbuffer_test.c @@ -972,7 +972,7 @@ int main() assert(texturebuffer_ptr != MAP_FAILED); // copy texture - void * texture_buf = read_file("../texture/butterfly_1024x1024_argb8888.data"); + void * texture_buf = read_file("../texture/butterfly_1024x1024_rgba8888.data"); assert(texture_buf != NULL); for (int i = 0; i < texture_size / 4; i++) { diff --git a/regs/assembler/fs/tex_validator.py b/regs/assembler/fs/tex_validator.py index 8c929d0..3c12341 100644 --- a/regs/assembler/fs/tex_validator.py +++ b/regs/assembler/fs/tex_validator.py @@ -55,7 +55,7 @@ def validate_swizzle(token): return tuple(swizzles[c] for c in token.lexeme) def validate_mask_swizzle(token) -> tuple[AlphaMask, RGBMask]: - argb_masks = OrderedDict([ + rgba_masks = OrderedDict([ (b"none" , (AlphaMask.NONE, RGBMask.NONE)), (b"r" , (AlphaMask.NONE, RGBMask.R)), (b"g" , (AlphaMask.NONE, RGBMask.G)), @@ -72,9 +72,9 @@ def validate_mask_swizzle(token) -> tuple[AlphaMask, RGBMask]: (b"gba" , (AlphaMask.A, RGBMask.GB)), (b"rgba" , (AlphaMask.A, RGBMask.RGB)), ]) - if token.lexeme not in argb_masks: + if token.lexeme not in rgba_masks: raise ValidatorError("invalid destination mask", token) - return argb_masks[token.lexeme] + return rgba_masks[token.lexeme] def validate_masks(ins_ast: parser.TEXInstruction): addresses = set() diff --git a/src/float_colorbuffer.cpp b/src/float_colorbuffer.cpp new file mode 100644 index 0000000..6d0415b --- /dev/null +++ b/src/float_colorbuffer.cpp @@ -0,0 +1,115 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "r500/3d_registers.h" +#include "r500/3d_registers_undocumented.h" +#include "r500/3d_registers_bits.h" +#include "r500/indirect_buffer.h" +#include "r500/shader.h" +#include "r500/display_controller.h" + +#include "drm/buffer.h" +#include "drm/drm.h" + +#include "math/float_types.hpp" +#include "math/transform.hpp" +#include "math/constants.hpp" + +#include "../model/model2.h" +#include "../model/plane.h" + +#define CLEAR_SHADER 0 +#define PLANE_SHADER 1 +#define PARTICLE_SHADER 2 +#define TEXTURE_TILE_SHADER 3 + +const char * vertex_shader_paths[] = { + "clear.vs.bin", +}; +const int vertex_shader_paths_length = (sizeof (vertex_shader_paths)) / (sizeof (vertex_shader_paths[0])); +const char * fragment_shader_paths[] = { + "clear.fs.bin", +}; +const int fragment_shader_paths_length = (sizeof (fragment_shader_paths)) / (sizeof (fragment_shader_paths[0])); + +#define PARTICLE_TEXTURE 0 + +const char * textures[] = { + "../texture/particle_32x32_rgba8888.data", +}; +const int textures_length = (sizeof (textures)) / (sizeof (textures[0])); + +struct shaders { + struct shader_offset * vertex; + struct shader_offset * fragment; + int vertex_length; + int fragment_length; +}; + +int main() +{ + struct shaders shaders = { + .vertex = load_shaders(vertex_shader_paths, vertex_shader_paths_length), + .fragment = load_shaders(fragment_shader_paths, fragment_shader_paths_length), + .vertex_length = vertex_shader_paths_length, + .fragment_length = fragment_shader_paths_length, + }; + + void * rmmio = map_pci_resource2(); + + int fd = open("/dev/dri/card0", O_RDWR | O_CLOEXEC); + assert(fd != -1); + + const int colorbuffer_size = 1600 * 1200 * 4; + int colorbuffer_handle[2]; + int zbuffer_handle; + int * texturebuffer_handle; + int flush_handle; + + void * colorbuffer_ptr[2]; + void * zbuffer_ptr; + + // colorbuffer + colorbuffer_handle[0] = create_buffer(fd, colorbuffer_size, &colorbuffer_ptr[0]); + colorbuffer_handle[1] = create_buffer(fd, colorbuffer_size, &colorbuffer_ptr[1]); + zbuffer_handle = create_buffer(fd, colorbuffer_size, &zbuffer_ptr); + flush_handle = create_flush_buffer(fd); + texturebuffer_handle = load_textures(fd, textures, textures_length); + + fprintf(stderr, "colorbuffer handle[0] %d\n", colorbuffer_handle[0]); + fprintf(stderr, "colorbuffer handle[1] %d\n", colorbuffer_handle[1]); + fprintf(stderr, "zbuffer handle %d\n", zbuffer_handle); + + int colorbuffer_ix = 0; + float theta = PI * 0.5; + + while (true) { + int ib_dwords = indirect_buffer(shaders, theta); + + drm_radeon_cs(fd, + colorbuffer_handle[colorbuffer_ix], + zbuffer_handle, + flush_handle, + texturebuffer_handle, + textures_length, + ib_dwords); + + primary_surface_address(rmmio, colorbuffer_ix); + + // next state + theta += 0.01f; + colorbuffer_ix = (colorbuffer_ix + 1) & 1; + } + + close(fd); +} diff --git a/src/matrix_cubesphere.cpp b/src/matrix_cubesphere.cpp index 9cbcc8b..41a6de3 100644 --- a/src/matrix_cubesphere.cpp +++ b/src/matrix_cubesphere.cpp @@ -545,7 +545,7 @@ int indirect_buffer(shaders& shaders, } const char * textures[] = { - "../texture/butterfly_1024x1024_argb8888.data", + "../texture/butterfly_1024x1024_rgba8888.data", }; const int textures_length = (sizeof (textures)) / (sizeof (textures[0])); diff --git a/src/matrix_cubesphere_tiled.cpp b/src/matrix_cubesphere_tiled.cpp index f1a2ec4..b10feed 100644 --- a/src/matrix_cubesphere_tiled.cpp +++ b/src/matrix_cubesphere_tiled.cpp @@ -722,7 +722,7 @@ int _tile_texture(const shaders& shaders, } const char * textures[] = { - "../texture/butterfly_1024x1024_argb8888.data", + "../texture/butterfly_1024x1024_rgba8888.data", }; const int textures_length = (sizeof (textures)) / (sizeof (textures[0])); diff --git a/texture/bird_1024x1024_argb8888.data b/texture/bird_1024x1024_rgba8888.data similarity index 100% rename from texture/bird_1024x1024_argb8888.data rename to texture/bird_1024x1024_rgba8888.data diff --git a/texture/butterfly_1024x1024_argb8888.data b/texture/butterfly_1024x1024_rgba8888.data similarity index 100% rename from texture/butterfly_1024x1024_argb8888.data rename to texture/butterfly_1024x1024_rgba8888.data diff --git a/texture/butterfly_128x128_argb8888.data b/texture/butterfly_128x128_rgba8888.data similarity index 100% rename from texture/butterfly_128x128_argb8888.data rename to texture/butterfly_128x128_rgba8888.data