#pragma once #include namespace holly::core::parameter { enum struct volume_sel { one_volume, two_volumes }; using volume_sel::one_volume; using volume_sel::two_volumes; enum struct offset_sel { offset, non_offset }; using offset_sel::offset; using offset_sel::non_offset; enum struct texture_sel { texture, non_texture }; using texture_sel::texture; using texture_sel::non_texture; template struct vertex; template <> struct vertex { float x; float y; float z; uint32_t base_color; }; template <> struct vertex { float x; float y; float z; struct { uint32_t base_color; } volume[2]; }; template <> struct vertex { float x; float y; float z; uint32_t base_color; uint32_t offset_color; }; template <> struct vertex { float x; float y; float z; struct { uint32_t base_color; uint32_t offset_color; } volume[2]; }; template <> struct vertex { float x; float y; float z; float u; float v; uint32_t base_color; }; template <> struct vertex { float x; float y; float z; struct { float u; float v; uint32_t base_color; } volume[2]; }; template <> struct vertex { float x; float y; float z; float u; float v; uint32_t base_color; uint32_t offset_color; }; template <> struct vertex { float x; float y; float z; struct { float u; float v; uint32_t base_color; uint32_t offset_color; } volume[2]; }; template struct isp_tsp_parameter; template struct isp_tsp_parameter { uint32_t isp_tsp_instruction_word; uint32_t tsp_instruction_word; uint32_t texture_control_word; struct vertex vertex[N]; }; template struct isp_tsp_parameter { uint32_t isp_tsp_instruction_word; struct { uint32_t tsp_instruction_word; uint32_t texture_control_word; } volume[2]; struct vertex vertex[N]; }; static_assert((sizeof (isp_tsp_parameter<1>)) == 28); static_assert((sizeof (isp_tsp_parameter<1, texture>)) == 36); static_assert((sizeof (isp_tsp_parameter<1, texture, two_volumes>)) == 56); static_assert((sizeof (isp_tsp_parameter<1, texture, two_volumes, offset>)) == 64); static_assert((sizeof (isp_tsp_parameter<1, non_texture, two_volumes>)) == 40); static_assert((sizeof (isp_tsp_parameter<1, non_texture, two_volumes, offset>)) == 48); }