Latest compatible version of Classicube from the original GitHub repository (https://github.com/ClassiCube/ClassiCube) that can be compiled on Classicube for PowerMac PPC running Mac OS X 10.4.

This commit is contained in:
Andrei Alexandru
2025-12-17 13:17:57 +02:00
commit c71492f846
1248 changed files with 422858 additions and 0 deletions

170
misc/wiiu/Makefile Normal file
View File

@@ -0,0 +1,170 @@
#-------------------------------------------------------------------------------
.SUFFIXES:
#-------------------------------------------------------------------------------
ifeq ($(strip $(DEVKITPRO)),)
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
endif
TOPDIR ?= $(CURDIR)
#-------------------------------------------------------------------------------
# APP_NAME sets the long name of the application
# APP_SHORTNAME sets the short name of the application
# APP_AUTHOR sets the author of the application
#-------------------------------------------------------------------------------
APP_NAME := ClassiCube
APP_SHORTNAME := ClassiCube
APP_AUTHOR := ClassiCube team
include $(DEVKITPRO)/wut/share/wut_rules
#-------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# DATA is a list of directories containing data files
# INCLUDES is a list of directories containing header files
# CONTENT is the path to the bundled folder that will be mounted as /vol/content/
# ICON is the game icon, leave blank to use default rule
# TV_SPLASH is the image displayed during bootup on the TV, leave blank to use default rule
# DRC_SPLASH is the image displayed during bootup on the DRC, leave blank to use default rule
#-------------------------------------------------------------------------------
TARGET := ClassiCube-wiiu
BUILD := build-wiiu
SOURCES := src third_party/bearssl/src
SHADERS := misc/wiiu
DATA := data
INCLUDES := third_party/bearssl/inc
CONTENT :=
ICON :=
TV_SPLASH :=
DRC_SPLASH :=
#-------------------------------------------------------------------------------
# options for code generation
#-------------------------------------------------------------------------------
CFLAGS := -g -Wall -O2 -ffunction-sections -fno-math-errno \
$(MACHDEP)
CFLAGS += $(INCLUDE) -D__WIIU__ -D__WUT__
CXXFLAGS := $(CFLAGS)
ASFLAGS := -g $(ARCH)
LDFLAGS = -g $(ARCH) $(RPXSPECS) -Wl,-Map,$(notdir $*.map)
LIBS := -lwut -lm
#-------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level
# containing include and lib
#-------------------------------------------------------------------------------
LIBDIRS := $(PORTLIBS) $(WUT_ROOT)
#-------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#-------------------------------------------------------------------------------
ifneq ($(BUILD),$(notdir $(CURDIR)))
#-------------------------------------------------------------------------------
export OUTPUT := $(CURDIR)/$(TARGET)
export TOPDIR := $(CURDIR)
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
export DEPSDIR := $(CURDIR)/$(BUILD)
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
BINFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.gsh)))
export LD := $(CC)
export OFILES_BIN := $(addsuffix .o,$(BINFILES))
export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
export OFILES := $(OFILES_BIN) $(OFILES_SRC)
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
-I$(CURDIR)/$(BUILD)
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
ifneq (,$(strip $(CONTENT)))
export APP_CONTENT := $(TOPDIR)/$(CONTENT)
endif
ifneq (,$(strip $(ICON)))
export APP_ICON := $(TOPDIR)/$(ICON)
else ifneq (,$(wildcard $(TOPDIR)/$(TARGET).png))
export APP_ICON := $(TOPDIR)/$(TARGET).png
else ifneq (,$(wildcard $(TOPDIR)/icon.png))
export APP_ICON := $(TOPDIR)/icon.png
endif
ifneq (,$(strip $(TV_SPLASH)))
export APP_TV_SPLASH := $(TOPDIR)/$(TV_SPLASH)
else ifneq (,$(wildcard $(TOPDIR)/tv-splash.png))
export APP_TV_SPLASH := $(TOPDIR)/tv-splash.png
else ifneq (,$(wildcard $(TOPDIR)/splash.png))
export APP_TV_SPLASH := $(TOPDIR)/splash.png
endif
ifneq (,$(strip $(DRC_SPLASH)))
export APP_DRC_SPLASH := $(TOPDIR)/$(DRC_SPLASH)
else ifneq (,$(wildcard $(TOPDIR)/drc-splash.png))
export APP_DRC_SPLASH := $(TOPDIR)/drc-splash.png
else ifneq (,$(wildcard $(TOPDIR)/splash.png))
export APP_DRC_SPLASH := $(TOPDIR)/splash.png
endif
.PHONY: $(BUILD) clean all
#-------------------------------------------------------------------------------
all: $(BUILD)
$(BUILD):
@[ -d $@ ] || mkdir -p $@
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/misc/wiiu/Makefile
#-------------------------------------------------------------------------------
clean:
@echo clean ...
@rm -fr $(BUILD) $(TARGET).wuhb $(TARGET).rpx $(TARGET).elf
#-------------------------------------------------------------------------------
else
.PHONY: all
DEPENDS := $(OFILES:.o=.d)
#-------------------------------------------------------------------------------
# main targets
#-------------------------------------------------------------------------------
all : $(OUTPUT).wuhb
$(OUTPUT).wuhb : $(OUTPUT).rpx
$(OUTPUT).rpx : $(OUTPUT).elf
$(OUTPUT).elf : $(OFILES)
# you need a rule like this for each extension you use as binary data
#-------------------------------------------------------------------------------
%.bin.o %_bin.h : %.bin
#-------------------------------------------------------------------------------
@echo $(notdir $<)
@$(bin2o)
#-------------------------------------------------------------------------------
%.gsh.o %_gsh.h : ../misc/wiiu/%.gsh
#-------------------------------------------------------------------------------
echo $(notdir $<)
$(bin2o)
-include $(DEPENDS)
#-------------------------------------------------------------------------------
endif
#-------------------------------------------------------------------------------

17
misc/wiiu/assembler.sh Normal file
View File

@@ -0,0 +1,17 @@
ASSEMBLER=/home/minty/emulators/decaf-emu-ubuntu-20.04/bin/latte-assembler
assemble()
{
echo "Assembling $1 from VS $2 + PS $3"
$ASSEMBLER assemble $1 --vsh $2 --psh $3
}
assemble coloured_none.gsh vs_coloured.vsh ps_coloured_none.psh
assemble textured_none.gsh vs_textured.vsh ps_textured_none.psh
assemble textured_lin.gsh vs_textured.vsh ps_textured_lin.psh
assemble textured_exp.gsh vs_textured.vsh ps_textured_exp.psh
assemble offset_none.gsh vs_offset.vsh ps_textured_none.psh
assemble offset_lin.gsh vs_offset.vsh ps_textured_lin.psh
assemble offset_exp.gsh vs_offset.vsh ps_textured_exp.psh

BIN
misc/wiiu/coloured_none.gsh Normal file

Binary file not shown.

BIN
misc/wiiu/offset_exp.gsh Normal file

Binary file not shown.

BIN
misc/wiiu/offset_lin.gsh Normal file

Binary file not shown.

BIN
misc/wiiu/offset_none.gsh Normal file

Binary file not shown.

View File

@@ -0,0 +1,6 @@
varying vec4 out_col;
void main() {
vec4 col = out_col;
gl_FragColor = col;
}

View File

@@ -0,0 +1,8 @@
; $NUM_SPI_PS_INPUT_CNTL = 1
; $SPI_PS_INPUT_CNTL[0].SEMANTIC = 0
; $SPI_PS_INPUT_CNTL[0].DEFAULT_VAL = 1
; $SQ_PGM_RESOURCES_PS.STACK_SIZE = 0
; -------- Disassembly --------------------
00 EXP_DONE: PIX0, R0
END_OF_PROGRAM

View File

@@ -0,0 +1,13 @@
varying vec4 out_col;
varying vec2 out_uv;
uniform sampler2D texImage;
uniform vec3 fogCol;
uniform float fogDensity;
void main() {
vec4 col = texture(texImage, out_uv) * out_col;
float depth = 1.0 / gl_FragCoord.w;
float f = clamp(exp2(fogDensity * depth), 0.0, 1.0);
col.rgb = mix(fogCol, col.rgb, f);
gl_FragColor = col;
}

View File

@@ -0,0 +1,50 @@
; $MODE = "UniformRegister"
; $SAMPLER_VARS[0].name= "texImage"
; $SAMPLER_VARS[0].type= "sampler2D"
; $SAMPLER_VARS[0].location = 0
; Set position field enabled
; https://github.com/DirectFB/mesa/blob/01e637114914453451becc0dc8afe60faff48d84/src/gallium/drivers/r600/r600_state.c#L2925
; $SPI_PS_IN_CONTROL_0.POSITION_ENA = true
; $SPI_PS_IN_CONTROL_0.POSITION_ADDR = 2
; $NUM_SPI_PS_INPUT_CNTL = 3
; $SPI_PS_INPUT_CNTL[0].semantic = 0
; $SPI_PS_INPUT_CNTL[0].default_val = 1
; $SPI_PS_INPUT_CNTL[1].semantic = 1
; $SPI_PS_INPUT_CNTL[1].default_val = 1
; $SPI_PS_INPUT_CNTL[2].semantic = 2
; $SPI_PS_INPUT_CNTL[2].default_val = 1
; C0
; $UNIFORM_VARS[0].name = "fogColor"
; $UNIFORM_VARS[0].type = "vec4"
; $UNIFORM_VARS[0].count = 1
; $UNIFORM_VARS[0].block = -1
; $UNIFORM_VARS[0].offset = 0
; C1
; $UNIFORM_VARS[1].name = "fogValue"
; $UNIFORM_VARS[1].type = "vec2"
; $UNIFORM_VARS[1].count = 1
; $UNIFORM_VARS[1].block = -1
; $UNIFORM_VARS[1].offset = 4
; -------- Disassembly --------------------
00 TEX: ADDR(48) CNT(1) VALID_PIX
0 SAMPLE R1, R1.xy0x, t0, s0
01 ALU: ADDR(32) CNT(13)
1 x: MUL ____, R0.x, R1.x
y: MUL ____, R0.z, R1.z
z: MUL ____, R0.y, R1.y
w: MUL R0.w, R0.w, R1.w
t: RECIP_IEEE ____, R2.W
2 x: ADD R1.x, PV1.z, -C0.y
y: ADD R1.y, PV1.x, -C0.x
z: ADD R1.z, PV1.y, -C0.z
w: MUL ____, PS1, C1.x
3 t: EXP_e ____, PV2.w CLAMP
4 x: MULADD R0.x, R1.y, PS3, C0.x
y: MULADD R0.y, R1.x, PS3, C0.y
z: MULADD R0.z, R1.z, PS3, C0.z
02 EXP_DONE: PIX0, R0
END_OF_PROGRAM

View File

@@ -0,0 +1,14 @@
varying vec4 out_col;
varying vec2 out_uv;
uniform sampler2D texImage;
uniform vec3 fogCol;
uniform float fogEnd;
void main() {
vec4 col = texture(texImage, out_uv) * out_col;
float depth = 1.0 / gl_FragCoord.w;
float f = clamp(1.0 - fogEnd * depth, 0.0, 1.0);
col.rgb = mix(fogCol, col.rgb, f);
gl_FragColor = col;
}

View File

@@ -0,0 +1,50 @@
; $MODE = "UniformRegister"
; $SAMPLER_VARS[0].name= "texImage"
; $SAMPLER_VARS[0].type= "sampler2D"
; $SAMPLER_VARS[0].location = 0
; Set position field enabled
; https://github.com/DirectFB/mesa/blob/01e637114914453451becc0dc8afe60faff48d84/src/gallium/drivers/r600/r600_state.c#L2925
; $SPI_PS_IN_CONTROL_0.POSITION_ENA = true
; $SPI_PS_IN_CONTROL_0.POSITION_ADDR = 2
; $NUM_SPI_PS_INPUT_CNTL = 3
; $SPI_PS_INPUT_CNTL[0].semantic = 0
; $SPI_PS_INPUT_CNTL[0].default_val = 1
; $SPI_PS_INPUT_CNTL[1].semantic = 1
; $SPI_PS_INPUT_CNTL[1].default_val = 1
; $SPI_PS_INPUT_CNTL[2].semantic = 2
; $SPI_PS_INPUT_CNTL[2].default_val = 1
; C0
; $UNIFORM_VARS[0].name = "fogColor"
; $UNIFORM_VARS[0].type = "vec4"
; $UNIFORM_VARS[0].count = 1
; $UNIFORM_VARS[0].block = -1
; $UNIFORM_VARS[0].offset = 0
; C1
; $UNIFORM_VARS[1].name = "fogValue"
; $UNIFORM_VARS[1].type = "vec2"
; $UNIFORM_VARS[1].count = 1
; $UNIFORM_VARS[1].block = -1
; $UNIFORM_VARS[1].offset = 4
; -------- Disassembly --------------------
00 TEX: ADDR(48) CNT(1) VALID_PIX
0 SAMPLE R1, R1.xy0x, t0, s0
01 ALU: ADDR(32) CNT(13)
1 x: MUL ____, R0.x, R1.x
y: MUL ____, R0.z, R1.z
z: MUL ____, R0.y, R1.y
w: MUL R0.w, R0.w, R1.w
t: RECIP_IEEE ____, R2.W
2 x: ADD R1.x, PV1.z, -C0.y
y: ADD R1.y, PV1.x, -C0.x
z: ADD R1.z, PV1.y, -C0.z
w: MULADD R3.w, -PS1, C1.y, 1.0f CLAMP
3 x: MULADD R0.x, R1.y, PV2.w, C0.x
y: MULADD R0.y, R1.x, PV2.w, C0.y
z: MULADD R0.z, R1.z, PV2.w, C0.z
02 EXP_DONE: PIX0, R0
END_OF_PROGRAM

View File

@@ -0,0 +1,9 @@
varying vec4 out_col;
varying vec2 out_uv;
uniform sampler2D texImage;
void main() {
vec4 col = texture(texImage, out_uv) * out_col;
gl_FragColor = col;
}

View File

@@ -0,0 +1,21 @@
; $MODE = "UniformRegister"
; $SAMPLER_VARS[0].name= "texImage"
; $SAMPLER_VARS[0].type= "sampler2D"
; $SAMPLER_VARS[0].location = 0
; $NUM_SPI_PS_INPUT_CNTL = 2
; $SPI_PS_INPUT_CNTL[0].semantic = 0
; $SPI_PS_INPUT_CNTL[0].default_val = 1
; $SPI_PS_INPUT_CNTL[1].semantic = 1
; $SPI_PS_INPUT_CNTL[1].default_val = 1
; -------- Disassembly --------------------
00 TEX: ADDR(48) CNT(1) VALID_PIX
0 SAMPLE R1, R1.xy0x, t0, s0
01 ALU: ADDR(32) CNT(4)
1 x: MUL R0.x, R0.x, R1.x
y: MUL R0.y, R0.y, R1.y
z: MUL R0.z, R0.z, R1.z
w: MUL R0.w, R0.w, R1.w
02 EXP_DONE: PIX0, R0
END_OF_PROGRAM

18
misc/wiiu/shaders.txt Normal file
View File

@@ -0,0 +1,18 @@
Shader samples
https://github.com/decaf-emu/wiiu-tests/blob/master/content/shaders/pos_colour.vsh
https://github.com/GaryOderNichts/wiiu-shaders/blob/master/shaders.md
https://github.com/luRaichu/recsbr/blob/163fa441712f6b25e780e914617941c2385b330e/src/Backends/Rendering/WiiUShaders/shader%20sources/plain.vsh#L6
https://github.com/GaryOderNichts/MultiDRCSpaceDemo/blob/30a6337a47dabafd6d601ce0555b326866f63247/shaders/textureShader.vsh#L6
https://github.com/luRaichu/recsbr/blob/163fa441712f6b25e780e914617941c2385b330e/src/Backends/Rendering/WiiUShaders/shader%20sources/texture.vsh#L9
https://github.com/rw-r-r-0644/gx2-texture/blob/83d7707e8d4b33ec7ba63d5c7dfe62c359b2b50a/shaders/texture_shader.vsh#L9
https://github.com/yawut/ntrview-wiiu/blob/45b1c7f05cfd9917b8b171f3db08dc63293fc5c5/gfx/gx2_shaders/main.psh
https://github.com/Hydr8gon/NooDS/blob/b41cb3b9b889481c998e7e83db1ab3ef9d97b838/src/console/shaders/shader_wiiu.vsh
https://github.com/luRaichu/recsbr/blob/163fa441712f6b25e780e914617941c2385b330e/src/Backends/Rendering/WiiUShaders/shader%20sources/wtf%20is%20this.txt
https://github.com/comex/quiet_/blob/4b55e8c9585e336ad3e09628d951a4d7321e70f7/qmod/shader2.psh#L4
To generate shader assembly
1) Get AMD ShaderAnalyzer
2) Select Radeon HD 4670 (RV370) Assembly as the output format
Then run assembler.sh to assemble all files

BIN
misc/wiiu/textured_exp.gsh Normal file

Binary file not shown.

BIN
misc/wiiu/textured_lin.gsh Normal file

Binary file not shown.

BIN
misc/wiiu/textured_none.gsh Normal file

Binary file not shown.

View File

@@ -0,0 +1,9 @@
attribute vec3 in_pos;
attribute vec4 in_col;
varying vec4 out_col;
uniform mat4 mvp;
void main() {
gl_Position = mvp * vec4(in_pos, 1.0);
out_col = in_col;
}

42
misc/wiiu/vs_coloured.vsh Normal file
View File

@@ -0,0 +1,42 @@
; $MODE = "UniformRegister"
; $SPI_VS_OUT_CONFIG.VS_EXPORT_COUNT = 0
; $NUM_SPI_VS_OUT_ID = 1
; out_colour
; $SPI_VS_OUT_ID[0].SEMANTIC_0 = 0
; C0
; $UNIFORM_VARS[0].name = "mvp"
; $UNIFORM_VARS[0].type = "mat4"
; $UNIFORM_VARS[0].count = 1
; $UNIFORM_VARS[0].block = -1
; $UNIFORM_VARS[0].offset = 0
; R1
; $ATTRIB_VARS[0].name = "in_pos"
; $ATTRIB_VARS[0].type = "vec3"
; $ATTRIB_VARS[0].location = 0
; R2
; $ATTRIB_VARS[1].name = "in_col"
; $ATTRIB_VARS[1].type = "vec4"
; $ATTRIB_VARS[1].location = 1
; -------- Disassembly --------------------
00 CALL_FS NO_BARRIER
01 ALU: ADDR(32) CNT(12)
0 x: MULADD R4.x, R1.z, C2.x, C3.x
y: MULADD R4.y, R1.z, C2.y, C3.y
z: MULADD R4.z, R1.z, C2.z, C3.z
w: MULADD R4.w, R1.z, C2.w, C3.w
1 x: MULADD R4.x, R1.y, C1.x, PV0.x
y: MULADD R4.y, R1.y, C1.y, PV0.y
z: MULADD R4.z, R1.y, C1.z, PV0.z
w: MULADD R4.w, R1.y, C1.w, PV0.w
2 x: MULADD R1.x, R1.x, C0.x, PV1.x
y: MULADD R1.y, R1.x, C0.y, PV1.y
z: MULADD R1.z, R1.x, C0.z, PV1.z
w: MULADD R1.w, R1.x, C0.w, PV1.w
02 EXP_DONE: POS0, R1
03 EXP_DONE: PARAM0, R2 NO_BARRIER
END_OF_PROGRAM

13
misc/wiiu/vs_offset.glsl Normal file
View File

@@ -0,0 +1,13 @@
attribute vec3 in_pos;
attribute vec4 in_col;
attribute vec2 in_uv;
varying vec4 out_col;
varying vec2 out_uv;
uniform mat4 mvp;
uniform vec2 texOffset;
void main() {
gl_Position = mvp * vec4(in_pos, 1.0);
out_col = in_col;
out_uv = in_uv + texOffset;
}

57
misc/wiiu/vs_offset.vsh Normal file
View File

@@ -0,0 +1,57 @@
; $MODE = "UniformRegister"
; $SPI_VS_OUT_CONFIG.VS_EXPORT_COUNT = 1
; $NUM_SPI_VS_OUT_ID = 1
; out_colour
; $SPI_VS_OUT_ID[0].SEMANTIC_0 = 0
; out_uv
; $SPI_VS_OUT_ID[0].SEMANTIC_1 = 1
; C0
; $UNIFORM_VARS[0].name = "mvp"
; $UNIFORM_VARS[0].type = "mat4"
; $UNIFORM_VARS[0].count = 1
; $UNIFORM_VARS[0].block = -1
; $UNIFORM_VARS[0].offset = 0
; C4
; $UNIFORM_VARS[1].name = "texOffset"
; $UNIFORM_VARS[1].type = "vec2"
; $UNIFORM_VARS[1].count = 1
; $UNIFORM_VARS[1].block = -1
; $UNIFORM_VARS[1].offset = 16
; R1
; $ATTRIB_VARS[0].name = "in_pos"
; $ATTRIB_VARS[0].type = "vec3"
; $ATTRIB_VARS[0].location = 0
; R2
; $ATTRIB_VARS[1].name = "in_col"
; $ATTRIB_VARS[1].type = "vec4"
; $ATTRIB_VARS[1].location = 1
; R3
; $ATTRIB_VARS[2].name = "in_uv"
; $ATTRIB_VARS[2].type = "vec2"
; $ATTRIB_VARS[2].location = 2
; -------- Disassembly --------------------
00 CALL_FS NO_BARRIER
01 ALU: ADDR(32) CNT(14)
0 x: MULADD R4.x, R1.z, C2.x, C3.x
y: MULADD R4.y, R1.z, C2.y, C3.y
z: MULADD R4.z, R1.z, C2.z, C3.z
w: MULADD R4.w, R1.z, C2.w, C3.w
1 x: MULADD R4.x, R1.y, C1.x, PV0.x
y: MULADD R4.y, R1.y, C1.y, PV0.y
z: MULADD R4.z, R1.y, C1.z, PV0.z
w: MULADD R4.w, R1.y, C1.w, PV0.w
2 x: MULADD R1.x, R1.x, C0.x, PV1.x
y: MULADD R1.y, R1.x, C0.y, PV1.y
z: MULADD R1.z, R1.x, C0.z, PV1.z
w: MULADD R1.w, R1.x, C0.w, PV1.w
3 x: ADD R3.x, R3.x, C4.x
y: ADD R3.y, R3.y, C4.y
02 EXP_DONE: POS0, R1
03 EXP: PARAM0, R2 NO_BARRIER
04 EXP_DONE: PARAM1, R3.xyzz NO_BARRIER
END_OF_PROGRAM

View File

@@ -0,0 +1,12 @@
attribute vec3 in_pos;
attribute vec4 in_col;
attribute vec2 in_uv;
varying vec4 out_col;
varying vec2 out_uv;
uniform mat4 mvp;
void main() {
gl_Position = mvp * vec4(in_pos, 1.0);
out_col = in_col;
out_uv = in_uv;
}

49
misc/wiiu/vs_textured.vsh Normal file
View File

@@ -0,0 +1,49 @@
; $MODE = "UniformRegister"
; $SPI_VS_OUT_CONFIG.VS_EXPORT_COUNT = 1
; $NUM_SPI_VS_OUT_ID = 1
; out_colour
; $SPI_VS_OUT_ID[0].SEMANTIC_0 = 0
; out_uv
; $SPI_VS_OUT_ID[0].SEMANTIC_1 = 1
; C0
; $UNIFORM_VARS[0].name = "mvp"
; $UNIFORM_VARS[0].type = "mat4"
; $UNIFORM_VARS[0].count = 1
; $UNIFORM_VARS[0].block = -1
; $UNIFORM_VARS[0].offset = 0
; R1
; $ATTRIB_VARS[0].name = "in_pos"
; $ATTRIB_VARS[0].type = "vec3"
; $ATTRIB_VARS[0].location = 0
; R2
; $ATTRIB_VARS[1].name = "in_col"
; $ATTRIB_VARS[1].type = "vec4"
; $ATTRIB_VARS[1].location = 1
; R3
; $ATTRIB_VARS[2].name = "in_uv"
; $ATTRIB_VARS[2].type = "vec2"
; $ATTRIB_VARS[2].location = 2
; -------- Disassembly --------------------
00 CALL_FS NO_BARRIER
01 ALU: ADDR(32) CNT(12)
0 x: MULADD R4.x, R1.z, C2.x, C3.x
y: MULADD R4.y, R1.z, C2.y, C3.y
z: MULADD R4.z, R1.z, C2.z, C3.z
w: MULADD R4.w, R1.z, C2.w, C3.w
1 x: MULADD R4.x, R1.y, C1.x, PV0.x
y: MULADD R4.y, R1.y, C1.y, PV0.y
z: MULADD R4.z, R1.y, C1.z, PV0.z
w: MULADD R4.w, R1.y, C1.w, PV0.w
2 x: MULADD R1.x, R1.x, C0.x, PV1.x
y: MULADD R1.y, R1.x, C0.y, PV1.y
z: MULADD R1.z, R1.x, C0.z, PV1.z
w: MULADD R1.w, R1.x, C0.w, PV1.w
02 EXP_DONE: POS0, R1
03 EXP: PARAM0, R2 NO_BARRIER
04 EXP_DONE: PARAM1, R3.xyzz NO_BARRIER
END_OF_PROGRAM