diff --git a/hw/rtl/tex_unit/VX_tex_memory.sv b/hw/rtl/tex_unit/VX_tex_mem.sv similarity index 99% rename from hw/rtl/tex_unit/VX_tex_memory.sv rename to hw/rtl/tex_unit/VX_tex_mem.sv index af335ba2..1dbfbcf1 100644 --- a/hw/rtl/tex_unit/VX_tex_memory.sv +++ b/hw/rtl/tex_unit/VX_tex_mem.sv @@ -1,5 +1,5 @@ `include "VX_tex_define.vh" -module VX_tex_memory #( +module VX_tex_mem #( parameter CORE_ID = 0, parameter REQ_INFOW = 1, parameter NUM_REQS = 1 diff --git a/hw/rtl/tex_unit/VX_tex_unit.sv b/hw/rtl/tex_unit/VX_tex_unit.sv index dbcf5314..66afd301 100644 --- a/hw/rtl/tex_unit/VX_tex_unit.sv +++ b/hw/rtl/tex_unit/VX_tex_unit.sv @@ -137,11 +137,11 @@ module VX_tex_unit #( wire [REQ_INFOW_M-1:0] mem_rsp_info; wire mem_rsp_ready; - VX_tex_memory #( + VX_tex_mem #( .CORE_ID (CORE_ID), .REQ_INFOW (REQ_INFOW_M), .NUM_REQS (`NUM_THREADS) - ) tex_memory ( + ) tex_mem ( .clk (clk), .reset (reset), diff --git a/tests/regression/basic/kernel.c b/tests/regression/basic/kernel.c index 5279d156..bc5ec076 100644 --- a/tests/regression/basic/kernel.c +++ b/tests/regression/basic/kernel.c @@ -3,7 +3,7 @@ #include "common.h" void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; uint32_t count = arg->count; int32_t* src_ptr = (int32_t*)arg->src_ptr; int32_t* dst_ptr = (int32_t*)arg->dst_ptr; diff --git a/tests/regression/demo/kernel.c b/tests/regression/demo/kernel.c index 7e2b5dcd..40fe4273 100644 --- a/tests/regression/demo/kernel.c +++ b/tests/regression/demo/kernel.c @@ -3,7 +3,7 @@ #include #include "common.h" -void kernel_body(int task_id, const kernel_arg_t* arg) { +void kernel_body(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; int32_t* src0_ptr = (int32_t*)arg->src0_ptr; int32_t* src1_ptr = (int32_t*)arg->src1_ptr; @@ -17,6 +17,6 @@ void kernel_body(int task_id, const kernel_arg_t* arg) { } void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; - vx_spawn_tasks(arg->num_tasks, kernel_body, arg); + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + vx_spawn_tasks(arg->num_tasks, (vx_spawn_tasks_cb)kernel_body, arg); } \ No newline at end of file diff --git a/tests/regression/diverge/kernel.c b/tests/regression/diverge/kernel.c index 5d0745a1..98fd2b0e 100644 --- a/tests/regression/diverge/kernel.c +++ b/tests/regression/diverge/kernel.c @@ -5,7 +5,7 @@ // Parallel Selection sort -void kernel_body(int task_id, const kernel_arg_t* arg) { +void kernel_body(int task_id, kernel_arg_t* arg) { int32_t* src_ptr = (int32_t*)arg->src_ptr; int32_t* dst_ptr = (int32_t*)arg->dst_ptr; @@ -44,6 +44,6 @@ void kernel_body(int task_id, const kernel_arg_t* arg) { } void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; - vx_spawn_tasks(arg->num_points, kernel_body, arg); + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + vx_spawn_tasks(arg->num_points, (vx_spawn_tasks_cb)kernel_body, arg); } \ No newline at end of file diff --git a/tests/regression/dogfood/kernel.c b/tests/regression/dogfood/kernel.c index f61e6a4e..ce65f0d8 100644 --- a/tests/regression/dogfood/kernel.c +++ b/tests/regression/dogfood/kernel.c @@ -4,14 +4,14 @@ #include #include "common.h" -typedef void (*PFN_Kernel)(int task_id, const kernel_arg_t* arg); +typedef void (*PFN_Kernel)(int task_id, kernel_arg_t* arg); inline float __ieee754_sqrtf (float x) { asm ("fsqrt.s %0, %1" : "=f" (x) : "f" (x)); return x; } -void kernel_iadd(int task_id, const kernel_arg_t* arg) { +void kernel_iadd(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; int32_t* src0_ptr = (int32_t*)arg->src0_ptr; int32_t* src1_ptr = (int32_t*)arg->src1_ptr; @@ -26,7 +26,7 @@ void kernel_iadd(int task_id, const kernel_arg_t* arg) { } } -void kernel_imul(int task_id, const kernel_arg_t* arg) { +void kernel_imul(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; int32_t* src0_ptr = (int32_t*)arg->src0_ptr; int32_t* src1_ptr = (int32_t*)arg->src1_ptr; @@ -41,7 +41,7 @@ void kernel_imul(int task_id, const kernel_arg_t* arg) { } } -void kernel_idiv(int task_id, const kernel_arg_t* arg) { +void kernel_idiv(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; int32_t* src0_ptr = (int32_t*)arg->src0_ptr; int32_t* src1_ptr = (int32_t*)arg->src1_ptr; @@ -56,7 +56,7 @@ void kernel_idiv(int task_id, const kernel_arg_t* arg) { } } -void kernel_idiv_mul(int task_id, const kernel_arg_t* arg) { +void kernel_idiv_mul(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; int32_t* src0_ptr = (int32_t*)arg->src0_ptr; int32_t* src1_ptr = (int32_t*)arg->src1_ptr; @@ -73,7 +73,7 @@ void kernel_idiv_mul(int task_id, const kernel_arg_t* arg) { } } -void kernel_fadd(int task_id, const kernel_arg_t* arg) { +void kernel_fadd(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -88,7 +88,7 @@ void kernel_fadd(int task_id, const kernel_arg_t* arg) { } } -void kernel_fsub(int task_id, const kernel_arg_t* arg) { +void kernel_fsub(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -103,7 +103,7 @@ void kernel_fsub(int task_id, const kernel_arg_t* arg) { } } -void kernel_fmul(int task_id, const kernel_arg_t* arg) { +void kernel_fmul(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -118,7 +118,7 @@ void kernel_fmul(int task_id, const kernel_arg_t* arg) { } } -void kernel_fmadd(int task_id, const kernel_arg_t* arg) { +void kernel_fmadd(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -133,7 +133,7 @@ void kernel_fmadd(int task_id, const kernel_arg_t* arg) { } } -void kernel_fmsub(int task_id, const kernel_arg_t* arg) { +void kernel_fmsub(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -148,7 +148,7 @@ void kernel_fmsub(int task_id, const kernel_arg_t* arg) { } } -void kernel_fnmadd(int task_id, const kernel_arg_t* arg) { +void kernel_fnmadd(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -163,7 +163,7 @@ void kernel_fnmadd(int task_id, const kernel_arg_t* arg) { } } -void kernel_fnmsub(int task_id, const kernel_arg_t* arg) { +void kernel_fnmsub(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -178,7 +178,7 @@ void kernel_fnmsub(int task_id, const kernel_arg_t* arg) { } } -void kernel_fnmadd_madd(int task_id, const kernel_arg_t* arg) { +void kernel_fnmadd_madd(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -195,7 +195,7 @@ void kernel_fnmadd_madd(int task_id, const kernel_arg_t* arg) { } } -void kernel_fdiv(int task_id, const kernel_arg_t* arg) { +void kernel_fdiv(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -210,7 +210,7 @@ void kernel_fdiv(int task_id, const kernel_arg_t* arg) { } } -void kernel_fdiv2(int task_id, const kernel_arg_t* arg) { +void kernel_fdiv2(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -227,7 +227,7 @@ void kernel_fdiv2(int task_id, const kernel_arg_t* arg) { } } -void kernel_fsqrt(int task_id, const kernel_arg_t* arg) { +void kernel_fsqrt(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -242,7 +242,7 @@ void kernel_fsqrt(int task_id, const kernel_arg_t* arg) { } } -void kernel_ftoi(int task_id, const kernel_arg_t* arg) { +void kernel_ftoi(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -258,7 +258,7 @@ void kernel_ftoi(int task_id, const kernel_arg_t* arg) { } } -void kernel_ftou(int task_id, const kernel_arg_t* arg) { +void kernel_ftou(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; float* src0_ptr = (float*)arg->src0_ptr; float* src1_ptr = (float*)arg->src1_ptr; @@ -274,7 +274,7 @@ void kernel_ftou(int task_id, const kernel_arg_t* arg) { } } -void kernel_itof(int task_id, const kernel_arg_t* arg) { +void kernel_itof(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; int32_t* src0_ptr = (int32_t*)arg->src0_ptr; int32_t* src1_ptr = (int32_t*)arg->src1_ptr; @@ -290,7 +290,7 @@ void kernel_itof(int task_id, const kernel_arg_t* arg) { } } -void kernel_utof(int task_id, const kernel_arg_t* arg) { +void kernel_utof(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; int32_t* src0_ptr = (int32_t*)arg->src0_ptr; int32_t* src1_ptr = (int32_t*)arg->src1_ptr; @@ -329,6 +329,6 @@ static const PFN_Kernel sc_tests[] = { }; void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; - vx_spawn_tasks(arg->num_tasks, sc_tests[arg->testid], arg); + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + vx_spawn_tasks(arg->num_tasks, (vx_spawn_tasks_cb)sc_tests[arg->testid], arg); } \ No newline at end of file diff --git a/tests/regression/fence/kernel.c b/tests/regression/fence/kernel.c index bc39537f..d3c1c431 100644 --- a/tests/regression/fence/kernel.c +++ b/tests/regression/fence/kernel.c @@ -3,7 +3,7 @@ #include #include "common.h" -void kernel_body(int task_id, const kernel_arg_t* arg) { +void kernel_body(int task_id, kernel_arg_t* arg) { uint32_t count = arg->task_size; int32_t* src0_ptr = (int32_t*)arg->src0_ptr; int32_t* src1_ptr = (int32_t*)arg->src1_ptr; @@ -19,6 +19,6 @@ void kernel_body(int task_id, const kernel_arg_t* arg) { } void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; - vx_spawn_tasks(arg->num_tasks, kernel_body, arg); + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + vx_spawn_tasks(arg->num_tasks, (vx_spawn_tasks_cb)kernel_body, arg); } \ No newline at end of file diff --git a/tests/regression/io_addr/kernel.c b/tests/regression/io_addr/kernel.c index 39d4c5c6..2f8483d8 100644 --- a/tests/regression/io_addr/kernel.c +++ b/tests/regression/io_addr/kernel.c @@ -3,7 +3,7 @@ #include #include "common.h" -void kernel_body(int task_id, const kernel_arg_t* arg) { +void kernel_body(int task_id, kernel_arg_t* arg) { uint32_t* src_ptr = (uint32_t*)arg->src_ptr; uint32_t* dst_ptr = (uint32_t*)arg->dst_ptr; @@ -13,6 +13,6 @@ void kernel_body(int task_id, const kernel_arg_t* arg) { } void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; - vx_spawn_tasks(arg->num_points, kernel_body, arg); + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + vx_spawn_tasks(arg->num_points, (vx_spawn_tasks_cb)kernel_body, arg); } \ No newline at end of file diff --git a/tests/regression/mstress/kernel.c b/tests/regression/mstress/kernel.c index 2d2a86b9..91d9a455 100644 --- a/tests/regression/mstress/kernel.c +++ b/tests/regression/mstress/kernel.c @@ -3,7 +3,7 @@ #include #include "common.h" -void kernel_body(int task_id, const kernel_arg_t* arg) { +void kernel_body(int task_id, kernel_arg_t* arg) { uint32_t stride = arg->stride; uint32_t* addr_ptr = (uint32_t*)arg->addr_ptr; float* src_ptr = (float*)arg->src_ptr; @@ -23,6 +23,6 @@ void kernel_body(int task_id, const kernel_arg_t* arg) { } void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; - vx_spawn_tasks(arg->num_tasks, kernel_body, arg); + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + vx_spawn_tasks(arg->num_tasks, (vx_spawn_tasks_cb)kernel_body, arg); } \ No newline at end of file diff --git a/tests/regression/no_mf_ext/kernel.c b/tests/regression/no_mf_ext/kernel.c index c15ad5fc..a0c19e53 100644 --- a/tests/regression/no_mf_ext/kernel.c +++ b/tests/regression/no_mf_ext/kernel.c @@ -4,7 +4,7 @@ #include "common.h" void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; uint32_t size = arg->size; int32_t* src_ptr = (int32_t*)arg->src_ptr; diff --git a/tests/regression/no_smem/kernel.c b/tests/regression/no_smem/kernel.c index c15ad5fc..a0c19e53 100644 --- a/tests/regression/no_smem/kernel.c +++ b/tests/regression/no_smem/kernel.c @@ -4,7 +4,7 @@ #include "common.h" void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; uint32_t size = arg->size; int32_t* src_ptr = (int32_t*)arg->src_ptr; diff --git a/tests/regression/printf/kernel.c b/tests/regression/printf/kernel.c index 2e3b6566..340b4d97 100644 --- a/tests/regression/printf/kernel.c +++ b/tests/regression/printf/kernel.c @@ -4,12 +4,12 @@ #include #include "common.h" -void kernel_body(int task_id, const kernel_arg_t* arg) { +void kernel_body(int task_id, kernel_arg_t* arg) { int* src_ptr = (int*)arg->src_ptr; vx_printf("task=%d, value=%d\n", task_id, src_ptr[task_id]); } void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; - vx_spawn_tasks(arg->num_points, kernel_body, arg); + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + vx_spawn_tasks(arg->num_points, (vx_spawn_tasks_cb)kernel_body, arg); } \ No newline at end of file diff --git a/tests/regression/sort/kernel.c b/tests/regression/sort/kernel.c index d89a9cb7..5ae7c987 100644 --- a/tests/regression/sort/kernel.c +++ b/tests/regression/sort/kernel.c @@ -20,7 +20,7 @@ int __attribute__((noinline)) __smaller(int index, int tid, int32_t cur_value, i return ret; } -void kernel_body(int task_id, const kernel_arg_t* arg) { +void kernel_body(int task_id, kernel_arg_t* arg) { uint32_t num_points = arg->num_points; int32_t* src_ptr = (int32_t*)arg->src_ptr; int32_t* dst_ptr = (int32_t*)arg->dst_ptr; @@ -37,6 +37,6 @@ void kernel_body(int task_id, const kernel_arg_t* arg) { } void main() { - const kernel_arg_t* arg = (const kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; - vx_spawn_tasks(arg->num_points, kernel_body, arg); + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + vx_spawn_tasks(arg->num_points, (vx_spawn_tasks_cb)kernel_body, arg); } \ No newline at end of file diff --git a/tests/regression/tex/common.h b/tests/regression/tex/common.h index d23c55fb..2abb7234 100644 --- a/tests/regression/tex/common.h +++ b/tests/regression/tex/common.h @@ -3,7 +3,7 @@ #define KERNEL_ARG_DEV_MEM_ADDR 0x7ffff000 -struct kernel_arg_t { +typedef struct { uint32_t num_tasks; uint8_t format; uint8_t filter; @@ -20,6 +20,6 @@ struct kernel_arg_t { uint8_t dst_stride; uint32_t dst_pitch; uint32_t dst_ptr; -}; +} kernel_arg_t; #endif \ No newline at end of file diff --git a/tests/regression/tex/kernel.c b/tests/regression/tex/kernel.c index 6a04b801..bd0cebb4 100644 --- a/tests/regression/tex/kernel.c +++ b/tests/regression/tex/kernel.c @@ -1,31 +1,31 @@ #include #include +#include #include "common.h" #include "texsw.h" #define ENABLE_SW -struct tile_arg_t { - struct kernel_arg_t* state; +typedef struct { + kernel_arg_t* state; uint32_t tile_width; uint32_t tile_height; float deltaX; float deltaY; -}; +} tile_arg_t; -void kernel_body(int task_id, void* arg) { - struct tile_arg_t* _arg = (struct tile_arg_t*)(arg); - struct kernel_arg_t* state = _arg->state; +void kernel_body(int task_id, tile_arg_t* arg) { + kernel_arg_t* state = arg->state; uint32_t xoffset = 0; - uint32_t yoffset = task_id * _arg->tile_height; + uint32_t yoffset = task_id * arg->tile_height; uint8_t* dst_ptr = (uint8_t*)(state->dst_ptr + xoffset * state->dst_stride + yoffset * state->dst_pitch); - float fv = yoffset * _arg->deltaY; - for (uint32_t y = 0; y < _arg->tile_height; ++y) { + float fv = yoffset * arg->deltaY; + for (uint32_t y = 0; y < arg->tile_height; ++y) { uint32_t* dst_row = (uint32_t*)dst_ptr; - float fu = xoffset * _arg->deltaX; - for (uint32_t x = 0; x < _arg->tile_width; ++x) { + float fu = xoffset * arg->deltaX; + for (uint32_t x = 0; x < arg->tile_width; ++x) { int32_t u = (int32_t)(fu * (1<<20)); int32_t v = (int32_t)(fv * (1<<20)); #ifdef ENABLE_SW @@ -37,15 +37,15 @@ void kernel_body(int task_id, void* arg) { #ifdef ENABLE_SW } #endif - fu += _arg->deltaX; + fu += arg->deltaX; } dst_ptr += state->dst_pitch; - fv += _arg->deltaY; + fv += arg->deltaY; } } int main() { - struct kernel_arg_t* arg = (struct kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; + kernel_arg_t* arg = (kernel_arg_t*)KERNEL_ARG_DEV_MEM_ADDR; // configure texture unit vx_csr_write(CSR_TEX_ADDR(0), arg->src_ptr); @@ -56,12 +56,12 @@ int main() { vx_csr_write(CSR_TEX_WRAP(0), (arg->wrap << 2) | arg->wrap); vx_csr_write(CSR_TEX_FILTER(0), (arg->filter ? 1 : 0)); - struct tile_arg_t targ; + tile_arg_t targ; targ.state = arg; targ.tile_width = arg->dst_width; targ.tile_height = (arg->dst_height + arg->num_tasks - 1) / arg->num_tasks; targ.deltaX = 1.0f / arg->dst_width; targ.deltaY = 1.0f / arg->dst_height; - vx_spawn_tasks(arg->num_tasks, kernel_body, &targ); + vx_spawn_tasks(arg->num_tasks, (vx_spawn_tasks_cb)kernel_body, &targ); } \ No newline at end of file diff --git a/tests/regression/tex/texsw.h b/tests/regression/tex/texsw.h index 0b3b07e7..96b9a19e 100644 --- a/tests/regression/tex/texsw.h +++ b/tests/regression/tex/texsw.h @@ -65,7 +65,7 @@ inline int pack(int format, int l, int h) { } } -inline int tex_sw(struct kernel_arg_t* state, int stage, int u, int v, int lod) { +inline int tex_sw(kernel_arg_t* state, int stage, int u, int v, int lod) { int base_addr = state->src_ptr; int mip_offset = 0; int log_width = state->src_logWidth; @@ -148,7 +148,7 @@ inline int vx_tex3(int stage, int u, int v, int lod) { return c; } -inline int tex3_sw(struct kernel_arg_t* state, int stage, int u, int v, int lod) { +inline int tex3_sw(kernel_arg_t* state, int stage, int u, int v, int lod) { int lodn = MIN(lod + 0x10000, TEX_LOD_MAX); int a = tex_sw(state, 0, u, v, lod); int b = tex_sw(state, 0, u, v, lodn);